/* * TeleStax, Open Source Cloud Communications Copyright 2012. * 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.sccp.impl.router; import javolution.xml.XMLBinding; import javolution.xml.XMLObjectReader; import javolution.xml.XMLObjectWriter; import org.mobicents.protocols.ss7.indicator.GlobalTitleIndicator; import org.mobicents.protocols.ss7.indicator.NatureOfAddress; import org.mobicents.protocols.ss7.indicator.NumberingPlan; import org.mobicents.protocols.ss7.indicator.RoutingIndicator; import org.mobicents.protocols.ss7.sccp.LoadSharingAlgorithm; import org.mobicents.protocols.ss7.sccp.OriginationType; import org.mobicents.protocols.ss7.sccp.RuleType; import org.mobicents.protocols.ss7.sccp.SccpProtocolVersion; import org.mobicents.protocols.ss7.sccp.impl.SccpStackImpl; import org.mobicents.protocols.ss7.sccp.impl.message.MessageFactoryImpl; import org.mobicents.protocols.ss7.sccp.impl.parameter.ParameterFactoryImpl; import org.mobicents.protocols.ss7.sccp.message.SccpMessage; import org.mobicents.protocols.ss7.sccp.parameter.GlobalTitle0100; import org.mobicents.protocols.ss7.sccp.parameter.ParameterFactory; import org.mobicents.protocols.ss7.sccp.parameter.SccpAddress; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; /** * @author amit bhayani * @author kulikov */ public class RuleTest { private static final String RULE = "1;pattern(ROUTING_BASED_ON_GLOBAL_TITLE#tt= #np= #noa=NATIONAL#digits=9023629581#ssn= #dpc=0#dpcProhibited=false);translation(ROUTING_BASED_ON_GLOBAL_TITLE#tt= #np= #noa=INTERNATIONAL#digits=79023629581#ssn= #dpc=345#dpcProhibited=false);\n"; ParameterFactory factory = new ParameterFactoryImpl(); XMLBinding binding = new XMLBinding(); public RuleTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @BeforeMethod public void setUp() { binding.setClassAttribute("type"); } @AfterMethod public void tearDown() { } @Test(groups = { "router", "functional.translate" }) public void testTranslate0() throws Exception { // Match digits starting with 447797706077 and add PC and SSN. SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle( "917797706077/*",0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 8); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN, factory.createGlobalTitle( "917797706077/-",0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 792, 8); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K/R", 0, null); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("917797706077",0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 8); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN); assertEquals( translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); assertEquals(translatedAddress.getSignalingPointCode(), 792); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "917797706077"); address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("91779770607720",0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 8); assertTrue(rule.matches(address, null, false, 0)); translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN); assertEquals( translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); assertEquals(translatedAddress.getSignalingPointCode(), 792); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "917797706077"); } @Test(groups = { "router", "functional.translate" }) public void testTranslate1() throws Exception { // Match digits 123456789 and replace with PC and SSN. It removes the GT SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("123456789", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN, factory.createGlobalTitle("-"), 123, 8); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R", 0, null); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("123456789", 1), 0, 0); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN); assertEquals(translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.NO_GLOBAL_TITLE_INCLUDED); assertEquals(translatedAddress.getSignalingPointCode(), 123); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertNull(translatedAddress.getGlobalTitle()); } @Test(groups = { "router", "functional.translate" }) public void testTranslate2() throws Exception { // Match a seven digit number starting "123", followed by any three // digits, then "7". SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("123/???/7", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("333/---/4", 1), 123, 0); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R/K/R", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("1234567", 1), 0, 0); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals(translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY); assertEquals(translatedAddress.getSignalingPointCode(), 123); assertEquals(translatedAddress.getSubsystemNumber(), 0); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "3334564"); } @Test(groups = { "router", "functional.translate" }) public void testTranslate3() throws Exception { // Match "441425", followed by any digits Remove the first six digits. // Keep any following digits in the Input. Add a PC(123) & SSN (8). SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("441425/*", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-/-"), 123, 8); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R/K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("4414257897897", 1), 0, 0); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals(translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY); assertEquals(translatedAddress.getSignalingPointCode(), 123); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "7897897"); } @Test(groups = { "router", "functional.translate" }) public void testTranslate4() throws Exception { // Match any digits keep the digits in the and add a PC(123) & SSN (8). SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN, factory.createGlobalTitle("-"), 123, 8); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("4414257897897", 1), 0, 0); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN); assertEquals(translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY); assertEquals(translatedAddress.getSignalingPointCode(), 123); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "4414257897897"); } @Test(groups = { "router", "functional.translate" }) public void testTranslate5() throws Exception { // Match any digits keep the digits in the and add a PC(123) & SSN (8). SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle( "*",0, NumberingPlan.valueOf(1),null, NatureOfAddress.valueOf(4)), 0, 6); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-"), 6045, 6); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("4414257897897",0, NumberingPlan.valueOf(1), null, NatureOfAddress.valueOf(4)), 0, 6); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals( translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); assertEquals(translatedAddress.getSignalingPointCode(), 6045); assertEquals(translatedAddress.getSubsystemNumber(), 6); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "4414257897897"); GlobalTitle0100 gt = (GlobalTitle0100) translatedAddress.getGlobalTitle(); assertEquals(gt.getTranslationType(), 0); assertEquals(gt.getNumberingPlan(), NumberingPlan.ISDN_TELEPHONY); assertEquals(gt.getNatureOfAddress(), NatureOfAddress.INTERNATIONAL); } @Test(groups = { "router", "functional.translate" }) public void testTranslate6() throws Exception { // Match any GT Digits, keep the SSN from original address and add PC 123 SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-", 1), 123, 0); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("1234567", 1), 0, 8); assertTrue(rule.matches(address, null, false, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals(translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY); assertEquals(translatedAddress.getSignalingPointCode(), 123); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "1234567"); } @Test(groups = { "router", "functional.translate" }) public void testTranslate7() throws Exception { // The case when address length is less then size SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("555", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-", 1), 123, 0); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("55", 1), 0, 8); // TODO: the exception is here assertFalse(rule.matches(address, null, false, 0)); } @Test(groups = { "router", "functional.translate" }) public void testTranslate8() throws Exception { // Some bad pattern SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*/5555", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-/-", 1), 123, 0); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K/K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("222", 1), 0, 8); assertTrue(rule.matches(address, null, false, 0)); // TODO: the exception is here SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals(translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY); assertEquals(translatedAddress.getSignalingPointCode(), 123); assertEquals(translatedAddress.getSubsystemNumber(), 8); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "222"); } @Test(groups = { "router", "functional.translate" }) public void testTranslate9() throws Exception { // OriginationType checking SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("222", 1), 0, 8); SccpStackImpl stack = new SccpStackImpl("test"); MessageFactoryImpl mesFact = new MessageFactoryImpl(stack); SccpMessage msgLocalOrig = mesFact.createDataMessageClass1(address, null, new byte[5], 0, 6, false, null, null); byte[] b = new byte[] { 9, 0x01, 0x03, 0x05, 0x09, 0x02, 0x42, 0x08, 0x04, 0x43, 0x01, 0x00, 0x08, 0x5D, 0x62, 0x5B, 0x48, 0x04, 0x00, 0x02, 0x00, 0x30, 0x6B, 0x1A, 0x28, 0x18, 0x06, 0x07, 0x00, 0x11, (byte) 0x86, 0x05, 0x01, 0x01, 0x01, (byte) 0xA0, 0x0D, 0x60, 0x0B, (byte) 0xA1, 0x09, 0x06, 0x07, 0x04, 0x00, 0x00, 0x01, 0x00, 0x19, 0x02, 0x6C, 0x37, (byte) 0xA1, 0x35, 0x02, 0x01, 0x01, 0x02, 0x01, 0x2E, 0x30, 0x2D, (byte) 0x80, 0x05, (byte) 0x89, 0x67, 0x45, 0x23, (byte) 0xF1, (byte) 0x84, 0x06, (byte) 0xA1, 0x21, 0x43, 0x65, (byte) 0x87, (byte) 0xF9, 0x04, 0x1C, 0x2C, 0x09, 0x04, 0x21, 0x43, 0x65, (byte) 0x87, (byte) 0xF9, 0x04, 0x00, 0x11, 0x30, (byte) 0x92, 0x60, 0x60, 0x62, 0x00, 0x0B, (byte) 0xC8, 0x32, (byte) 0x9B, (byte) 0xFD, 0x06, 0x5D, (byte) 0xDF, 0x72, 0x36, 0x19 }; ByteArrayInputStream buf = new ByteArrayInputStream(b); int type = buf.read(); SccpMessage msgRemoteOrig = mesFact.createMessage(type, 101, 102, 0, buf, SccpProtocolVersion.ITU, 0); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.LOCAL, pattern, "K", 0, null); rule.setPrimaryAddressId(1); assertTrue(rule.matches(address, address, msgLocalOrig.getIsMtpOriginated(), 0)); assertFalse(rule.matches(address, address, msgRemoteOrig.getIsMtpOriginated(), 0)); rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.REMOTE, pattern, "K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); assertFalse(rule.matches(address, address, msgLocalOrig.getIsMtpOriginated(), 0)); assertTrue(rule.matches(address, address, msgRemoteOrig.getIsMtpOriginated(), 0)); rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); assertTrue(rule.matches(address, address, msgLocalOrig.getIsMtpOriginated(), 0)); assertTrue(rule.matches(address, address, msgRemoteOrig.getIsMtpOriginated(), 0)); } @Test(groups = { "router", "functional.translate" }) public void testTranslate10() throws Exception { // Test Broadcast RuleType SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("92300010020", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 146); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("92300010020", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 7574, 146); SccpAddress secondaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("92300001009", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 2186, 146); //TODO: XXX: this is not used at all ? SccpAddress newClgPartyAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("92300010321", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 146); RuleImpl rule = new RuleImpl(RuleType.BROADCAST, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); rule.setSecondaryAddressId(2); rule.setNewCallingPartyAddressId(3); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("92300010020", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 146); assertTrue(rule.matches(address, null, true, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals( translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); assertEquals(translatedAddress.getSignalingPointCode(), 7574); assertEquals(translatedAddress.getSubsystemNumber(), 146); assertEquals(translatedAddress.getGlobalTitle().getDigits(), "92300010020"); SccpAddress translatedAddress2 = rule.translate(address, secondaryAddress); assertEquals(translatedAddress2.getAddressIndicator().getRoutingIndicator(), RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); assertEquals( translatedAddress2.getAddressIndicator().getGlobalTitleIndicator(), GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); assertEquals(translatedAddress2.getSignalingPointCode(), 2186); assertEquals(translatedAddress2.getSubsystemNumber(), 146); assertEquals(translatedAddress2.getGlobalTitle().getDigits(), "92300001009"); } @Test(groups = { "router", "functional.translate" }) public void testTranslateHex() throws Exception { // Test Hex SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("48??117/*", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 146); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("00/00", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 7574, 146); RuleImpl rule = new RuleImpl(RuleType.DOMINANT, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "K/K", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); rule.setNewCallingPartyAddressId(3); SccpAddress address = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("48CC117735979971", 0, NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL), 0, 146); SccpAddress address1 = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); assertTrue(rule.matches(address, address1, true, 0)); SccpAddress translatedAddress = rule.translate(address, primaryAddress); // assertEquals(translatedAddress.getAddressIndicator().getRoutingIndicator(), // RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); // assertEquals( // translatedAddress.getAddressIndicator().getGlobalTitleIndicator(), // GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); // assertEquals(translatedAddress.getSignalingPointCode(), 7574); // assertEquals(translatedAddress.getSubsystemNumber(), 146); // assertEquals(translatedAddress.getGlobalTitle().getDigits(), "92300010020"); // // SccpAddress translatedAddress2 = rule.translate(address, secondaryAddress); // // assertEquals(translatedAddress2.getAddressIndicator().getRoutingIndicator(), // RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE); // assertEquals( // translatedAddress2.getAddressIndicator().getGlobalTitleIndicator(), // GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); // assertEquals(translatedAddress2.getSignalingPointCode(), 2186); // assertEquals(translatedAddress2.getSubsystemNumber(), 146); // assertEquals(translatedAddress2.getGlobalTitle().getDigits(), "92300001009"); } @Test(groups = { "router", "functional.encode" }) public void testSerialization() throws Exception { SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("441425/*", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("5678/92", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-/-"), 123, 8); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R/K", 0,patternDefaultCalling); rule.setPrimaryAddressId(1); // Writes ByteArrayOutputStream output = new ByteArrayOutputStream(); XMLObjectWriter writer = XMLObjectWriter.newInstance(output); writer.setIndentation("\t"); // Optional (use tabulation for // indentation). writer.write(rule, "Rule", RuleImpl.class); writer.close(); System.out.println(output.toString()); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); XMLObjectReader reader = XMLObjectReader.newInstance(input); RuleImpl aiOut = reader.read("Rule", RuleImpl.class); assertNotNull(aiOut); assertEquals(aiOut.getRuleType(), RuleType.SOLITARY); assertEquals(aiOut.getLoadSharingAlgorithm(), LoadSharingAlgorithm.Undefined); assertEquals(aiOut.getOriginationType(), OriginationType.ALL); assertTrue(aiOut.getPattern().getGlobalTitle().getDigits().equals("441425/*")); assertTrue(aiOut.getMask().equals("R/K")); assertEquals(aiOut.getPrimaryAddressId(), 1); assertEquals(aiOut.getSecondaryAddressId(), 0); assertNull(aiOut.getNewCallingPartyAddressId()); assertTrue( aiOut.getPatternCallingAddress().getGlobalTitle().getDigits().equals( "5678/92") ); rule = new RuleImpl(RuleType.BROADCAST, LoadSharingAlgorithm.Bit2, OriginationType.LOCAL, pattern, "R/K", 0, patternDefaultCalling); rule.setPrimaryAddressId(11); rule.setSecondaryAddressId(12); rule.setNewCallingPartyAddressId(13); // Writes output = new ByteArrayOutputStream(); writer = XMLObjectWriter.newInstance(output); writer.setIndentation("\t"); // Optional (use tabulation for // indentation). writer.write(rule, "Rule", RuleImpl.class); writer.close(); System.out.println(output.toString()); input = new ByteArrayInputStream(output.toByteArray()); reader = XMLObjectReader.newInstance(input); aiOut = reader.read("Rule", RuleImpl.class); assertNotNull(aiOut); assertEquals(aiOut.getRuleType(), RuleType.BROADCAST); assertEquals(aiOut.getLoadSharingAlgorithm(), LoadSharingAlgorithm.Bit2); assertEquals(aiOut.getOriginationType(), OriginationType.LOCAL); assertTrue(aiOut.getPattern().getGlobalTitle().getDigits().equals("441425/*")); assertTrue(aiOut.getMask().equals("R/K")); assertEquals(aiOut.getPrimaryAddressId(), 11); assertEquals(aiOut.getSecondaryAddressId(), 12); assertEquals((int) aiOut.getNewCallingPartyAddressId(), 13); assertTrue( aiOut.getPatternCallingAddress().getGlobalTitle().getDigits().equals( "5678/92") ); } @Test(groups = { "router", "functional.encode" }) public void testSerialization2() throws Exception { SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("441425/*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("-/-"), 123, 8); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R/K", 0, null); rule.setPrimaryAddressId(1); // Writes ByteArrayOutputStream output = new ByteArrayOutputStream(); XMLObjectWriter writer = XMLObjectWriter.newInstance(output); writer.setIndentation("\t"); // Optional (use tabulation for // indentation). writer.write(rule, "Rule", RuleImpl.class); writer.close(); System.out.println(output.toString()); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); XMLObjectReader reader = XMLObjectReader.newInstance(input); RuleImpl aiOut = reader.read("Rule", RuleImpl.class); assertNotNull(aiOut); assertEquals(aiOut.getRuleType(), RuleType.SOLITARY); assertEquals(aiOut.getLoadSharingAlgorithm(), LoadSharingAlgorithm.Undefined); assertEquals(aiOut.getOriginationType(), OriginationType.ALL); assertTrue(aiOut.getPattern().getGlobalTitle().getDigits().equals("441425/*")); assertTrue(aiOut.getMask().equals("R/K")); assertEquals(aiOut.getPrimaryAddressId(), 1); assertEquals(aiOut.getSecondaryAddressId(), 0); assertNull(aiOut.getNewCallingPartyAddressId()); assertNull(aiOut.getPatternCallingAddress()); rule = new RuleImpl(RuleType.BROADCAST, LoadSharingAlgorithm.Bit2, OriginationType.LOCAL, pattern, "R/K", 0, null); rule.setPrimaryAddressId(11); rule.setSecondaryAddressId(12); rule.setNewCallingPartyAddressId(13); // Writes output = new ByteArrayOutputStream(); writer = XMLObjectWriter.newInstance(output); writer.setIndentation("\t"); // Optional (use tabulation for // indentation). writer.write(rule, "Rule", RuleImpl.class); writer.close(); System.out.println(output.toString()); input = new ByteArrayInputStream(output.toByteArray()); reader = XMLObjectReader.newInstance(input); aiOut = reader.read("Rule", RuleImpl.class); assertNotNull(aiOut); assertEquals(aiOut.getRuleType(), RuleType.BROADCAST); assertEquals(aiOut.getLoadSharingAlgorithm(), LoadSharingAlgorithm.Bit2); assertEquals(aiOut.getOriginationType(), OriginationType.LOCAL); assertTrue(aiOut.getPattern().getGlobalTitle().getDigits().equals("441425/*")); assertTrue(aiOut.getMask().equals("R/K")); assertEquals(aiOut.getPrimaryAddressId(), 11); assertEquals(aiOut.getSecondaryAddressId(), 12); assertEquals((int) aiOut.getNewCallingPartyAddressId(), 13); assertNull(aiOut.getPatternCallingAddress()); } /** * Test of toString method, of class Rule. */ @Test(groups = { "router", "functional.encode" }) public void testToString() { SccpAddress pattern = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("123/???/7", 1), 0, 0); SccpAddress patternDefaultCalling = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("*", 1), 0, 0); SccpAddress primaryAddress = factory.createSccpAddress(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, factory.createGlobalTitle("333/---/4", 1), 123, 0); RuleImpl rule = new RuleImpl(RuleType.SOLITARY, LoadSharingAlgorithm.Undefined, OriginationType.ALL, pattern, "R/K/R", 0, patternDefaultCalling); rule.setPrimaryAddressId(1); rule.setSecondaryAddressId(2); System.out.println(rule.toString()); // assertEquals( rule.toString(),RULE); } }