• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.settings.datausage;
18 
19 import android.content.Context;
20 import android.net.ConnectivityManager;
21 import android.net.NetworkPolicy;
22 import android.net.wifi.WifiConfiguration;
23 import android.net.wifi.WifiManager;
24 
25 import com.android.settings.R;
26 import com.android.settings.SettingsRobolectricTestRunner;
27 import com.android.settings.TestConfig;
28 import com.android.settings.testutils.XmlTestUtils;
29 import com.android.settings.testutils.shadow.ShadowConnectivityManager;
30 import com.android.settingslib.NetworkPolicyEditor;
31 
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.mockito.Mock;
36 import org.mockito.MockitoAnnotations;
37 import org.robolectric.RuntimeEnvironment;
38 import org.robolectric.annotation.Config;
39 import org.robolectric.shadows.ShadowApplication;
40 import org.robolectric.util.ReflectionHelpers;
41 
42 import java.util.ArrayList;
43 import java.util.List;
44 
45 import static com.google.common.truth.Truth.assertThat;
46 import static org.mockito.Matchers.any;
47 import static org.mockito.Matchers.anyInt;
48 import static org.mockito.Mockito.doReturn;
49 import static org.mockito.Mockito.mock;
50 import static org.mockito.Mockito.spy;
51 import static org.mockito.Mockito.verify;
52 import static org.mockito.Mockito.when;
53 
54 @RunWith(SettingsRobolectricTestRunner.class)
55 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
56 public class DataUsageSummaryTest {
57     @Mock private ConnectivityManager mManager;
58     private Context mContext;
59 
60     /**
61      * This set up is contrived to get a passing test so that the build doesn't block without tests.
62      * These tests should be updated as code gets refactored to improve testability.
63      */
64 
65     @Before
setUp()66     public void setUp() {
67         MockitoAnnotations.initMocks(this);
68         ShadowApplication shadowContext = ShadowApplication.getInstance();
69         shadowContext.setSystemService(Context.CONNECTIVITY_SERVICE, mManager);
70         mContext = shadowContext.getApplicationContext();
71         when(mManager.isNetworkSupported(anyInt())).thenReturn(true);
72     }
73 
74     @Test
testMobileDataStatus()75     public void testMobileDataStatus() {
76         boolean hasMobileData = DataUsageSummary.hasMobileData(mContext);
77         assertThat(hasMobileData).isTrue();
78     }
79 
80     @Test
testUpdateNetworkRestrictionSummary_shouldSetSummary()81     public void testUpdateNetworkRestrictionSummary_shouldSetSummary() {
82         final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary());
83         final NetworkRestrictionsPreference preference = mock(NetworkRestrictionsPreference.class);
84         final NetworkPolicyEditor policyEditor = mock(NetworkPolicyEditor.class);
85         final WifiManager wifiManager = mock(WifiManager.class);
86         ReflectionHelpers.setField(dataUsageSummary, "mPolicyEditor", policyEditor);
87         ReflectionHelpers.setField(dataUsageSummary, "mWifiManager", wifiManager);
88         when(wifiManager.getConfiguredNetworks()).thenReturn(new ArrayList<WifiConfiguration>());
89         doReturn(mContext.getResources()).when(dataUsageSummary).getResources();
90 
91         dataUsageSummary.updateNetworkRestrictionSummary(preference);
92 
93         verify(preference).setSummary(mContext.getResources().getQuantityString(
94             R.plurals.network_restrictions_summary, 0, 0));
95     }
96 
97     @Test
testIsMetered_noSsid_shouldReturnFalse()98     public void testIsMetered_noSsid_shouldReturnFalse() {
99         final DataUsageSummary dataUsageSummary = new DataUsageSummary();
100         final NetworkPolicyEditor policyEditor = mock(NetworkPolicyEditor.class);
101         ReflectionHelpers.setField(dataUsageSummary, "mPolicyEditor", policyEditor);
102         WifiConfiguration config = mock(WifiConfiguration.class);
103 
104         assertThat(dataUsageSummary.isMetered(config)).isFalse();
105     }
106 
107     @Test
testIsMetered_noNetworkPolicy_shouldReturnFalse()108     public void testIsMetered_noNetworkPolicy_shouldReturnFalse() {
109         final DataUsageSummary dataUsageSummary = new DataUsageSummary();
110         final NetworkPolicyEditor policyEditor = mock(NetworkPolicyEditor.class);
111         ReflectionHelpers.setField(dataUsageSummary, "mPolicyEditor", policyEditor);
112         WifiConfiguration config = mock(WifiConfiguration.class);
113         config.SSID = "network1";
114         doReturn(null).when(policyEditor).getPolicyMaybeUnquoted(any());
115 
116         assertThat(dataUsageSummary.isMetered(config)).isFalse();
117     }
118 
119     @Test
testIsMetered_policyHasLimit_shouldReturnTrue()120     public void testIsMetered_policyHasLimit_shouldReturnTrue() {
121         final DataUsageSummary dataUsageSummary = new DataUsageSummary();
122         final NetworkPolicyEditor policyEditor = mock(NetworkPolicyEditor.class);
123         ReflectionHelpers.setField(dataUsageSummary, "mPolicyEditor", policyEditor);
124         WifiConfiguration config = mock(WifiConfiguration.class);
125         config.SSID = "network1";
126         NetworkPolicy policy = mock(NetworkPolicy.class);
127         policy.limitBytes = 100;
128         doReturn(policy).when(policyEditor).getPolicyMaybeUnquoted(any());
129 
130         assertThat(dataUsageSummary.isMetered(config)).isTrue();
131     }
132 
133     @Test
testIsMetered_noPolicyLimit_shouldReturnMeteredValue()134     public void testIsMetered_noPolicyLimit_shouldReturnMeteredValue() {
135         final DataUsageSummary dataUsageSummary = new DataUsageSummary();
136         final NetworkPolicyEditor policyEditor = mock(NetworkPolicyEditor.class);
137         ReflectionHelpers.setField(dataUsageSummary, "mPolicyEditor", policyEditor);
138         WifiConfiguration config = mock(WifiConfiguration.class);
139         config.SSID = "network1";
140         NetworkPolicy policy = mock(NetworkPolicy.class);
141         policy.limitBytes = NetworkPolicy.LIMIT_DISABLED;
142         doReturn(policy).when(policyEditor).getPolicyMaybeUnquoted(any());
143 
144         policy.metered = true;
145         assertThat(dataUsageSummary.isMetered(config)).isTrue();
146 
147         policy.metered = false;
148         assertThat(dataUsageSummary.isMetered(config)).isFalse();
149     }
150 
151     @Test
testNonIndexableKeys_existInXmlLayout()152     public void testNonIndexableKeys_existInXmlLayout() {
153         final Context context = RuntimeEnvironment.application;
154         final List<String> niks = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER
155                 .getNonIndexableKeys(context);
156         final List<String> keys = new ArrayList<>();
157 
158         keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage_wifi));
159         keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage));
160 
161         assertThat(keys).containsAllIn(niks);
162     }
163 
164     @Test
165     @Config(shadows = ShadowConnectivityManager.class)
testNonIndexableKeys_hasMobileData_restrictedAccessesAdded()166     public void testNonIndexableKeys_hasMobileData_restrictedAccessesAdded() {
167         ShadowConnectivityManager.setIsNetworkSupported(true);
168         List<String> keys = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER
169                 .getNonIndexableKeys(mContext);
170 
171         assertThat(keys).contains(DataUsageSummary.KEY_RESTRICT_BACKGROUND);
172         assertThat(keys).contains(DataUsageSummary.KEY_NETWORK_RESTRICTIONS);
173         ShadowConnectivityManager.setIsNetworkSupported(false);
174     }
175 }
176