• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 android.net.wifi;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.junit.Assert.fail;
22 
23 import android.net.wifi.util.HexEncoding;
24 import android.os.Parcel;
25 
26 import androidx.test.filters.SmallTest;
27 
28 import org.junit.Test;
29 
30 import java.nio.charset.Charset;
31 import java.nio.charset.StandardCharsets;
32 import java.util.Arrays;
33 import java.util.List;
34 
35 /**
36  * Unit tests for {@link android.net.wifi.WifiSsid}.
37  */
38 @SmallTest
39 public class WifiSsidTest {
40 
41     private static final String TEST_SSID_UTF_8 = "Test SSID";
42     private static final String TEST_SSID_UTF_8_QUOTED = "\"" + TEST_SSID_UTF_8 + "\"";
43     private static final byte[] TEST_SSID_UTF_8_BYTES =
44             TEST_SSID_UTF_8.getBytes(StandardCharsets.UTF_8);
45     private static final String TEST_SSID_UTF_8_HEX =
46             HexEncoding.encodeToString(TEST_SSID_UTF_8_BYTES);
47 
48     private static final byte[] TEST_SSID_NON_UTF_8_BYTES =
49             "服務集識別碼".getBytes(Charset.forName("GBK"));
50     private static final String TEST_SSID_NON_UTF_8_HEX =
51             HexEncoding.encodeToString(TEST_SSID_NON_UTF_8_BYTES);
52 
53     /**
54      * Verify the behavior of fromByteArray()
55      */
56     @Test
testFromByteArray()57     public void testFromByteArray() {
58         WifiSsid wifiSsidUtf8 = WifiSsid.fromBytes(TEST_SSID_UTF_8_BYTES);
59         assertThat(wifiSsidUtf8).isNotNull();
60         assertThat(wifiSsidUtf8.getBytes()).isEqualTo(TEST_SSID_UTF_8_BYTES);
61         assertThat(wifiSsidUtf8.getUtf8Text()).isEqualTo(TEST_SSID_UTF_8);
62         assertThat(wifiSsidUtf8.toString()).isEqualTo(TEST_SSID_UTF_8_QUOTED);
63 
64         WifiSsid wifiSsidNonUtf8 = WifiSsid.fromBytes(TEST_SSID_NON_UTF_8_BYTES);
65         assertThat(wifiSsidNonUtf8).isNotNull();
66         assertThat(wifiSsidNonUtf8.getBytes()).isEqualTo(TEST_SSID_NON_UTF_8_BYTES);
67         assertThat(wifiSsidNonUtf8.getUtf8Text()).isNull();
68         assertThat(wifiSsidNonUtf8.toString()).isEqualTo(TEST_SSID_NON_UTF_8_HEX);
69 
70         WifiSsid wifiSsidEmpty = WifiSsid.fromBytes(new byte[0]);
71         assertThat(wifiSsidEmpty).isNotNull();
72         assertThat(wifiSsidEmpty.getBytes()).isEmpty();
73         assertThat(wifiSsidEmpty.getUtf8Text().toString()).isEmpty();
74         assertThat(wifiSsidEmpty.toString()).isEmpty();
75 
76         WifiSsid wifiSsidNull = WifiSsid.fromBytes(null);
77         assertThat(wifiSsidNull).isNotNull();
78         assertThat(wifiSsidNull.getBytes()).isEmpty();
79         assertThat(wifiSsidNull.getUtf8Text().toString()).isEmpty();
80         assertThat(wifiSsidNull.toString()).isEmpty();
81 
82         try {
83             WifiSsid.fromBytes(new byte[33]);
84             fail("Expected IllegalArgumentException for byte array length greater than 32.");
85         } catch (IllegalArgumentException e) {
86             // Success
87         }
88     }
89 
90     /**
91      * Verify the behavior of fromUtf8String()
92      */
93     @Test
testFromUtf8String()94     public void testFromUtf8String() {
95         WifiSsid wifiSsidUtf8 = WifiSsid.fromUtf8Text(TEST_SSID_UTF_8);
96         assertThat(wifiSsidUtf8).isNotNull();
97         assertThat(wifiSsidUtf8.getBytes()).isEqualTo(TEST_SSID_UTF_8_BYTES);
98         assertThat(wifiSsidUtf8.getUtf8Text()).isEqualTo(TEST_SSID_UTF_8);
99         assertThat(wifiSsidUtf8.toString()).isEqualTo(TEST_SSID_UTF_8_QUOTED);
100 
101         WifiSsid wifiSsidEmpty = WifiSsid.fromUtf8Text("");
102         assertThat(wifiSsidEmpty).isNotNull();
103         assertThat(wifiSsidEmpty.getBytes()).isEmpty();
104         assertThat(wifiSsidEmpty.getUtf8Text().toString()).isEmpty();
105         assertThat(wifiSsidEmpty.toString()).isEmpty();
106 
107         WifiSsid wifiSsidNull = WifiSsid.fromUtf8Text(null);
108         assertThat(wifiSsidNull).isNotNull();
109         assertThat(wifiSsidNull.getBytes()).isEmpty();
110         assertThat(wifiSsidNull.getUtf8Text().toString()).isEmpty();
111         assertThat(wifiSsidNull.toString()).isEmpty();
112 
113         try {
114             WifiSsid.fromUtf8Text("This is an SSID that is much longer than 32 bytes");
115             fail("Expected IllegalArgumentException for byte array length greater than 32.");
116         } catch (IllegalArgumentException e) {
117             // Success
118         }
119     }
120 
121     /**
122      * Verify the behavior of fromString()
123      */
124     @Test
testFromString()125     public void testFromString() {
126         WifiSsid wifiSsidUtf8 = WifiSsid.fromString(TEST_SSID_UTF_8_QUOTED);
127         assertThat(wifiSsidUtf8).isNotNull();
128         assertThat(wifiSsidUtf8.getBytes()).isEqualTo(TEST_SSID_UTF_8_BYTES);
129         assertThat(wifiSsidUtf8.getUtf8Text()).isEqualTo(TEST_SSID_UTF_8);
130         assertThat(wifiSsidUtf8.toString()).isEqualTo(TEST_SSID_UTF_8_QUOTED);
131 
132         WifiSsid wifiSsidUtf8Hex = WifiSsid.fromString(TEST_SSID_UTF_8_HEX);
133         assertThat(wifiSsidUtf8Hex).isNotNull();
134         assertThat(wifiSsidUtf8Hex.getBytes()).isEqualTo(TEST_SSID_UTF_8_BYTES);
135         assertThat(wifiSsidUtf8Hex.getUtf8Text()).isEqualTo(TEST_SSID_UTF_8);
136         assertThat(wifiSsidUtf8Hex.toString()).isEqualTo(TEST_SSID_UTF_8_QUOTED);
137 
138         WifiSsid wifiSsidNonUtf8 = WifiSsid.fromString(TEST_SSID_NON_UTF_8_HEX);
139         assertThat(wifiSsidNonUtf8).isNotNull();
140         assertThat(wifiSsidNonUtf8.getBytes()).isEqualTo(TEST_SSID_NON_UTF_8_BYTES);
141         assertThat(wifiSsidNonUtf8.getUtf8Text()).isNull();
142         assertThat(wifiSsidNonUtf8.toString()).isEqualTo(TEST_SSID_NON_UTF_8_HEX);
143 
144         WifiSsid wifiSsidEmpty = WifiSsid.fromUtf8Text("");
145         assertThat(wifiSsidEmpty).isNotNull();
146         assertThat(wifiSsidEmpty.getBytes()).isEmpty();
147         assertThat(wifiSsidEmpty.getUtf8Text().toString()).isEmpty();
148         assertThat(wifiSsidEmpty.toString()).isEmpty();
149 
150         WifiSsid wifiSsidNull = WifiSsid.fromUtf8Text(null);
151         assertThat(wifiSsidNull).isNotNull();
152         assertThat(wifiSsidNull.getBytes()).isEmpty();
153         assertThat(wifiSsidNull.getUtf8Text().toString()).isEmpty();
154         assertThat(wifiSsidNull.toString()).isEmpty();
155 
156         try {
157             WifiSsid.fromString("\"This is an SSID that is much longer than 32 bytes\"");
158             fail("Expected IllegalArgumentException for byte array length greater than 32.");
159         } catch (IllegalArgumentException e) {
160             // Success
161         }
162 
163         try {
164             WifiSsid.fromString(
165                     "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789AB");
166             fail("Expected IllegalArgumentException for byte array length greater than 32.");
167         } catch (IllegalArgumentException e) {
168             // Success
169         }
170 
171         try {
172             WifiSsid.fromString("0123456");
173             fail("Expected IllegalArgumentException for odd-length hexadecimal string");
174         } catch (IllegalArgumentException e) {
175             // Success
176         }
177     }
178 
179     /**
180      * Verify that SSID created from bytes, UTF-8 String, and toString()-formatted String with the
181      * same content are equal.
182      *
183      * @throws Exception
184      */
185     @Test
testEquals()186     public void testEquals() throws Exception {
187         WifiSsid fromBytesUtf8 = WifiSsid.fromBytes(TEST_SSID_UTF_8_BYTES);
188         WifiSsid fromUtf8StringUtf8 = WifiSsid.fromUtf8Text(TEST_SSID_UTF_8);
189         WifiSsid fromStringUtf8 = WifiSsid.fromString(TEST_SSID_UTF_8_QUOTED);
190         assertThat(fromBytesUtf8).isNotNull();
191         assertThat(fromUtf8StringUtf8).isNotNull();
192         assertThat(fromStringUtf8).isNotNull();
193         assertThat(fromBytesUtf8).isEqualTo(fromUtf8StringUtf8);
194         assertThat(fromBytesUtf8).isEqualTo(fromStringUtf8);
195         assertThat(fromUtf8StringUtf8).isEqualTo(fromStringUtf8);
196 
197         WifiSsid fromBytesNonUtf8 = WifiSsid.fromBytes(TEST_SSID_NON_UTF_8_BYTES);
198         WifiSsid fromStringNonUtf8 = WifiSsid.fromString(TEST_SSID_NON_UTF_8_HEX);
199         assertThat(fromBytesNonUtf8).isNotNull();
200         assertThat(fromStringNonUtf8).isNotNull();
201         assertThat(fromBytesNonUtf8).isEqualTo(fromStringNonUtf8);
202 
203         assertThat(fromBytesUtf8).isNotEqualTo(fromBytesNonUtf8);
204     }
205 
206     /**
207      * Verify the behavior of the Parcelable interface implementation.
208      */
209     @Test
testParcelable()210     public void testParcelable() throws Exception {
211         List<WifiSsid> testWifiSsids = Arrays.asList(
212                 WifiSsid.fromBytes(TEST_SSID_UTF_8_BYTES),
213                 WifiSsid.fromBytes(TEST_SSID_NON_UTF_8_BYTES),
214                 WifiSsid.fromUtf8Text(TEST_SSID_UTF_8),
215                 WifiSsid.fromString(TEST_SSID_UTF_8_QUOTED),
216                 WifiSsid.fromString(TEST_SSID_UTF_8_HEX),
217                 WifiSsid.fromString(TEST_SSID_NON_UTF_8_HEX));
218 
219         for (WifiSsid wifiSsid : testWifiSsids) {
220             Parcel parcel = Parcel.obtain();
221             wifiSsid.writeToParcel(parcel, 0);
222             parcel.setDataPosition(0);
223             assertThat(WifiSsid.CREATOR.createFromParcel(parcel)).isEqualTo(wifiSsid);
224         }
225     }
226 }
227