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