Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52c08a63 authored by Hui Wang's avatar Hui Wang
Browse files

Update the format of RCS provisioning config XML

Bug: 184275686
Test: atest FrameworksTelephonyTests:com.telephony.ims.RcsConfigTest
Test: atest TeleServiceTests:com.android.phone.RcsProvisioningMonitorTest
Test: atest CtsTelephonyTestCases:android.telephony.ims.cts.ImsServiceTest
Merged-In: I16642ad3ddbd6561e32135269f488578c5bb436b
Change-Id: I16642ad3ddbd6561e32135269f488578c5bb436b
parent bde4d599
Loading
Loading
Loading
Loading
+161 −30
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.telephony.ims;


import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.assertTrue;


@@ -25,9 +26,9 @@ import static org.mockito.Mockito.when;


import android.content.ContentValues;
import android.content.ContentValues;
import android.content.Context;
import android.content.Context;
import android.os.Parcel;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
import android.telephony.ims.RcsConfig;
import android.telephony.ims.RcsConfig;
import android.telephony.ims.RcsConfig.Characteristic;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContentResolver;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;


@@ -46,32 +47,118 @@ import java.util.Arrays;
@RunWith(AndroidJUnit4.class)
@RunWith(AndroidJUnit4.class)
public final class RcsConfigTest {
public final class RcsConfigTest {


    private static final String TEST_RCS_CONFIG = "<RCSConfig>\n"
    private static final String TEST_RCS_CONFIG = "<?xml version=\"1.0\"?>\n"
            + "\t<rcsVolteSingleRegistration>1</rcsVolteSingleRegistration>\n"
            + "<wap-provisioningdoc version=\"1.1\">\n"
            + "\t<SERVICES>\n"
            + "\t<characteristic type=\"APPLICATION\">\n"
            + "\t\t<SupportedRCSProfileVersions>UP_2.0</SupportedRCSProfileVersions>\n"
            + "\t\t<parm name=\"AppID\" value=\"urn:oma:mo:ext-3gpp-ims:1.0\"/>\n"
            + "\t\t<ChatAuth>1</ChatAuth>\n"
            + "\t\t<characteristic type=\"3GPP_IMS\">\n"
            + "\t\t<GroupChatAuth>1</GroupChatAuth>\n"
            + "\t\t\t<parm name=\"AppID\" value=\"ap2001\"/>\n"
            + "\t\t<ftAuth>1</ftAuth>\n"
            + "\t\t\t<parm name=\"Name\" value=\"RCS IMS Settings\"/>\n"
            + "\t\t<standaloneMsgAuth>1</standaloneMsgAuth>\n"
            + "\t\t\t<characteristic type=\"Ext\">\n"
            + "\t\t<geolocPushAuth>1</geolocPushAuth>\n"
            + "\t\t\t\t<characteristic type=\"GSMA\">\n"
            + "\t\t<Ext>\n"
            + "\t\t\t\t\t<parm name=\"AppRef\" value=\"IMS-Setting\"/>\n"
            + "\t\t\t<DataOff>\n"
            + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\"1\"/>\n"
            + "\t\t\t\t<rcsMessagingDataOff>1</rcsMessagingDataOff>\n"
            + "\t\t\t\t</characteristic>\n"
            + "\t\t\t\t<fileTransferDataOff>1</fileTransferDataOff>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t\t<mmsDataOff>1</mmsDataOff>\n"
            + "\t\t</characteristic>\n"
            + "\t\t\t\t<syncDataOff>1</syncDataOff>\n"
            + "\t\t<characteristic type=\"SERVICES\">\n"
            + "\t\t\t</DataOff>\n"
            + "\t\t\t<parm name=\"SupportedRCSProfileVersions\" value=\"UP_2.3\"/>\n"
            + "\t\t</Ext>\n"
            + "\t\t\t<parm name=\"ChatAuth\" value=\"1\"/>\n"
            + "\t</SERVICES>\n"
            + "\t\t\t<parm name=\"GroupChatAuth\" value=\"1\"/>\n"
            + "</RCSConfig>";
            + "\t\t\t<parm name=\"ftAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"standaloneMsgAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"geolocPushAuth\" value=\"1\"/>\n"
            + "\t\t\t<characteristic type=\"Ext\">\n"
            + "\t\t\t\t<characteristic type=\"DataOff\">\n"
            + "\t\t\t\t\t<parm name=\"rcsMessagingDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<parm name=\"fileTransferDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<parm name=\"mmsDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<parm name=\"syncDataOff\" value=\"1\"/>\n"
            + "\t\t\t\t\t<characteristic type=\"Ext\"/>\n"
            + "\t\t\t\t</characteristic>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t</characteristic>\n"
            + "\t\t<characteristic type=\"PRESENCE\">\n"
            + "\t\t\t<parm name=\"client-obj-datalimit\" value=\"8192\"/>\n"
            + "\t\t\t<parm name=\"content-serveruri\" value=\"X\"/>\n"
            + "\t\t\t<parm name=\"source-throttlepublish\" value=\"32\"/>\n"
            + "\t\t\t<parm name=\"max-number-ofsubscriptions-inpresence-list\" value=\"8\"/>\n"
            + "\t\t\t<parm name=\"service-uritemplate\" value=\"X\"/>\n"
            + "\t\t\t<parm name=\"RLS-URI\" value=\"X\"/>\n"
            + "\t\t</characteristic>\n"
            + "\t\t<characteristic type=\"MESSAGING\">\n"
            + "\t\t\t<characteristic type=\"StandaloneMsg\">\n"
            + "\t\t\t\t<parm name=\"MaxSize\" value=\"8192\"/>\n"
            + "\t\t\t\t<parm name=\"SwitchoverSize\" value=\"1024\"/>\n"
            + "\t\t\t\t<parm name=\"exploder-uri\" value=\"X\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"Chat\">\n"
            + "\t\t\t\t<parm name=\"max_adhoc_group_size\" value=\"60\"/>\n"
            + "\t\t\t\t<parm name=\"conf-fcty-uri\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"AutAccept\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"AutAcceptGroupChat\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"TimerIdle\" value=\"120\"/>\n"
            + "\t\t\t\t<parm name=\"MaxSize\" value=\"16384\"/>\n"
            + "\t\t\t\t<parm name=\"ChatRevokeTimer\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"reconnectGuardTimer\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"cfsTrigger\" value=\"1\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<parm name=\"max1ToManyRecipients\" value=\"8\"/>\n"
            + "\t\t\t<parm name=\"1toManySelectedTech\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"displayNotificationSwitch\" value=\"0\"/>\n"
            + "\t\t\t<parm name=\"contentCompressSize\" value=\"1024\"/>\n"
            + "\t\t\t<characteristic type=\"FileTransfer\">\n"
            + "\t\t\t\t<parm name=\"ftWarnSize\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"MaxSizeFileTr\" value=\"65536\"/>\n"
            + "\t\t\t\t<parm name=\"ftAutAccept\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPCSURI\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPDLURI\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPCSUser\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPCSPwd\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"ftHTTPFallback\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\" ftMax1ToManyRecipients\" value=\"0\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"Chatbot\">\n"
            + "\t\t\t\t<parm name=\"ChatbotDirectory\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"BotinfoFQDNRoot\" value=\"X\"/>\n"
            + "\t\t\t\t<part name=\"SpecificChatbotsList\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"IdentityInEnrichedSearch\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"PrivacyDisable\" value=\"0\"/>\n"
            + "\t\t\t\t<parm name=\"ChatbotMsgTech\" value=\"1\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"MessageStore\">\n"
            + "\t\t\t\t<parm name=\"MsgStoreUrl\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreNotifUrl\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreAuth\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreUserName\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"MsgStoreUserPwd\" value=\"X\"/>\n"
            + "\t\t\t\t<parm name=\"EventRpting\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"AuthArchive\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"SMSStore\" value=\"1\"/>\n"
            + "\t\t\t\t<parm name=\"MMSStore\" value=\"1\"/>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t\t<characteristic type=\"Ext\"/>\n"
            + "\t\t</characteristic>\n"
            + "\t</characteristic>\n"
            + "</wap-provisioningdoc>\n";


    private static final String[][] TEST_CONFIG_VALUES = {{"rcsVolteSingleRegistration", "1"},
    private static final String[][] TEST_CONFIG_VALUES = {{"rcsVolteSingleRegistration", "1"},
        {"SupportedRCSProfileVersions", "UP_2.0"}, {"ChatAuth", "1"}, {"GroupChatAuth", "1"},
        {"SupportedRCSProfileVersions", "UP_2.3"}, {"ChatAuth", "1"}, {"GroupChatAuth", "1"},
        {"ftAuth", "1"}, {"standaloneMsgAuth", "1"}, {"geolocPushAuth", "1"},
        {"ftAuth", "1"}, {"standaloneMsgAuth", "1"}, {"geolocPushAuth", "1"},
        {"rcsMessagingDataOff", "1"}, {"fileTransferDataOff", "1"}, {"mmsDataOff", "1"},
        {"rcsMessagingDataOff", "1"}, {"fileTransferDataOff", "1"}, {"mmsDataOff", "1"},
        {"syncDataOff", "1"}};
        {"syncDataOff", "1"}};


    private static final String[] VALID_CHARACTERISTICS = {"APPLICATION", "3GPP_IMS", "Ext",
        "GSMA",  "SERVICES", "DaTAOFF", "PRESENCE", "MESSAGING", "Chat", "FileTransfer",
        "Chatbot", "MessageSTORE"};
    private static final String[] INVALID_CHARACTERISTICS = {"APP2LICATION", "3GPPIMS", "Exte",
        "GSMf",  "SERVICE", "DaTAOn", "PRESENCE2", "MESSAG", "Ch", "File", "STORE"};
    private static final String[][] SUB_CHARACTERISTICS = {
        {"APPLICATION", "3GPP_IMS", "Ext", "GSMA"},
        {"APPLICATION", "SERVICES", "Ext", "DataOff", "Ext"}};
    private static final String[][] SAME_PARMS_DIFF_CHARS_VALUE_MAP = {
        {"MaxSize", "Chat", "16384"}, {"MaxSize", "StandaloneMsg", "8192"}};

    private static final int FAKE_SUB_ID = 1;
    private static final int FAKE_SUB_ID = 1;
    private MockContentResolver mContentResolver;
    private MockContentResolver mContentResolver;
    private FakeTelephonyProvider mFakeTelephonyProvider;
    private FakeTelephonyProvider mFakeTelephonyProvider;
@@ -126,6 +213,7 @@ public final class RcsConfigTest {
    @SmallTest
    @SmallTest
    public void testParseConfig() {
    public void testParseConfig() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

        for (int i = 0; i < TEST_CONFIG_VALUES.length; i++) {
        for (int i = 0; i < TEST_CONFIG_VALUES.length; i++) {
            assertEquals(config.getString(TEST_CONFIG_VALUES[i][0], null),
            assertEquals(config.getString(TEST_CONFIG_VALUES[i][0], null),
                    TEST_CONFIG_VALUES[i][1]);
                    TEST_CONFIG_VALUES[i][1]);
@@ -134,14 +222,56 @@ public final class RcsConfigTest {


    @Test
    @Test
    @SmallTest
    @SmallTest
    public void testParcelUnparcel() {
    public void testGetCharacteristic() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

        for (int i = 0; i < VALID_CHARACTERISTICS.length; i++) {
            assertNotNull(config.getCharacteristic(VALID_CHARACTERISTICS[i]));
        }

        for (int i = 0; i < INVALID_CHARACTERISTICS.length; i++) {
            assertNull(config.getCharacteristic(INVALID_CHARACTERISTICS[i]));
        }
    }

    @Test
    @SmallTest
    public void testSetAndMoveCharacteristic() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

        for (String[] sub : SUB_CHARACTERISTICS) {
            Characteristic[] cl = new Characteristic[sub.length];
            int c = 0;
            for (String cur : sub) {
                cl[c] = config.getCharacteristic(cur);
                assertNotNull(cl[c]);
                config.setCurrentCharacteristic(cl[c]);
                c++;
            }

            while (c > 0) {
                assertEquals(cl[--c], config.getCurrentCharacteristic());
                config.moveToParent();
            }

            assertEquals(config.getRoot(), config.getCurrentCharacteristic());
        }
    }

    @Test
    @SmallTest
    public void testGetDuplicateParmInDifferentCharacteristics() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());
        Parcel parcel = Parcel.obtain();
        for (String[] sub : SAME_PARMS_DIFF_CHARS_VALUE_MAP) {
        config.writeToParcel(parcel, 0);
            config.moveToRoot();
        parcel.setDataPosition(0);
            if (!sub[1].isEmpty()) {
        RcsConfig config2 = RcsConfig.CREATOR.createFromParcel(parcel);
                config.setCurrentCharacteristic(config.getCharacteristic(sub[1]));
        parcel.recycle();
            }
        assertTrue(config.equals(config2));

            String value = config.getString(sub[0], "");

            assertEquals(value, sub[2]);
        }
    }
    }


    @Test
    @Test
@@ -150,8 +280,9 @@ public final class RcsConfigTest {
        String[] vals = new String[]{"0", "1", "false", "true"};
        String[] vals = new String[]{"0", "1", "false", "true"};
        boolean[] expectedRes = new boolean[]{false, true, false, true};
        boolean[] expectedRes = new boolean[]{false, true, false, true};
        for (int i = 0; i < vals.length; i++) {
        for (int i = 0; i < vals.length; i++) {
            String xml = "<RCSConfig>\n" + "\t<rcsVolteSingleRegistration>" + vals[i]
            String xml = "\t\t\t\t<characteristic type=\"GSMA\">\n"
                    + "</rcsVolteSingleRegistration>\n" + "</RCSConfig>\n";
                    + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\""
                    + vals[i] + "\"/>\n" + "\t\t\t\t</characteristic>\n";
            RcsConfig config = new RcsConfig(xml.getBytes());
            RcsConfig config = new RcsConfig(xml.getBytes());
            assertEquals(config.isRcsVolteSingleRegistrationSupported(), expectedRes[i]);
            assertEquals(config.isRcsVolteSingleRegistrationSupported(), expectedRes[i]);
        }
        }