• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.imsserviceentitlement.utils;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import androidx.test.runner.AndroidJUnit4;
22 
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 
26 @RunWith(AndroidJUnit4.class)
27 public class XmlDocTest {
28     // XML sample from vendor A
29     private static final String AUTH_RESPONSE_XML =
30             "<wap-provisioningdoc version=\"1.1\">\n"
31                     + "    <characteristic type=\"VERS\">\n"
32                     + "        <parm name=\"version\" value=\"1\"/>\n"
33                     + "        <parm name=\"validity\" value=\"1728000\"/>\n"
34                     + "    </characteristic>\n"
35                     + "    <characteristic type=\"TOKEN\">\n"
36                     + "        <parm name=\"token\" value=\"kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX\"/>\n"
37                     + "        <parm name=\"validity\" value=\"3600\"/>\n"
38                     + "    </characteristic>\n"
39                     + "    <characteristic type=\"APPLICATION\">\n"
40                     + "        <parm name=\"AppID\" value=\"ap2004\"/>\n"
41                     + "        <parm name=\"Name\" value=\"VoWiFi Entitlement settings\"/>\n"
42                     + "        <parm name=\"EntitlementStatus\" value=\"0\"/>\n"
43                     + "        <parm name=\"AddrStatus\" value=\"0\"/>\n"
44                     + "        <parm name=\"TC_Status\" value=\"0\"/>\n"
45                     + "        <parm name=\"ProvStatus\" value=\"2\"/>\n"
46                     + "        <parm name=\"ServiceFlow_URL\""
47                     + " value=\"http://vm-host:8180/self-prov-websheet/rcs\"/>\n"
48                     + "        <parm name=\"ServiceFlow_UserData\""
49                     + " value=\"token=Y5vcmc%3D&amp;entitlementStatus=0&amp;protocol=TS43&amp;"
50                     + "provStatus=2&amp;deviceId=358316079424742&amp;subscriberId=0311580718847611"
51                     + "%40nai.epc.mnc130.mcc310.3gppnetwork.org&amp;ShowAddress=true\"/>\n"
52                     + "    </characteristic>\n"
53                     + "</wap-provisioningdoc>\n";
54 
55     // XML sample from vendor B, note unescaped "&" in ServiceFlow_UserData
56     private static final String AUTH_RESPONSE_XML_2 =
57             "<?xml version=\"1.0\"?>"
58                     + "<wap-provisioningdoc version=\"1.1\">"
59                     + "<characteristic type=\"VERS\">"
60                     + "<parm name=\"version\" value=\"4\"/>"
61                     + "<parm name=\"validity\" value=\"172800\"/>"
62                     + "</characteristic>"
63                     + "<characteristic type=\"TOKEN\">"
64                     + "<parm name=\"token\" value=\"kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX\"/>"
65                     + "</characteristic>"
66                     + "<characteristic type=\"APPLICATION\">"
67                     + "<parm name=\"AppID\" value=\"ap2004\"/>"
68                     + "<parm name=\"Name\" value=\"VoWiFi Entitlement settings\"/>"
69                     + "<parm name=\"MessageForIncompatible\" value=\"99\"/>"
70                     + "<parm name=\"EntitlementStatus\" value=\"0\"/>"
71                     + "<parm name=\"ServiceFlow_URL\" value=\""
72                     + "https://deg.cspire.com/VoWiFi/CheckPostData\"/>"
73                     + "<parm name=\"ServiceFlow_UserData\" value=\""
74                     + "PostData=U6%2FbQ%2BEP&req_locale=en_US\"/>"
75                     + "<parm name=\"AddrStatus\" value=\"0\"/>"
76                     + "<parm name=\"TC_Status\" value=\"0\"/>"
77                     + "<parm name=\"ProvStatus\" value=\"0\"/>"
78                     + "</characteristic>"
79                     + "</wap-provisioningdoc>";
80 
81     // A XML sample with "&amp;amp;" - unlikely to happen in practice but good to test
82     private static final String AUTH_RESPONSE_XML_3 =
83             "<wap-provisioningdoc version=\"1.1\">"
84                     + "<characteristic type=\"APPLICATION\">"
85                     + "<parm name=\"AppID\" value=\"ap2004\"/>"
86                     + "<parm name=\"ServiceFlow_UserData\" value=\""
87                     + "PostData=U6%2FbQ%2BEP&amp;amp;l=en_US\"/>"
88                     + "</characteristic>"
89                     + "</wap-provisioningdoc>";
90 
91     // A XML sample with server URL and user data unset.
92     private static final String AUTH_RESPONSE_XML_4 =
93             "<wap-provisioningdoc version=\"1.1\">"
94                     + "<characteristic type=\"APPLICATION\">"
95                     + "<parm name=\"AppID\" value=\"ap2004\"/>"
96                     + "<parm name=\"ServiceFlow_URL\" value=\"\""
97                     + "<parm name=\"ServiceFlow_UserData\" value=\"\"/>"
98                     + "</characteristic>"
99                     + "</wap-provisioningdoc>";
100 
101     // A XML sample with multiple appIDs
102     private static final String AUTH_RESPONSE_XML_5 =
103             "<wap-provisioningdoc version=\"1.1\">"
104                     + "<characteristic type=\"APPLICATION\">"
105                     + "<parm name=\"AppID\" value=\"ap2004\"/>"
106                     + "<parm name=\"EntitlementStatus\" value=\"0\"/>"
107                     + "</characteristic>"
108                     + "<characteristic type=\"APPLICATION\">"
109                     + "<parm name=\"AppID\" value=\"ap2005\"/>"
110                     + "<parm name=\"EntitlementStatus\" value=\"1\"/>"
111                     + "</characteristic>"
112                     + "</wap-provisioningdoc>";
113 
114     private static final String TOKEN = "kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX";
115 
116     @Test
parseAuthenticateResponse()117     public void parseAuthenticateResponse() {
118         XmlDoc xmlDoc = new XmlDoc(AUTH_RESPONSE_XML);
119 
120         assertThat(xmlDoc.get("TOKEN", "token", "ap2004").get()).isEqualTo(TOKEN);
121         // Note "&amp;" in input XML are un-escaped to "&".
122         assertThat(xmlDoc.get("APPLICATION", "ServiceFlow_UserData", "ap2004").get())
123                 .isEqualTo("token=Y5vcmc%3D"
124                         + "&entitlementStatus=0"
125                         + "&protocol=TS43"
126                         + "&provStatus=2"
127                         + "&deviceId=358316079424742"
128                         + "&subscriberId=0311580718847611%40nai.epc.mnc130.mcc310.3gppnetwork.org"
129                         + "&ShowAddress=true");
130     }
131 
132     @Test
parseAuthenticateResponse2()133     public void parseAuthenticateResponse2() {
134         XmlDoc xmlDoc = new XmlDoc(AUTH_RESPONSE_XML_2);
135 
136         assertThat(xmlDoc.get("TOKEN", "token", "ap2004").get()).isEqualTo(TOKEN);
137         // Note the "&" in input XML is kept as is
138         assertThat(xmlDoc.get("APPLICATION", "ServiceFlow_UserData", "ap2004").get())
139                 .isEqualTo("PostData=U6%2FbQ%2BEP&req_locale=en_US");
140     }
141 
142     @Test
parseAuthenticateResponse3()143     public void parseAuthenticateResponse3() {
144         XmlDoc xmlDoc = new XmlDoc(AUTH_RESPONSE_XML_3);
145 
146         // Note the "&amp;amp;" in input XML is un-escaped to "&amp;"
147         assertThat(xmlDoc.get("APPLICATION", "ServiceFlow_UserData", "ap2004").get())
148                 .isEqualTo("PostData=U6%2FbQ%2BEP&amp;l=en_US");
149     }
150 
151     @Test
parseAuthenticateResponse4()152     public void parseAuthenticateResponse4() {
153         XmlDoc xmlDoc = new XmlDoc(AUTH_RESPONSE_XML_4);
154 
155         assertThat(xmlDoc.get("APPLICATION", "ServiceFlow_URL", "ap2004").isPresent()).isFalse();
156         assertThat(
157                 xmlDoc.get("APPLICATION", "ServiceFlow_UserData", "ap2004").isPresent()).isFalse();
158     }
159 
160     @Test
parseAuthenticateResponse5()161     public void parseAuthenticateResponse5() {
162         XmlDoc xmlDoc = new XmlDoc(AUTH_RESPONSE_XML_5);
163 
164         assertThat(xmlDoc.get("APPLICATION", "EntitlementStatus", "ap2004").get()).isEqualTo("0");
165         assertThat(xmlDoc.get("APPLICATION", "EntitlementStatus", "ap2005").get()).isEqualTo("1");
166     }
167 }
168