package org.mobicents.protocols.ss7.map.service.mobility.subscriberInformation;
import org.mobicents.protocols.asn.AsnInputStream;
import org.mobicents.protocols.asn.AsnOutputStream;
import org.mobicents.protocols.asn.Tag;
import org.mobicents.protocols.ss7.map.api.primitives.AddressNature;
import org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString;
import org.mobicents.protocols.ss7.map.api.primitives.NumberingPlan;
import org.mobicents.protocols.ss7.map.api.primitives.SubscriberIdentity;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.AdditionalRequestedCAMELSubscriptionInfo;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.RequestedCAMELSubscriptionInfo;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.RequestedSubscriptionInfo;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.BasicServiceCode;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.TeleserviceCodeValue;
import org.mobicents.protocols.ss7.map.api.service.supplementary.SSCode;
import org.mobicents.protocols.ss7.map.api.service.supplementary.SSForBSCode;
import org.mobicents.protocols.ss7.map.api.service.supplementary.SupplementaryCodeValue;
import org.mobicents.protocols.ss7.map.primitives.ISDNAddressStringImpl;
import org.mobicents.protocols.ss7.map.primitives.MAPExtensionContainerTest;
import org.mobicents.protocols.ss7.map.primitives.SubscriberIdentityImpl;
import org.mobicents.protocols.ss7.map.service.mobility.subscriberManagement.BasicServiceCodeImpl;
import org.mobicents.protocols.ss7.map.service.mobility.subscriberManagement.TeleserviceCodeImpl;
import org.mobicents.protocols.ss7.map.service.supplementary.SSCodeImpl;
import org.mobicents.protocols.ss7.map.service.supplementary.SSForBSCodeImpl;
import org.testng.annotations.Test;
import java.util.Arrays;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
/**
* @author vadim subbotin
*/
public class AnyTimeSubscriptionInterrogationRequestTest {
private byte[] data = {48, 91, -96, 9, -127, 7, -111, -105, 2, 33, 67, 101, -9, -95, 26, -95, 6, 4, 1, 112, -125, 1,
0, -126, 0, -125, 1, 0, -124, 0, -121, 1, 2, -120, 0, -118, 0, -116, 0, -114, 0, -126, 7, -111, -105, 2, 103,
69, 35, -15, -93, 39, -96, 32, 48, 10, 6, 3, 42, 3, 4, 11, 12, 13, 14, 15, 48, 5, 6, 3, 42, 3, 6, 48, 11, 6,
3, 42, 3, 5, 21, 22, 23, 24, 25, 26, -95, 3, 31, 32, 33, -124, 0};
@Test(groups = { "functional.decode", "subscriberInformation" })
public void testDecode() throws Exception {
AsnInputStream ansIS = new AsnInputStream(data);
int tag = ansIS.readTag();
assertEquals(tag, Tag.SEQUENCE);
AnyTimeSubscriptionInterrogationRequestImpl request = new AnyTimeSubscriptionInterrogationRequestImpl();
request.decodeAll(ansIS);
assertNotNull(request.getSubscriberIdentity());
assertNotNull(request.getGsmScfAddress());
assertNotNull(request.getRequestedSubscriptionInfo());
assertTrue(MAPExtensionContainerTest.CheckTestExtensionContainer(request.getExtensionContainer()));
assertTrue(request.getLongFTNSupported());
assertEquals(request.getGsmScfAddress().getAddress(), "79207654321");
ISDNAddressString subscriberMsisdn = request.getSubscriberIdentity().getMSISDN();
assertEquals(subscriberMsisdn.getAddressNature(), AddressNature.international_number);
assertEquals(subscriberMsisdn.getNumberingPlan(), NumberingPlan.ISDN);
assertEquals(subscriberMsisdn.getAddress(), "79201234567");
RequestedSubscriptionInfo subscriptionInfo = request.getRequestedSubscriptionInfo();
assertEquals(subscriptionInfo.getRequestedSSInfo().getSsCode().getSupplementaryCodeValue(), SupplementaryCodeValue.allChargingSS);
assertEquals(subscriptionInfo.getRequestedSSInfo().getBasicService().getTeleservice().getTeleserviceCodeValue(), TeleserviceCodeValue.allTeleservices);
assertFalse(subscriptionInfo.getRequestedSSInfo().getLongFtnSupported());
assertTrue(subscriptionInfo.getOdb());
assertEquals(subscriptionInfo.getRequestedCAMELSubscriptionInfo(), RequestedCAMELSubscriptionInfo.oCSI);
assertTrue(subscriptionInfo.getSupportedVlrCamelPhases());
assertFalse(subscriptionInfo.getSupportedSgsnCamelPhases());
assertEquals(subscriptionInfo.getAdditionalRequestedCamelSubscriptionInfo(), AdditionalRequestedCAMELSubscriptionInfo.oImCSI);
assertTrue(subscriptionInfo.getMsisdnBsList());
assertFalse(subscriptionInfo.getCsgSubscriptionDataRequested());
assertTrue(subscriptionInfo.getCwInfo());
assertFalse(subscriptionInfo.getClipInfo());
assertTrue(subscriptionInfo.getClirInfo());
assertFalse(subscriptionInfo.getHoldInfo());
assertTrue(subscriptionInfo.getEctInfo());
}
@Test(groups = { "functional.encode", "subscriberInformation" })
public void testEncode() throws Exception {
ISDNAddressStringImpl subscriberMsisdn = new ISDNAddressStringImpl(AddressNature.international_number, NumberingPlan.ISDN, "79201234567");
SubscriberIdentity subscriberIdentity = new SubscriberIdentityImpl(subscriberMsisdn);
SSCode ssCode = new SSCodeImpl(SupplementaryCodeValue.allChargingSS);
BasicServiceCode basicServiceCode = new BasicServiceCodeImpl(new TeleserviceCodeImpl(TeleserviceCodeValue.allTeleservices));
SSForBSCode ssForBSCode = new SSForBSCodeImpl(ssCode, basicServiceCode, false);
RequestedSubscriptionInfo requestedSubscriptionInfo = new RequestedSubscriptionInfoImpl(ssForBSCode, true, RequestedCAMELSubscriptionInfo.oCSI,
true, false, null, AdditionalRequestedCAMELSubscriptionInfo.oImCSI, true, false, true,
false, true, false, true);
ISDNAddressString gsmSCFAddress = new ISDNAddressStringImpl(AddressNature.international_number, NumberingPlan.ISDN, "79207654321");
AnyTimeSubscriptionInterrogationRequestImpl request = new AnyTimeSubscriptionInterrogationRequestImpl(subscriberIdentity, requestedSubscriptionInfo,
gsmSCFAddress, MAPExtensionContainerTest.GetTestExtensionContainer(), true);
AsnOutputStream asnOS = new AsnOutputStream();
request.encodeAll(asnOS);
byte[] encodedData = asnOS.toByteArray();
assertTrue(Arrays.equals(data, encodedData));
}
}