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
17package com.android.server.wifi.util;
18
19import static org.junit.Assert.assertArrayEquals;
20import static org.junit.Assert.assertEquals;
21import static org.junit.Assert.assertNotNull;
22
23import android.net.wifi.ScanResult;
24import android.net.wifi.ScanResult.InformationElement;
25import android.net.wifi.WifiSsid;
26import android.test.suitebuilder.annotation.SmallTest;
27
28import com.android.server.wifi.ScanDetail;
29
30import org.junit.Test;
31
32import java.nio.charset.StandardCharsets;
33import java.util.Arrays;
34
35/**
36 * Unit tests for {@link com.android.server.wifi.util.ScanDetailUtil}.
37 */
38@SmallTest
39public class ScanDetailUtilTest {
40
41    @Test
42    public void convertScanResult() {
43        final String ssid = "SOME SsId";
44
45        ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid,
46                "ab:cd:01:ef:45:89", 1245, 0, "", -78, 2450, 1025, 22, 33, 20, 0, 0, true);
47
48        input.informationElements = new InformationElement[] {
49            createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8))
50        };
51
52        ScanDetail output = ScanDetailUtil.toScanDetail(input);
53
54        validateScanDetail(input, output);
55    }
56
57    @Test
58    public void convertScanResultWithAnqpLines() {
59        final String ssid = "SOME SsId";
60
61        ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid,
62                "ab:cd:01:ef:45:89", 1245, 0, "some caps", -78, 2450, 1025, 22, 33, 20, 0, 0, true);
63
64        input.informationElements = new InformationElement[] {
65            createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8))
66        };
67        input.anqpLines = Arrays.asList("LINE 1", "line 2", "Line 3");
68
69        ScanDetail output = ScanDetailUtil.toScanDetail(input);
70
71        validateScanDetail(input, output);
72    }
73
74    @Test
75    public void convertScanResultWithoutWifiSsid() {
76        final String ssid = "Another SSid";
77        ScanResult input = new ScanResult(ssid, "ab:cd:01:ef:45:89", 1245, 0, "other caps",
78                -78, 2450, 1025, 22, 33, 20, 0, 0, true);
79        input.informationElements = new InformationElement[] {
80            createIE(InformationElement.EID_SSID, ssid.getBytes(StandardCharsets.UTF_8))
81        };
82
83        ScanDetail output = ScanDetailUtil.toScanDetail(input);
84
85        validateScanDetail(input, output);
86    }
87
88    private static InformationElement createIE(int id, byte[] bytes) {
89        InformationElement ie = new InformationElement();
90        ie.id = id;
91        ie.bytes = bytes;
92        return ie;
93    }
94
95    private static void validateScanDetail(ScanResult input, ScanDetail output) {
96        assertNotNull("NetworkDetail was null", output.getNetworkDetail());
97        assertNotNull("ScanResult was null", output.getScanResult());
98        assertEquals("NetworkDetail SSID", input.SSID,
99                output.getNetworkDetail().getSSID());
100        assertEquals("ScanResult SSID", input.SSID,
101                output.getScanResult().SSID);
102        assertEquals("ScanResult wifiSsid", input.wifiSsid,
103                output.getScanResult().wifiSsid);
104        assertEquals("getSSID", input.SSID, output.getSSID());
105        assertEquals("NetworkDetail BSSID", input.BSSID,
106                output.getNetworkDetail().getBSSIDString());
107        assertEquals("getBSSIDString", input.BSSID, output.getBSSIDString());
108        assertEquals("ScanResult frequency", input.frequency,
109                output.getScanResult().frequency);
110        assertEquals("ScanResult level", input.level,
111                output.getScanResult().level);
112        assertEquals("ScanResult capabilities", input.capabilities,
113                output.getScanResult().capabilities);
114        assertEquals("ScanResult timestamp", input.timestamp,
115                output.getScanResult().timestamp);
116        assertArrayEquals("ScanResult information elements", input.informationElements,
117                output.getScanResult().informationElements);
118        assertEquals("ScanResult anqp lines", input.anqpLines,
119                output.getScanResult().anqpLines);
120    }
121
122}
123