Package org.jpos.util

Source Code of org.jpos.util.FSDMsgTestCase

/*
* jPOS Project [http://jpos.org]
* Copyright (C) 2000-2014 Alejandro P. Revilla
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.jpos.util;

import java.io.FileNotFoundException;
import junit.framework.TestCase;
import org.jpos.iso.FSDISOMsg;
import org.jpos.iso.ISOUtil;

import java.util.Arrays;

public class FSDMsgTestCase extends TestCase {
    private static final String SCHEMA_DIR_URL = "file:build/resources/test/org/jpos/util/";
    private static final String SCHEMA_JAR_URL = "jar:org/jpos/util/";

    FSDMsg imsg;

    FSDMsg omsg;

    public void setUp() throws Exception {
        imsg = new FSDMsg(SCHEMA_DIR_URL + "msg-");
        omsg = new FSDMsg(SCHEMA_DIR_URL + "msg-");
    }

    public void testLeadingBlanks() throws Exception {
        String value = "   123";
        String field = "testafs";
        imsg.set(field, value);
        assertEquals("Leading blanks", ISOUtil.hex2byte("2020203132331C"), imsg
                .pack().getBytes());

        omsg.unpack(imsg.pack().getBytes());

        assertEquals(value, omsg.get(field));
    }

    public void testTraillingBlanksDroppedwithFS() throws Exception {
        String value = "123   ";
        String field = "testafs";
        imsg.set(field, value);
        assertEquals("3132331C", ISOUtil.hexString(imsg
                .pack().getBytes()));

        omsg.unpack(imsg.pack().getBytes());

        assertEquals("123", omsg.get(field));
    }

    public void testMixedBlanksLeadingArePreserved() throws Exception {
        String value = "  123 ";
        String field = "testafs";
        imsg.set(field, value);
        assertEquals("Mixed blanks", ISOUtil.hex2byte("20203132331C"), imsg
                .pack().getBytes());

        omsg.unpack(imsg.pack().getBytes());

        assertEquals("  123", omsg.get(field));
    }

    public void testFinalField() throws Exception {
        String value1 = "  123 ";
        String field1 = "testafs";
        String value2 = "ABC";
        String field2 = "finalfield";
        imsg.set(field1, value1);
        imsg.set(field2, value2);
        assertEquals("20203132331C414243",ISOUtil.hexString(imsg.pack().getBytes()));

        omsg.unpack(imsg.pack().getBytes());
        assertEquals("  123", omsg.get(field1));
        assertEquals(value2, omsg.get(field2));
    }

    public void testDummySeparatorAlpha() throws Exception {
        FSDMsg imsg = new FSDMsg(SCHEMA_DIR_URL + "msgDS-");
        FSDMsg omsg = new FSDMsg(SCHEMA_DIR_URL + "msgDS-");
       

        String macData = "AbCdEfGh";
        imsg.set("length", "8");
        imsg.set("alphavardata", macData);
        assertEquals("0008AbCdEfGh",imsg.pack());

        omsg.unpack(imsg.pack().getBytes());

        assertEquals("0008", omsg.get("length"));
        assertEquals(macData, omsg.get("alphavardata"));

        macData = "AbCdEfGhAbCdEfGhAbCdEfGhAbCdEfGh";
        imsg.set("length", "32");
        imsg.set("alphavardata", macData);
        assertEquals("Dummy separator long data",
                "0032AbCdEfGhAbCdEfGhAbCdEfGhAbCdEfGh", imsg.pack());

        omsg.unpack(imsg.pack().getBytes());

        assertEquals("0032", omsg.get("length"));
        assertEquals(macData, omsg.get("alphavardata"));

        imsg.set("length", "");
        imsg.set("alphavardata", "");
        assertEquals("Dummy separator no data", "0000", imsg.pack());

        imsg.set("length", "40"); // Too long data data will be silently
                                  // truncated,
        // not sure I like this behaviour!
        imsg.set("alphavardata", "AbCdEfGhAbCdEfGhAbCdEfGhAbCdEfGhXXXXXXXX");
        assertEquals("Dummy separator truncated data",
                "0040AbCdEfGhAbCdEfGhAbCdEfGhAbCdEfGh", imsg.pack());

        omsg.unpack(imsg.pack().getBytes());

        assertEquals("0040", omsg.get("length"));
        assertEquals("AbCdEfGhAbCdEfGhAbCdEfGhAbCdEfGh", omsg.get("alphavardata"));

    }

    public void testDummySeparatorBinary() throws Exception {
        FSDMsg imsg = new FSDMsg(SCHEMA_DIR_URL + "DSmsg-");
        FSDMsg omsg = new FSDMsg(SCHEMA_DIR_URL + "DSmsg-");
       

        String macData = "12345678123456781234567812345678";
        String binaryMacData = new String(ISOUtil.hex2byte(macData), ISOUtil.CHARSET);
        String id = "01";
        String binaryID = new String(ISOUtil.hex2byte(id),ISOUtil.CHARSET);
       
        imsg.set("id", id);
        imsg.set("content", macData);
               
        assertEquals(binaryID + binaryMacData, imsg.pack());
       
        omsg.unpack(imsg.pack().getBytes());

        assertEquals(id, omsg.get("id"));
        assertEquals(macData, omsg.get("content"));

        macData = "1234567812345678123456781234567812345678123456781234567812345678";
        binaryMacData = new String(ISOUtil.hex2byte(macData), ISOUtil.CHARSET);
        imsg.set("id", id);
        imsg.set("content", macData);
        assertEquals("Dummy separator long data", binaryID + binaryMacData, imsg
                .pack());

        imsg.set("id", id);
        imsg.set("content", "");
        assertEquals("Dummy separator no data", binaryID, imsg.pack());
       
        omsg.unpack(imsg.pack().getBytes());

        assertEquals(id, omsg.get("id"));
        assertEquals("", omsg.get("content"));
       
        try {
            macData = "1234567890123456789012345678901234567890123456789012345678901234567890123456789099";

            imsg.set("id", id);
            imsg.set("content", macData);

            imsg.pack();
            fail("Runtime Exception expected as field has overflowed.");

        } catch (RuntimeException e) {
            // Expected
        }

    }

    public void testPackJarSchema() throws Exception {
        FSDMsg fsdm = new FSDMsg(SCHEMA_JAR_URL + "DSmsg-");

        String mac = "12345678123456781234567812345678";
        String packedMAC = new String(ISOUtil.hex2byte(mac), ISOUtil.CHARSET);
        String id = "01";
        String packedID = new String(ISOUtil.hex2byte(id),ISOUtil.CHARSET);

        fsdm.set("id", id);
        fsdm.set("content", mac);
        String s = fsdm.pack();
        assertEquals(packedID + packedMAC, s);

    }

    public void testLoadMissingDirSchema() throws Exception {
        FSDMsg fsdm = new FSDMsg(SCHEMA_DIR_URL + "DSmsgX-");

        String mac = "12345678123456781234567812345678";
        String id = "01";

        fsdm.set("id", id);
        fsdm.set("content", mac);
        try {
          fsdm.pack();
          fail("FileNotFoundException expected");
        } catch (FileNotFoundException ex) {}
    }

    public void testLoadMissingJarSchema() throws Exception {
        FSDMsg fsdm = new FSDMsg(SCHEMA_JAR_URL + "DSmsgX-");

        String mac = "12345678123456781234567812345678";
        String id = "01";

        fsdm.set("id", id);
        fsdm.set("content", mac);
        try {
          fsdm.pack();
          fail("FileNotFoundException expected");
        } catch (FileNotFoundException ex) {}
    }

    public void testDummySeparatorNumeric() throws Exception {
        FSDMsg m = new FSDMsg(SCHEMA_DIR_URL + "msgDS-");

   
        String macData = "12345678";
        m.set("length", "8");
        m.set("alphavardata", macData);
        assertEquals("000812345678", m.pack());
   
        macData = "12345678123456781234567812345678";
        m.set("length", "32");
        m.set("alphavardata", macData);
        assertEquals("Dummy separator long data",
                "003212345678123456781234567812345678", m.pack());
   
        m.set("length", "");
        m.set("alphavardata", "");
        assertEquals("Dummy separator no data", "0000", m.pack());
   
        m.set("length", "40"); // Too long data data will be silently truncated,
                               // not sure I like this behaviour!
        m.set("alphavardata", "12345678123456781234567812345678XXXXXXXX");
        assertEquals("Dummy separator truncated data",
                "004012345678123456781234567812345678", m.pack());
   
    }
    public void testClone () throws Exception {
        FSDMsg m0 = new FSDMsg(SCHEMA_DIR_URL + "msgDS-");
       
        m0.set ("alphavardata", "ABCDE");
        FSDMsg m1 = (FSDMsg) m0.clone();
        m1.set ("alphavardata", "12345");
        assertEquals ("Original alphavardata", "ABCDE", m0.get ("alphavardata"));
        assertEquals ("Cloned alphavardata", "12345", m1.get ("alphavardata"));

    }
    public void testFSDISOMsgClone () throws Exception {
        FSDMsg m0 = new FSDMsg(SCHEMA_DIR_URL + "msgDS-");
     
        m0.set ("alphavardata", "ABCDE");
        FSDISOMsg iso0 = new FSDISOMsg (m0);
        FSDISOMsg iso1 = (FSDISOMsg) iso0.clone();
        FSDMsg m1 = iso1.getFSDMsg();
        m1.set ("alphavardata", "12345");
        assertEquals ("Original alphavardata", "ABCDE", m0.get ("alphavardata"));
        assertEquals ("Cloned alphavardata", "12345", m1.get ("alphavardata"));
    }
    public void testFSDISOMsgPartialCloneAndMerge () throws Exception {
        FSDMsg m0 = new FSDMsg(SCHEMA_DIR_URL + "msgiso-");
        m0.set ("0", "0800");
        m0.set ("11", "000001");
        m0.set ("41", "29110001");
        m0.set ("70", "301");
        FSDISOMsg iso0 = new FSDISOMsg (m0);
        FSDISOMsg iso1 = (FSDISOMsg) iso0.clone(new int[] { 0, 11, 70 });
        FSDMsg m1 = iso1.getFSDMsg();

        assertEquals ("m0.0", "0800", m0.get ("0"));
        assertEquals ("m1.0", "0800", m1.get ("0"));
        m1.set ("0", "0810");
        assertEquals ("m0.0", "0800", m0.get ("0"));
        assertEquals ("m1.0", "0810", m1.get ("0"));
        assertNull ("m1.41 should be null", m1.get ("41"));
        iso1.merge (iso0);
        assertEquals ("m1.41", "29110001", m1.get ("41"));
    }
    public void assertEquals(String msg, byte[] b1, byte[] b2) {
        assertTrue(msg, Arrays.equals(b1, b2));
    }
   
   
    public void testFSDMsgDefaultKey () throws Exception {
        FSDMsg m0 = new FSDMsg(SCHEMA_DIR_URL + "fsd-");
        FSDMsg m1 = new FSDMsg(SCHEMA_DIR_URL + "fsd-");
       
        FSDMsg u0 = new FSDMsg(SCHEMA_DIR_URL + "fsd-");
        FSDMsg u1 = new FSDMsg(SCHEMA_DIR_URL + "fsd-");
       
        m0.set("message-id","03");
        m0.set("x","X");
        m0.set("y","WHYWHY03");
        assertEquals ("Default defined - not used - pack", "000X0300WHYWHY03", m0.pack() );

        m1.set("message-id","99");
        m1.set("x","X");
        m1.set("z","DEFAULT");
        assertEquals ("Default defined - used - pack", "000X99DEFAULT   ", m1.pack() );

        u0.unpack(m0.packToBytes());
        assertEquals ("Default defined - not used - unpack", "00WHYWHY03", u0.get("y") );
       
        u1.unpack(m1.packToBytes());
        assertEquals ("Default defined - used - unpack", "DEFAULT   ", u1.get("z") );

    }
   
   
}
TOP

Related Classes of org.jpos.util.FSDMsgTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.