1 /*
2  * Copyright 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 package com.android.managedprovisioning.model;
17 
18 import android.os.Parcel;
19 import android.test.AndroidTestCase;
20 import android.test.MoreAsserts;
21 import android.test.suitebuilder.annotation.SmallTest;
22 
23 /** Tests for {@link WifiInfo} */
24 public class WifiInfoTest extends AndroidTestCase {
25     private static final String TEST_SSID = "TestWifi";
26     private static final boolean TEST_HIDDEN = true;
27     private static final String TEST_HIDDEN_STR = Boolean.toString(TEST_HIDDEN);
28     private static final String TEST_SECURITY_TYPE = "WPA2";
29     private static final String TEST_PASSWORD = "TestPassword";
30     private static final String TEST_PROXY_HOST = "proxy.example.com";
31     private static final int TEST_PROXY_PORT = 7689;
32     private static final String TEST_PROXY_PORT_STR = Integer.toString(TEST_PROXY_PORT);
33     private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
34     private static final String TEST_PAC_URL = "pac.example.com";
35     private static final String TEST_EAP_METHOD = "TTLS";
36     private static final String TEST_PHASE2_AUTH = "PAP";
37     private static final String TEST_CA_CERT = "certificate";
38     private static final String TEST_USER_CERT = "certificate";
39     private static final String TEST_IDENTITY = "TestUser";
40     private static final String TEST_ANONYMOUS_IDENTITY = "TestAUser";
41     private static final String TEST_DOMAIN = "google.com";
42 
43     @SmallTest
testBuilderWriteAndReadBack()44     public void testBuilderWriteAndReadBack() {
45         // WHEN a WifiInfo object is constructed by a set of parameters.
46         WifiInfo wifiInfo = WifiInfo.Builder.builder()
47                 .setSsid(TEST_SSID)
48                 .setHidden(TEST_HIDDEN)
49                 .setSecurityType(TEST_SECURITY_TYPE)
50                 .setPassword(TEST_PASSWORD)
51                 .setEapMethod(TEST_EAP_METHOD)
52                 .setPhase2Auth(TEST_PHASE2_AUTH)
53                 .setCaCertificate(TEST_CA_CERT)
54                 .setUserCertificate(TEST_USER_CERT)
55                 .setIdentity(TEST_IDENTITY)
56                 .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
57                 .setDomain(TEST_DOMAIN)
58                 .setProxyHost(TEST_PROXY_HOST)
59                 .setProxyPort(TEST_PROXY_PORT)
60                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
61                 .setPacUrl(TEST_PAC_URL)
62                 .build();
63         // THEN the same set of values are set to the object.
64         assertEquals(TEST_SSID, wifiInfo.ssid);
65         assertEquals(TEST_HIDDEN, wifiInfo.hidden);
66         assertEquals(TEST_SECURITY_TYPE, wifiInfo.securityType);
67         assertEquals(TEST_PASSWORD, wifiInfo.password);
68         assertEquals(TEST_EAP_METHOD, wifiInfo.eapMethod);
69         assertEquals(TEST_PHASE2_AUTH, wifiInfo.phase2Auth);
70         assertEquals(TEST_CA_CERT, wifiInfo.caCertificate);
71         assertEquals(TEST_USER_CERT, wifiInfo.userCertificate);
72         assertEquals(TEST_IDENTITY, wifiInfo.identity);
73         assertEquals(TEST_ANONYMOUS_IDENTITY, wifiInfo.anonymousIdentity);
74         assertEquals(TEST_DOMAIN, wifiInfo.domain);
75         assertEquals(TEST_PROXY_HOST, wifiInfo.proxyHost);
76         assertEquals(TEST_PROXY_PORT, wifiInfo.proxyPort);
77         assertEquals(TEST_PROXY_BYPASS_HOSTS, wifiInfo.proxyBypassHosts);
78         assertEquals(TEST_PAC_URL, wifiInfo.pacUrl);
79     }
80 
81     @SmallTest
testFailToConstructWifiInfoWithoutSsid()82     public void testFailToConstructWifiInfoWithoutSsid() {
83         try {
84             // WHEN a WifiInfo object is constructed without Ssid.
85             WifiInfo wifiInfo = WifiInfo.Builder.builder()
86                     .setHidden(TEST_HIDDEN)
87                     .setSecurityType(TEST_SECURITY_TYPE)
88                     .setPassword(TEST_PASSWORD)
89                     .setEapMethod(TEST_EAP_METHOD)
90                     .setPhase2Auth(TEST_PHASE2_AUTH)
91                     .setCaCertificate(TEST_CA_CERT)
92                     .setUserCertificate(TEST_USER_CERT)
93                     .setIdentity(TEST_IDENTITY)
94                     .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
95                     .setDomain(TEST_DOMAIN)
96                     .setProxyHost(TEST_PROXY_HOST)
97                     .setProxyPort(TEST_PROXY_PORT)
98                     .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
99                     .setPacUrl(TEST_PAC_URL)
100                     .build();
101             fail("Ssid is mandatory.");
102         } catch (IllegalArgumentException e) {
103             // THEN the WifiInfo object fails to construct due to missing ssid.
104         }
105     }
106 
107     @SmallTest
testEquals()108     public void testEquals() {
109         // GIVEN 2 WifiInfo objects are constructed with the same set of parameters.
110         WifiInfo wifiInfo1 = WifiInfo.Builder.builder()
111                 .setSsid(TEST_SSID)
112                 .setHidden(TEST_HIDDEN)
113                 .setSecurityType(TEST_SECURITY_TYPE)
114                 .setPassword(TEST_PASSWORD)
115                 .setEapMethod(TEST_EAP_METHOD)
116                 .setPhase2Auth(TEST_PHASE2_AUTH)
117                 .setCaCertificate(TEST_CA_CERT)
118                 .setUserCertificate(TEST_USER_CERT)
119                 .setIdentity(TEST_IDENTITY)
120                 .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
121                 .setDomain(TEST_DOMAIN)
122                 .setProxyHost(TEST_PROXY_HOST)
123                 .setProxyPort(TEST_PROXY_PORT)
124                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
125                 .setPacUrl(TEST_PAC_URL)
126                 .build();
127         WifiInfo wifiInfo2 = WifiInfo.Builder.builder()
128                 .setSsid(TEST_SSID)
129                 .setHidden(TEST_HIDDEN)
130                 .setSecurityType(TEST_SECURITY_TYPE)
131                 .setPassword(TEST_PASSWORD)
132                 .setEapMethod(TEST_EAP_METHOD)
133                 .setPhase2Auth(TEST_PHASE2_AUTH)
134                 .setCaCertificate(TEST_CA_CERT)
135                 .setUserCertificate(TEST_USER_CERT)
136                 .setIdentity(TEST_IDENTITY)
137                 .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
138                 .setDomain(TEST_DOMAIN)
139                 .setProxyHost(TEST_PROXY_HOST)
140                 .setProxyPort(TEST_PROXY_PORT)
141                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
142                 .setPacUrl(TEST_PAC_URL)
143                 .build();
144         // WHEN comparing these two objects.
145         // THEN they are equal.
146         assertEquals(wifiInfo1, wifiInfo2);
147     }
148 
149     @SmallTest
testNotEquals()150     public void testNotEquals() {
151         // GIVEN 2 WifiInfo objects are constructed with the same set of parameters.
152         WifiInfo wifiInfo1 = WifiInfo.Builder.builder()
153                 .setSsid(TEST_SSID)
154                 .setHidden(TEST_HIDDEN)
155                 .setSecurityType(TEST_SECURITY_TYPE)
156                 .setPassword(TEST_PASSWORD)
157                 .setEapMethod(TEST_EAP_METHOD)
158                 .setPhase2Auth(TEST_PHASE2_AUTH)
159                 .setCaCertificate(TEST_CA_CERT)
160                 .setUserCertificate(TEST_USER_CERT)
161                 .setIdentity(TEST_IDENTITY)
162                 .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
163                 .setDomain(TEST_DOMAIN)
164                 .setProxyHost(TEST_PROXY_HOST)
165                 .setProxyPort(TEST_PROXY_PORT)
166                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
167                 .setPacUrl(TEST_PAC_URL)
168                 .build();
169         WifiInfo wifiInfo2 = WifiInfo.Builder.builder()
170                 .setSsid("TestWifi2")
171                 .setHidden(TEST_HIDDEN)
172                 .setSecurityType(TEST_SECURITY_TYPE)
173                 .setPassword(TEST_PASSWORD)
174                 .setEapMethod(TEST_EAP_METHOD)
175                 .setPhase2Auth(TEST_PHASE2_AUTH)
176                 .setCaCertificate(TEST_CA_CERT)
177                 .setUserCertificate(TEST_USER_CERT)
178                 .setIdentity(TEST_IDENTITY)
179                 .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
180                 .setDomain(TEST_DOMAIN)
181                 .setProxyHost(TEST_PROXY_HOST)
182                 .setProxyPort(TEST_PROXY_PORT)
183                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
184                 .setPacUrl(TEST_PAC_URL)
185                 .build();
186         // WHEN comparing these two objects.
187         // THEN they are not equal.
188         MoreAsserts.assertNotEqual(wifiInfo1, wifiInfo2);
189     }
190 
191     @SmallTest
testParceable()192     public void testParceable() {
193         // GIVEN a WifiInfo object.
194         WifiInfo expectedWifiInfo = WifiInfo.Builder.builder()
195                 .setSsid(TEST_SSID)
196                 .setHidden(TEST_HIDDEN)
197                 .setSecurityType(TEST_SECURITY_TYPE)
198                 .setPassword(TEST_PASSWORD)
199                 .setEapMethod(TEST_EAP_METHOD)
200                 .setPhase2Auth(TEST_PHASE2_AUTH)
201                 .setCaCertificate(TEST_CA_CERT)
202                 .setUserCertificate(TEST_USER_CERT)
203                 .setIdentity(TEST_IDENTITY)
204                 .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
205                 .setDomain(TEST_DOMAIN)
206                 .setProxyHost(TEST_PROXY_HOST)
207                 .setProxyPort(TEST_PROXY_PORT)
208                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
209                 .setPacUrl(TEST_PAC_URL)
210                 .build();
211 
212         // WHEN the WifiInfo is written to parcel and then read back.
213         Parcel parcel = Parcel.obtain();
214         expectedWifiInfo.writeToParcel(parcel, 0);
215         parcel.setDataPosition(0);
216         WifiInfo actualWifiInfo = WifiInfo.CREATOR.createFromParcel(parcel);
217 
218         // THEN the same WifiInfo is obtained.
219         assertEquals(expectedWifiInfo, actualWifiInfo);
220     }
221 }
222