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

Commit 3f4a3085 authored by Hui Wang's avatar Hui Wang Committed by Gerrit Code Review
Browse files

Merge "Update the format of RCS provisioning config XML"

parents 75286a6d 52c08a63
Loading
Loading
Loading
Loading
+161 −30
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.telephony.ims;

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

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

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

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

    private static final String TEST_RCS_CONFIG = "<RCSConfig>\n"
            + "\t<rcsVolteSingleRegistration>1</rcsVolteSingleRegistration>\n"
            + "\t<SERVICES>\n"
            + "\t\t<SupportedRCSProfileVersions>UP_2.0</SupportedRCSProfileVersions>\n"
            + "\t\t<ChatAuth>1</ChatAuth>\n"
            + "\t\t<GroupChatAuth>1</GroupChatAuth>\n"
            + "\t\t<ftAuth>1</ftAuth>\n"
            + "\t\t<standaloneMsgAuth>1</standaloneMsgAuth>\n"
            + "\t\t<geolocPushAuth>1</geolocPushAuth>\n"
            + "\t\t<Ext>\n"
            + "\t\t\t<DataOff>\n"
            + "\t\t\t\t<rcsMessagingDataOff>1</rcsMessagingDataOff>\n"
            + "\t\t\t\t<fileTransferDataOff>1</fileTransferDataOff>\n"
            + "\t\t\t\t<mmsDataOff>1</mmsDataOff>\n"
            + "\t\t\t\t<syncDataOff>1</syncDataOff>\n"
            + "\t\t\t</DataOff>\n"
            + "\t\t</Ext>\n"
            + "\t</SERVICES>\n"
            + "</RCSConfig>";
    private static final String TEST_RCS_CONFIG = "<?xml version=\"1.0\"?>\n"
            + "<wap-provisioningdoc version=\"1.1\">\n"
            + "\t<characteristic type=\"APPLICATION\">\n"
            + "\t\t<parm name=\"AppID\" value=\"urn:oma:mo:ext-3gpp-ims:1.0\"/>\n"
            + "\t\t<characteristic type=\"3GPP_IMS\">\n"
            + "\t\t\t<parm name=\"AppID\" value=\"ap2001\"/>\n"
            + "\t\t\t<parm name=\"Name\" value=\"RCS IMS Settings\"/>\n"
            + "\t\t\t<characteristic type=\"Ext\">\n"
            + "\t\t\t\t<characteristic type=\"GSMA\">\n"
            + "\t\t\t\t\t<parm name=\"AppRef\" value=\"IMS-Setting\"/>\n"
            + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\"1\"/>\n"
            + "\t\t\t\t</characteristic>\n"
            + "\t\t\t</characteristic>\n"
            + "\t\t</characteristic>\n"
            + "\t\t<characteristic type=\"SERVICES\">\n"
            + "\t\t\t<parm name=\"SupportedRCSProfileVersions\" value=\"UP_2.3\"/>\n"
            + "\t\t\t<parm name=\"ChatAuth\" value=\"1\"/>\n"
            + "\t\t\t<parm name=\"GroupChatAuth\" value=\"1\"/>\n"
            + "\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"},
        {"SupportedRCSProfileVersions", "UP_2.0"}, {"ChatAuth", "1"}, {"GroupChatAuth", "1"},
        {"SupportedRCSProfileVersions", "UP_2.3"}, {"ChatAuth", "1"}, {"GroupChatAuth", "1"},
        {"ftAuth", "1"}, {"standaloneMsgAuth", "1"}, {"geolocPushAuth", "1"},
        {"rcsMessagingDataOff", "1"}, {"fileTransferDataOff", "1"}, {"mmsDataOff", "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 MockContentResolver mContentResolver;
    private FakeTelephonyProvider mFakeTelephonyProvider;
@@ -126,6 +213,7 @@ public final class RcsConfigTest {
    @SmallTest
    public void testParseConfig() {
        RcsConfig config = new RcsConfig(TEST_RCS_CONFIG.getBytes());

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

    @Test
    @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());
        Parcel parcel = Parcel.obtain();
        config.writeToParcel(parcel, 0);
        parcel.setDataPosition(0);
        RcsConfig config2 = RcsConfig.CREATOR.createFromParcel(parcel);
        parcel.recycle();
        assertTrue(config.equals(config2));
        for (String[] sub : SAME_PARMS_DIFF_CHARS_VALUE_MAP) {
            config.moveToRoot();
            if (!sub[1].isEmpty()) {
                config.setCurrentCharacteristic(config.getCharacteristic(sub[1]));
            }

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

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

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