1 /*
2  * Copyright 2017, 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.managedprovisioning.model;
18 
19 import static org.hamcrest.CoreMatchers.equalTo;
20 import static org.hamcrest.CoreMatchers.not;
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertThat;
23 
24 import android.os.Parcel;
25 
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.robolectric.RobolectricTestRunner;
29 import org.robolectric.annotation.Config;
30 
31 /**
32  * Robolectric tests for {@link WifiInfo}.
33  */
34 @RunWith(RobolectricTestRunner.class)
35 @Config(manifest = "packages/apps/ManagedProvisioning/AndroidManifest.xml",
36         sdk = 23)
37 public class WifiInfoRoboTest {
38     private static final String TEST_SSID = "TestWifi";
39     private static final boolean TEST_HIDDEN = true;
40     private static final String TEST_SECURITY_TYPE = "WPA2";
41     private static final String TEST_PASSWORD = "TestPassword";
42     private static final String TEST_PROXY_HOST = "proxy.example.com";
43     private static final int TEST_PROXY_PORT = 7689;
44     private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
45     private static final String TEST_PAC_URL = "pac.example.com";
46 
47     @Test
testBuilderWriteAndReadBack()48     public void testBuilderWriteAndReadBack() {
49         // WHEN a WifiInfo object is constructed by a set of parameters.
50         WifiInfo wifiInfo = WifiInfo.Builder.builder()
51                 .setSsid(TEST_SSID)
52                 .setHidden(TEST_HIDDEN)
53                 .setSecurityType(TEST_SECURITY_TYPE)
54                 .setPassword(TEST_PASSWORD)
55                 .setProxyHost(TEST_PROXY_HOST)
56                 .setProxyPort(TEST_PROXY_PORT)
57                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
58                 .setPacUrl(TEST_PAC_URL)
59                 .build();
60         // THEN the same set of values are set to the object.
61         assertEquals(TEST_SSID, wifiInfo.ssid);
62         assertEquals(TEST_HIDDEN, wifiInfo.hidden);
63         assertEquals(TEST_SECURITY_TYPE, wifiInfo.securityType);
64         assertEquals(TEST_PASSWORD, wifiInfo.password);
65         assertEquals(TEST_PROXY_HOST, wifiInfo.proxyHost);
66         assertEquals(TEST_PROXY_PORT, wifiInfo.proxyPort);
67         assertEquals(TEST_PROXY_BYPASS_HOSTS, wifiInfo.proxyBypassHosts);
68         assertEquals(TEST_PAC_URL, wifiInfo.pacUrl);
69     }
70 
71     @Test(expected = IllegalArgumentException.class)
testFailToConstructWifiInfoWithoutSsid()72     public void testFailToConstructWifiInfoWithoutSsid() {
73         WifiInfo.Builder.builder()
74                 .setHidden(TEST_HIDDEN)
75                 .setSecurityType(TEST_SECURITY_TYPE)
76                 .setPassword(TEST_PASSWORD)
77                 .setProxyHost(TEST_PROXY_HOST)
78                 .setProxyPort(TEST_PROXY_PORT)
79                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
80                 .setPacUrl(TEST_PAC_URL)
81                 .build();
82     }
83 
84     @Test
testEquals()85     public void testEquals() {
86         // GIVEN 2 WifiInfo objects are constructed with the same set of parameters.
87         WifiInfo wifiInfo1 = WifiInfo.Builder.builder()
88                 .setSsid(TEST_SSID)
89                 .setHidden(TEST_HIDDEN)
90                 .setSecurityType(TEST_SECURITY_TYPE)
91                 .setPassword(TEST_PASSWORD)
92                 .setProxyHost(TEST_PROXY_HOST)
93                 .setProxyPort(TEST_PROXY_PORT)
94                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
95                 .setPacUrl(TEST_PAC_URL)
96                 .build();
97         WifiInfo wifiInfo2 = WifiInfo.Builder.builder()
98                 .setSsid(TEST_SSID)
99                 .setHidden(TEST_HIDDEN)
100                 .setSecurityType(TEST_SECURITY_TYPE)
101                 .setPassword(TEST_PASSWORD)
102                 .setProxyHost(TEST_PROXY_HOST)
103                 .setProxyPort(TEST_PROXY_PORT)
104                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
105                 .setPacUrl(TEST_PAC_URL)
106                 .build();
107         // WHEN comparing these two objects.
108         // THEN they are equal.
109         assertEquals(wifiInfo1, wifiInfo2);
110     }
111 
112     @Test
testNotEquals()113     public void testNotEquals() {
114         // GIVEN 2 WifiInfo objects are constructed with the same set of parameters.
115         WifiInfo wifiInfo1 = WifiInfo.Builder.builder()
116                 .setSsid(TEST_SSID)
117                 .setHidden(TEST_HIDDEN)
118                 .setSecurityType(TEST_SECURITY_TYPE)
119                 .setPassword(TEST_PASSWORD)
120                 .setProxyHost(TEST_PROXY_HOST)
121                 .setProxyPort(TEST_PROXY_PORT)
122                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
123                 .setPacUrl(TEST_PAC_URL)
124                 .build();
125         WifiInfo wifiInfo2 = WifiInfo.Builder.builder()
126                 .setSsid("TestWifi2")
127                 .setHidden(TEST_HIDDEN)
128                 .setSecurityType(TEST_SECURITY_TYPE)
129                 .setPassword(TEST_PASSWORD)
130                 .setProxyHost(TEST_PROXY_HOST)
131                 .setProxyPort(TEST_PROXY_PORT)
132                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
133                 .setPacUrl(TEST_PAC_URL)
134                 .build();
135         // WHEN comparing these two objects.
136         // THEN they are not equal.
137         assertThat(wifiInfo2, not(equalTo(wifiInfo1)));
138     }
139 
140     @Test
testParceable()141     public void testParceable() {
142         // GIVEN a WifiInfo object.
143         WifiInfo expectedWifiInfo = WifiInfo.Builder.builder()
144                 .setSsid(TEST_SSID)
145                 .setHidden(TEST_HIDDEN)
146                 .setSecurityType(TEST_SECURITY_TYPE)
147                 .setPassword(TEST_PASSWORD)
148                 .setProxyHost(TEST_PROXY_HOST)
149                 .setProxyPort(TEST_PROXY_PORT)
150                 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
151                 .setPacUrl(TEST_PAC_URL)
152                 .build();
153 
154         // WHEN the WifiInfo is written to parcel and then read back.
155         Parcel parcel = Parcel.obtain();
156         expectedWifiInfo.writeToParcel(parcel, 0);
157         parcel.setDataPosition(0);
158         WifiInfo actualWifiInfo = WifiInfo.CREATOR.createFromParcel(parcel);
159 
160         // THEN the same WifiInfo is obtained.
161         assertEquals(expectedWifiInfo, actualWifiInfo);
162     }
163 }
164