/* * TeleStax, Open Source Cloud Communications * Copyright 2012, Telestax Inc and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.mobicents.protocols.ss7.isup.impl.message.parameter; import javolution.xml.XMLObjectReader; import javolution.xml.XMLObjectWriter; import org.mobicents.protocols.ss7.isup.message.parameter.GenericDigits; import org.mobicents.protocols.ss7.isup.util.BcdHelper; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; /** * * @author sergey vetyutnev * */ public class GenericDigitsTest { @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @BeforeTest public void setUp() { } @AfterTest public void tearDown() { } private byte[] getEvenData() { return new byte[] { 3, 0x21, 0x43, 0x65 }; // "123456" EVEN } private byte[] getOddData() { return new byte[] { 35, 0x21, 0x43, 0x65, 0x07 }; // "1234567" ODD } private byte[] getEncodedEvenData() { return new byte[] { 0x21, 0x43, 0x65 }; } private byte[] getEncodedOddData() { return new byte[] { 0x21, 0x43, 0x65, 0x07 }; } private byte[] getIA5Data() { return new byte[] { 67, 65, 66, 97, 98, 49, 50 }; // "ABab12" } private String digitsEvenString = "123456"; private String digitsOddString = "1234567"; private String digitsIA5String = "ABab12"; @Test(groups = { "functional.decode", "parameter" }) public void testDecodeEven() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(); prim.decode(getEvenData()); assertEquals(prim.getEncodingScheme(), GenericDigits._ENCODING_SCHEME_BCD_EVEN); assertEquals(prim.getTypeOfDigits(), GenericDigits._TOD_BGCI); assertEquals(prim.getEncodedDigits(), getEncodedEvenData()); assertEquals(prim.getDecodedDigits(), "123456"); } @Test(groups = { "functional.decode", "parameter" }) public void testDecodeOdd() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(); prim.decode(getOddData()); assertEquals(prim.getEncodingScheme(), GenericDigits._ENCODING_SCHEME_BCD_ODD); assertEquals(prim.getTypeOfDigits(), GenericDigits._TOD_BGCI); assertEquals(prim.getEncodedDigits(), getEncodedOddData()); assertEquals(prim.getDecodedDigits(), "1234567"); } @Test(groups = { "functional.encode", "parameter" }) public void testEncodeEven() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(GenericDigits._ENCODING_SCHEME_BCD_EVEN, GenericDigits._TOD_BGCI, getEncodedEvenData()); // int encodingScheme, int typeOfDigits, byte[] digits byte[] data = getEvenData(); byte[] encodedData = prim.encode(); assertTrue(Arrays.equals(data, encodedData)); prim = new GenericDigitsImpl(GenericDigits._ENCODING_SCHEME_BCD_EVEN, GenericDigits._TOD_BGCI, "123456"); encodedData = prim.encode(); assertTrue(Arrays.equals(data, encodedData)); } @Test(groups = { "functional.encode", "parameter" }) public void testEncodeOdd() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(GenericDigits._ENCODING_SCHEME_BCD_ODD, GenericDigits._TOD_BGCI, getEncodedOddData()); // int encodingScheme, int typeOfDigits, byte[] digits byte[] data = getOddData(); byte[] encodedData = prim.encode(); assertTrue(Arrays.equals(data, encodedData)); prim = new GenericDigitsImpl(GenericDigits._ENCODING_SCHEME_BCD_ODD, GenericDigits._TOD_BGCI, "1234567"); encodedData = prim.encode(); assertTrue(Arrays.equals(data, encodedData)); } @Test(groups = { "functional.encode", "parameter" }) public void testSetDecodedDigits() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(); prim.setDecodedDigits(GenericDigits._ENCODING_SCHEME_BCD_EVEN, digitsEvenString ); prim.setTypeOfDigits(GenericDigits._TOD_BGCI); assertTrue(digitsEvenString.equals(prim.getDecodedDigits())); byte[] data = getEvenData(); byte[] encodedData = prim.encode(); assertTrue(Arrays.equals(data, encodedData)); prim.setDecodedDigits(GenericDigits._ENCODING_SCHEME_BCD_ODD, digitsOddString ); prim.setTypeOfDigits(GenericDigits._TOD_BGCI); assertTrue(digitsOddString.equals(prim.getDecodedDigits())); data = getOddData(); encodedData = prim.encode(); assertTrue(Arrays.equals(data, encodedData)); } @Test(groups = { "functional.decode", "parameter" }) public void testSetDecodedHexDigits() throws Exception { String hexString = "0123456789abcdef*#"; System.out.println("Test input digits: " + hexString); GenericDigitsImpl prim = new GenericDigitsImpl(); prim.setDecodedDigits(GenericDigits._ENCODING_SCHEME_BCD_EVEN, hexString ); prim.setTypeOfDigits(GenericDigits._TOD_BGCI); String decodedDigitsString = prim.getDecodedDigits(); System.out.println("Decoded digits: " + decodedDigitsString); String convertedDigits = BcdHelper.convertTelcoCharsToHexDigits(decodedDigitsString); assertTrue(BcdHelper.convertTelcoCharsToHexDigits(hexString).equals(convertedDigits)); } @Test(groups = { "functional.encode", "parameter" }) public void testEncodingIA5() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(); prim.setDecodedDigits(GenericDigits._ENCODING_SCHEME_IA5, digitsIA5String); prim.setTypeOfDigits(GenericDigits._TOD_BGCI); assertEquals(getIA5Data(), prim.encode()); } @Test(groups = { "functional.decode", "parameter" }) public void testDecodingIA5() throws Exception { GenericDigitsImpl prim = new GenericDigitsImpl(); prim.decode(getIA5Data()); assertEquals(prim.getEncodingScheme(), GenericDigits._ENCODING_SCHEME_IA5); assertEquals(prim.getTypeOfDigits(), GenericDigits._TOD_BGCI); assertEquals(prim.getDecodedDigits(), digitsIA5String); } @Test(groups = { "functional.xml.serialize", "parameter" }) public void testXMLSerialize() throws Exception { GenericDigitsImpl original = new GenericDigitsImpl(GenericDigits._ENCODING_SCHEME_BCD_EVEN, GenericDigits._TOD_BGCI, getEncodedEvenData()); // Writes the area to a file. ByteArrayOutputStream baos = new ByteArrayOutputStream(); XMLObjectWriter writer = XMLObjectWriter.newInstance(baos); // writer.setBinding(binding); // Optional. writer.setIndentation("\t"); // Optional (use tabulation for indentation). writer.write(original, "genericDigits", GenericDigitsImpl.class); writer.close(); byte[] rawData = baos.toByteArray(); String serializedEvent = new String(rawData); System.out.println(serializedEvent); ByteArrayInputStream bais = new ByteArrayInputStream(rawData); XMLObjectReader reader = XMLObjectReader.newInstance(bais); GenericDigitsImpl copy = reader.read("genericDigits", GenericDigitsImpl.class); assertEquals(copy.getEncodingScheme(), original.getEncodingScheme()); assertEquals(copy.getTypeOfDigits(), original.getTypeOfDigits()); assertEquals(copy.getEncodedDigits(), original.getEncodedDigits()); assertEquals(copy.getDecodedDigits(), original.getDecodedDigits()); } }