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.entitlement;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import android.content.Context;
22 
23 import androidx.test.core.app.ApplicationProvider;
24 import androidx.test.runner.AndroidJUnit4;
25 
26 import com.android.imsserviceentitlement.entitlement.EntitlementConfiguration.ClientBehavior;
27 
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 
32 @RunWith(AndroidJUnit4.class)
33 public class EntitlementConfigurationTest {
34     private static final String RAW_XML =
35             "<wap-provisioningdoc version=\"1.1\">\n"
36                     + "    <characteristic type=\"VERS\">\n"
37                     + "        <parm name=\"version\" value=\"1\"/>\n"
38                     + "        <parm name=\"validity\" value=\"1728000\"/>\n"
39                     + "    </characteristic>\n"
40                     + "    <characteristic type=\"TOKEN\">\n"
41                     + "        <parm name=\"token\" value=\"kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX\"/>\n"
42                     + "        <parm name=\"validity\" value=\"3600\"/>\n"
43                     + "    </characteristic>\n"
44                     + "    <characteristic type=\"APPLICATION\">\n"
45                     + "        <parm name=\"AppID\" value=\"ap2004\"/>\n"
46                     + "        <parm name=\"EntitlementStatus\" value=\"1\"/>\n"
47                     + "    </characteristic>\n"
48                     + "    <characteristic type=\"APPLICATION\">\n"
49                     + "        <parm name=\"AppID\" value=\"ap2003\"/>\n"
50                     + "        <parm name=\"EntitlementStatus\" value=\"0\"/>\n"
51                     + "    </characteristic>\n"
52                     + "</wap-provisioningdoc>\n";
53     private static final String RAW_XML_NO_TOKEN_VALIDITY =
54             "<wap-provisioningdoc version=\"1.1\">\n"
55                     + "    <characteristic type=\"VERS\">\n"
56                     + "        <parm name=\"version\" value=\"1\"/>\n"
57                     + "        <parm name=\"validity\" value=\"1728000\"/>\n"
58                     + "    </characteristic>\n"
59                     + "    <characteristic type=\"TOKEN\">\n"
60                     + "        <parm name=\"token\" value=\"kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX\"/>\n"
61                     + "    </characteristic>\n"
62                     + "    <characteristic type=\"APPLICATION\">\n"
63                     + "        <parm name=\"AppID\" value=\"ap2004\"/>\n"
64                     + "        <parm name=\"EntitlementStatus\" value=\"1\"/>\n"
65                     + "    </characteristic>\n"
66                     + "    <characteristic type=\"APPLICATION\">\n"
67                     + "        <parm name=\"AppID\" value=\"ap2003\"/>\n"
68                     + "        <parm name=\"EntitlementStatus\" value=\"0\"/>\n"
69                     + "    </characteristic>\n"
70                     + "</wap-provisioningdoc>\n";
71     private static final int SUB_ID = 1;
72 
73     private Context mContext;
74     private EntitlementConfiguration mConfiguration;
75 
76     @Before
setUp()77     public void setUp() {
78         mContext = ApplicationProvider.getApplicationContext();
79         mConfiguration = new EntitlementConfiguration(mContext, SUB_ID);
80         mConfiguration.reset();
81     }
82 
83     @Test
updateConfigurations_verifyConfigs()84     public void updateConfigurations_verifyConfigs() {
85         mConfiguration.update(RAW_XML);
86 
87         assertThat(mConfiguration.getVolteStatus()).isEqualTo(0);
88         assertThat(mConfiguration.getVoWifiStatus()).isEqualTo(1);
89         assertThat(mConfiguration.getSmsOverIpStatus()).isEqualTo(2);
90         assertThat(mConfiguration.getToken().get()).isEqualTo("kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX");
91         assertThat(mConfiguration.getTokenValidity()).isEqualTo(3600);
92         assertThat(mConfiguration.entitlementValidation()).isEqualTo(
93                 ClientBehavior.VALID_DURING_VALIDITY);
94     }
95 
96     @Test
updateConfigurations_reset_verifyDefaultValues()97     public void updateConfigurations_reset_verifyDefaultValues() {
98         mConfiguration.update(RAW_XML);
99         mConfiguration.reset();
100 
101         assertThat(mConfiguration.getVolteStatus()).isEqualTo(2);
102         assertThat(mConfiguration.getVoWifiStatus()).isEqualTo(2);
103         assertThat(mConfiguration.getSmsOverIpStatus()).isEqualTo(2);
104         assertThat(mConfiguration.getToken().isPresent()).isFalse();
105         assertThat(mConfiguration.getTokenValidity()).isEqualTo(0);
106         assertThat(mConfiguration.entitlementValidation()).isEqualTo(ClientBehavior.NEEDS_TO_RESET);
107     }
108 
109     @Test
updateConfigurations_noTokenValidity_tokenValid()110     public void updateConfigurations_noTokenValidity_tokenValid() {
111         mConfiguration.update(RAW_XML_NO_TOKEN_VALIDITY);
112 
113         assertThat(mConfiguration.getToken().get()).isEqualTo("kZYfCEpSsMr88KZVmab5UsZVzl+nWSsX");
114         assertThat(mConfiguration.getTokenValidity()).isEqualTo(0);
115     }
116 }
117