1eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang/*
2eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * Copyright (C) 2016 The Android Open Source Project
3eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang *
4eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * you may not use this file except in compliance with the License.
6eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * You may obtain a copy of the License at
7eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang *
8eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang *
10eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * Unless required by applicable law or agreed to in writing, software
11eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * See the License for the specific language governing permissions and
14eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang * limitations under the License
15eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang */
16eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangpackage com.android.settingslib.wifi;
17eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
189853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport static com.google.common.truth.Truth.assertThat;
199853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport static com.google.common.truth.Truth.assertWithMessage;
2071f4a82b51f53ba7b99fc7f1d1f81a29b7c88072Sundeep Ghuman
2121f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chenimport static org.mockito.Mockito.any;
2221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chenimport static org.mockito.Mockito.when;
23ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu
24d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.content.Context;
25d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.net.ConnectivityManager;
26d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.net.NetworkInfo;
2721f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chenimport android.net.ScoredNetwork;
28d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.net.wifi.ScanResult;
29d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.net.wifi.WifiConfiguration;
30d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.net.wifi.WifiInfo;
3121f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chenimport android.net.wifi.WifiNetworkScoreCache;
32d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.net.wifi.WifiSsid;
33ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiuimport android.net.wifi.hotspot2.PasspointConfiguration;
34ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiuimport android.net.wifi.hotspot2.pps.HomeSp;
35eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport android.os.Bundle;
36d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport android.os.SystemClock;
37eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport android.support.test.InstrumentationRegistry;
38eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport android.support.test.filters.SmallTest;
39eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport android.support.test.runner.AndroidJUnit4;
40eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport android.text.SpannableString;
41eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport android.text.style.TtsSpan;
4271f4a82b51f53ba7b99fc7f1d1f81a29b7c88072Sundeep Ghuman
43d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport org.junit.Before;
44eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport org.junit.Test;
45eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangimport org.junit.runner.RunWith;
4621f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chenimport org.mockito.Mock;
4721f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chenimport org.mockito.MockitoAnnotations;
48eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
49d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathurimport java.util.ArrayList;
509853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport java.util.Collections;
51eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
52eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang@SmallTest
53eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang@RunWith(AndroidJUnit4.class)
54eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhangpublic class AccessPointTest {
55eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
56eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang    private static final String TEST_SSID = "test_ssid";
57d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    private Context mContext;
5821f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    @Mock private WifiNetworkScoreCache mWifiNetworkScoreCache;
59d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur
60d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    @Before
61d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    public void setUp() {
6221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        MockitoAnnotations.initMocks(this);
63d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        mContext = InstrumentationRegistry.getTargetContext();
64d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    }
65eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
66eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang    @Test
67eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang    public void testSsidIsTelephoneSpan() {
68eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang        final Bundle bundle = new Bundle();
69eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang        bundle.putString("key_ssid", TEST_SSID);
70eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang        final AccessPoint ap = new AccessPoint(InstrumentationRegistry.getTargetContext(), bundle);
71eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang        final CharSequence ssid = ap.getSsid();
72eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
739853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(ssid instanceof SpannableString).isTrue();
74eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
75eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang        TtsSpan[] spans = ((SpannableString) ssid).getSpans(0, TEST_SSID.length(), TtsSpan.class);
76eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang
779853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(spans.length).isEqualTo(1);
789853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(spans[0].getType()).isEqualTo(TtsSpan.TYPE_TELEPHONE);
79eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang    }
80d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur
81d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    @Test
82d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    public void testCopyAccessPoint_dataShouldMatch() {
83d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        WifiConfiguration configuration = createWifiConfiguration();
8421f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        configuration.meteredHint = true;
85d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur
86d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        NetworkInfo networkInfo =
87d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE");
88d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        AccessPoint originalAccessPoint = new AccessPoint(mContext, configuration);
89d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        WifiInfo wifiInfo = new WifiInfo();
90d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID));
91d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        wifiInfo.setBSSID(configuration.BSSID);
92d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        originalAccessPoint.update(configuration, wifiInfo, networkInfo);
93d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        AccessPoint copy = new AccessPoint(mContext, originalAccessPoint);
94d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur
959853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(originalAccessPoint.getSsid().toString()).isEqualTo(copy.getSsid().toString());
969853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(originalAccessPoint.getBssid()).isEqualTo(copy.getBssid());
979853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(originalAccessPoint.getConfig()).isEqualTo(copy.getConfig());
989853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(originalAccessPoint.getSecurity()).isEqualTo(copy.getSecurity());
9921f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        assertThat(originalAccessPoint.isMetered()).isEqualTo(copy.isMetered());
1009853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(originalAccessPoint.compareTo(copy) == 0).isTrue();
101d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    }
102d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur
103d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    @Test
104d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    public void testThatCopyAccessPoint_scanCacheShouldMatch() {
10554bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        AccessPoint original = createAccessPointWithScanResultCache();
1069853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(original.getRssi()).isEqualTo(4);
107d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        AccessPoint copy = new AccessPoint(mContext, createWifiConfiguration());
10854bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        assertThat(copy.getRssi()).isEqualTo(AccessPoint.UNREACHABLE_RSSI);
109d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        copy.copyFrom(original);
1109853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(original.getRssi()).isEqualTo(copy.getRssi());
1119853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1129853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1139853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
1149853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testCompareTo_GivesActiveBeforeInactive() {
1159853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint activeAp = new TestAccessPointBuilder(mContext).setActive(true).build();
1169853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint inactiveAp = new TestAccessPointBuilder(mContext).setActive(false).build();
1179853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1189853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertSortingWorks(activeAp, inactiveAp);
1199853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1209853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1219853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
1229853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testCompareTo_GivesReachableBeforeUnreachable() {
1239853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint nearAp = new TestAccessPointBuilder(mContext).setReachable(true).build();
1249853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint farAp = new TestAccessPointBuilder(mContext).setReachable(false).build();
1259853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1269853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertSortingWorks(nearAp, farAp);
1279853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1289853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1299853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
1309853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testCompareTo_GivesSavedBeforeUnsaved() {
1319853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint savedAp = new TestAccessPointBuilder(mContext).setSaved(true).build();
1329853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint notSavedAp = new TestAccessPointBuilder(mContext).setSaved(false).build();
1339853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1349853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertSortingWorks(savedAp, notSavedAp);
1359853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1369853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1379853743705603e0b5214e5995bea8c9267708813Dave Schaefer    //TODO: add tests for mRankingScore sort order if ranking is exposed
1389853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1399853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
1409853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testCompareTo_GivesHighLevelBeforeLowLevel() {
1419853743705603e0b5214e5995bea8c9267708813Dave Schaefer        final int highLevel = AccessPoint.SIGNAL_LEVELS - 1;
1429853743705603e0b5214e5995bea8c9267708813Dave Schaefer        final int lowLevel = 1;
1439853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(highLevel).isGreaterThan(lowLevel);
1449853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1459853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint strongAp = new TestAccessPointBuilder(mContext).setLevel(highLevel).build();
1469853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint weakAp = new TestAccessPointBuilder(mContext).setLevel(lowLevel).build();
1479853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1489853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertSortingWorks(strongAp, weakAp);
1499853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1509853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1519853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
1529853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testCompareTo_GivesSsidAlphabetically() {
1539853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1549853743705603e0b5214e5995bea8c9267708813Dave Schaefer        final String firstName = "AAAAAA";
1559853743705603e0b5214e5995bea8c9267708813Dave Schaefer        final String secondName = "zzzzzz";
1569853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1579853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint firstAp = new TestAccessPointBuilder(mContext).setSsid(firstName).build();
1589853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint secondAp = new TestAccessPointBuilder(mContext).setSsid(secondName).build();
1599853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1609853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(firstAp.getSsidStr().compareToIgnoreCase(secondAp.getSsidStr()) < 0).isTrue();
1619853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertSortingWorks(firstAp, secondAp);
1629853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1639853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1649853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
1659853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testCompareTo_AllSortingRulesCombined() {
1669853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1679853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint active = new TestAccessPointBuilder(mContext).setActive(true).build();
1689853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint reachableAndMinLevel = new TestAccessPointBuilder(mContext)
1699853743705603e0b5214e5995bea8c9267708813Dave Schaefer                .setReachable(true).build();
1709853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint saved = new TestAccessPointBuilder(mContext).setSaved(true).build();
1719853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint highLevelAndReachable = new TestAccessPointBuilder(mContext)
1729853743705603e0b5214e5995bea8c9267708813Dave Schaefer                .setLevel(AccessPoint.SIGNAL_LEVELS - 1).build();
1739853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint firstName = new TestAccessPointBuilder(mContext).setSsid("a").build();
1749853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint lastname = new TestAccessPointBuilder(mContext).setSsid("z").build();
1759853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1769853743705603e0b5214e5995bea8c9267708813Dave Schaefer        ArrayList<AccessPoint> points = new ArrayList<AccessPoint>();
1779853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(lastname);
1789853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(firstName);
1799853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(highLevelAndReachable);
1809853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(saved);
1819853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(reachableAndMinLevel);
1829853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(active);
1839853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1849853743705603e0b5214e5995bea8c9267708813Dave Schaefer        Collections.sort(points);
1859853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(points.indexOf(active)).isLessThan(points.indexOf(reachableAndMinLevel));
1869853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(points.indexOf(reachableAndMinLevel)).isLessThan(points.indexOf(saved));
1879853743705603e0b5214e5995bea8c9267708813Dave Schaefer        // note: the saved AP will not appear before highLevelAndReachable,
1889853743705603e0b5214e5995bea8c9267708813Dave Schaefer        // because all APs with a signal level are reachable,
1899853743705603e0b5214e5995bea8c9267708813Dave Schaefer        // and isReachable() takes higher sorting precedence than isSaved().
1909853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(points.indexOf(saved)).isLessThan(points.indexOf(firstName));
1919853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(points.indexOf(highLevelAndReachable)).isLessThan(points.indexOf(firstName));
1929853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(points.indexOf(firstName)).isLessThan(points.indexOf(lastname));
193d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    }
194d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur
19554bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    @Test
19654bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    public void testRssiIsSetFromScanResults() {
19754bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        AccessPoint ap = createAccessPointWithScanResultCache();
19854bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        int originalRssi = ap.getRssi();
19954bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        assertThat(originalRssi).isNotEqualTo(AccessPoint.UNREACHABLE_RSSI);
20054bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    }
20154bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman
20254bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    @Test
20354bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    public void testGetRssiShouldReturnSetRssiValue() {
20454bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        AccessPoint ap = createAccessPointWithScanResultCache();
20554bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        int originalRssi = ap.getRssi();
20654bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        int newRssi = originalRssi - 10;
20754bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        ap.setRssi(newRssi);
20854bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        assertThat(ap.getRssi()).isEqualTo(newRssi);
20954bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    }
21054bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman
211ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman    @Test
212ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman    public void testUpdateWithScanResultShouldAverageRssi() {
213ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        String ssid = "ssid";
214ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        int originalRssi = -65;
215ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        int newRssi = -80;
216ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        int expectedRssi = (originalRssi + newRssi) / 2;
217ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        AccessPoint ap =
218ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman                new TestAccessPointBuilder(mContext).setSsid(ssid).setRssi(originalRssi).build();
219ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman
220ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        ScanResult scanResult = new ScanResult();
221ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        scanResult.SSID = ssid;
222ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        scanResult.level = newRssi;
223ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        scanResult.BSSID = "bssid";
224ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        scanResult.timestamp = SystemClock.elapsedRealtime() * 1000;
225ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        scanResult.capabilities = "";
226ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        assertThat(ap.update(scanResult)).isTrue();
227ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman
228ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman        assertThat(ap.getRssi()).isEqualTo(expectedRssi);
229ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman    }
230ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman
231ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    @Test
232ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    public void testCreateFromPasspointConfig() {
233ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        PasspointConfiguration config = new PasspointConfiguration();
234ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        HomeSp homeSp = new HomeSp();
235ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        homeSp.setFqdn("test.com");
236ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        homeSp.setFriendlyName("Test Provider");
237ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        config.setHomeSp(homeSp);
238ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        AccessPoint ap = new AccessPoint(mContext, config);
239b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(ap.isPasspointConfig()).isTrue();
240ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    }
241ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu
24221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    @Test
24321f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    public void testIsMetered_returnTrueWhenWifiConfigurationIsMetered() {
24421f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        WifiConfiguration configuration = createWifiConfiguration();
24521f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        configuration.meteredHint = true;
24621f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
24721f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        NetworkInfo networkInfo =
24821f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE");
24921f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        AccessPoint accessPoint = new AccessPoint(mContext, configuration);
25021f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        WifiInfo wifiInfo = new WifiInfo();
25121f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID));
25221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setBSSID(configuration.BSSID);
25321f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setNetworkId(configuration.networkId);
25421f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        accessPoint.update(configuration, wifiInfo, networkInfo);
25521f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
256b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(accessPoint.isMetered()).isTrue();
257b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    }
25821f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
25921f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    @Test
26021f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    public void testIsMetered_returnTrueWhenWifiInfoIsMetered() {
26121f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        WifiConfiguration configuration = createWifiConfiguration();
26221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
26321f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        NetworkInfo networkInfo =
26421f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE");
26521f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        AccessPoint accessPoint = new AccessPoint(mContext, configuration);
26621f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        WifiInfo wifiInfo = new WifiInfo();
26721f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID));
26821f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setBSSID(configuration.BSSID);
26921f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setNetworkId(configuration.networkId);
27021f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        wifiInfo.setMeteredHint(true);
27121f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        accessPoint.update(configuration, wifiInfo, networkInfo);
27221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
273b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(accessPoint.isMetered()).isTrue();
274b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    }
275b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen
276b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    @Test
277b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    public void testIsMetered_returnTrueWhenNetworkInfoIsMetered() {
278b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        WifiConfiguration configuration = createWifiConfiguration();
279b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen
280b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        NetworkInfo networkInfo =
281b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE");
282b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        networkInfo.setMetered(true);
283b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        AccessPoint accessPoint = new AccessPoint(mContext, configuration);
284b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        WifiInfo wifiInfo = new WifiInfo();
285b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID));
286b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        wifiInfo.setBSSID(configuration.BSSID);
287b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        wifiInfo.setNetworkId(configuration.networkId);
288b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        accessPoint.update(configuration, wifiInfo, networkInfo);
289b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen
290b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(accessPoint.isMetered()).isTrue();
291b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    }
29221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
29321f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    @Test
29421f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen    public void testIsMetered_returnTrueWhenScoredNetworkIsMetered() {
29521f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        AccessPoint ap = createAccessPointWithScanResultCache();
29621f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
29721f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        when(mWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class)))
29821f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                .thenReturn(
29921f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                        new ScoredNetwork(
30021f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                                null /* NetworkKey */,
30121f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                                null /* rssiCurve */,
30221f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen                                true /* metered */));
30321f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen        ap.update(mWifiNetworkScoreCache, false /* scoringUiEnabled */);
30421f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
305b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(ap.isMetered()).isTrue();
306b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    }
307b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen
308b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    @Test
309b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    public void testIsMetered_returnFalseByDefault() {
310b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        WifiConfiguration configuration = createWifiConfiguration();
311b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen
312b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        NetworkInfo networkInfo =
313b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE");
314b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        AccessPoint accessPoint = new AccessPoint(mContext, configuration);
315b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        WifiInfo wifiInfo = new WifiInfo();
316b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID));
317b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        wifiInfo.setBSSID(configuration.BSSID);
318b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        wifiInfo.setNetworkId(configuration.networkId);
319b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        accessPoint.update(configuration, wifiInfo, networkInfo);
320b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen
321b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(accessPoint.isMetered()).isFalse();
322b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen    }
32321f6868d8096ca2ff64cdb9fdc4457277d70bf07Stephen Chen
32454bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    private AccessPoint createAccessPointWithScanResultCache() {
32554bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        Bundle bundle = new Bundle();
32654bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        ArrayList<ScanResult> scanResults = new ArrayList<>();
32754bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        for (int i = 0; i < 5; i++) {
32854bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman            ScanResult scanResult = new ScanResult();
32954bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman            scanResult.level = i;
33054bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman            scanResult.BSSID = "bssid-" + i;
33154bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman            scanResult.timestamp = SystemClock.elapsedRealtime() * 1000;
332ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman            scanResult.capabilities = "";
33354bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman            scanResults.add(scanResult);
33454bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        }
33554bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman
33654bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        bundle.putParcelableArrayList("key_scanresultcache", scanResults);
33754bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman        return new AccessPoint(mContext, bundle);
33854bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman    }
33954bdcfa08180a69b852c8f71b39d30f0061ce6ffSundeep Ghuman
340d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    private WifiConfiguration createWifiConfiguration() {
341d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        WifiConfiguration configuration = new WifiConfiguration();
342d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        configuration.BSSID = "bssid";
343d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        configuration.SSID = "ssid";
344d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        configuration.networkId = 123;
345d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur        return configuration;
346d7b689aefcf7548ea0367622c76b4bda9f9833b2Ajay Nadathur    }
3479853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3489853743705603e0b5214e5995bea8c9267708813Dave Schaefer    /**
3499853743705603e0b5214e5995bea8c9267708813Dave Schaefer    * Assert that the first AccessPoint appears after the second AccessPoint
3509853743705603e0b5214e5995bea8c9267708813Dave Schaefer    * once sorting has been completed.
3519853743705603e0b5214e5995bea8c9267708813Dave Schaefer    */
3529853743705603e0b5214e5995bea8c9267708813Dave Schaefer    private void assertSortingWorks(AccessPoint first, AccessPoint second) {
3539853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3549853743705603e0b5214e5995bea8c9267708813Dave Schaefer        ArrayList<AccessPoint> points = new ArrayList<AccessPoint>();
3559853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3569853743705603e0b5214e5995bea8c9267708813Dave Schaefer        // add in reverse order so we can tell that sorting actually changed something
3579853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(second);
3589853743705603e0b5214e5995bea8c9267708813Dave Schaefer        points.add(first);
3599853743705603e0b5214e5995bea8c9267708813Dave Schaefer        Collections.sort(points);
3609853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertWithMessage(
3619853743705603e0b5214e5995bea8c9267708813Dave Schaefer                String.format("After sorting: second AccessPoint should have higher array index "
3629853743705603e0b5214e5995bea8c9267708813Dave Schaefer                    + "than the first, but found indicies second '%s' and first '%s'.",
3639853743705603e0b5214e5995bea8c9267708813Dave Schaefer                    points.indexOf(second), points.indexOf(first)))
3649853743705603e0b5214e5995bea8c9267708813Dave Schaefer            .that(points.indexOf(second)).isGreaterThan(points.indexOf(first));
3659853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
3669853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3679853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
3689853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testBuilder_setActive() {
3699853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint activeAp = new TestAccessPointBuilder(mContext).setActive(true).build();
3709853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(activeAp.isActive()).isTrue();
3719853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3729853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint inactiveAp = new TestAccessPointBuilder(mContext).setActive(false).build();
3739853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(inactiveAp.isActive()).isFalse();
3749853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
3759853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3769853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
3779853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testBuilder_setReachable() {
3789853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint nearAp = new TestAccessPointBuilder(mContext).setReachable(true).build();
3799853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(nearAp.isReachable()).isTrue();
3809853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3819853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint farAp = new TestAccessPointBuilder(mContext).setReachable(false).build();
3829853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(farAp.isReachable()).isFalse();
3839853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
3849853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3859853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
3869853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testBuilder_setSaved() {
3879853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint savedAp = new TestAccessPointBuilder(mContext).setSaved(true).build();
3889853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(savedAp.isSaved()).isTrue();
3899853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3909853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint newAp = new TestAccessPointBuilder(mContext).setSaved(false).build();
3919853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(newAp.isSaved()).isFalse();
3929853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
3939853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3949853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
3959853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testBuilder_setLevel() {
3969853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint testAp;
3979853743705603e0b5214e5995bea8c9267708813Dave Schaefer
3989853743705603e0b5214e5995bea8c9267708813Dave Schaefer        for (int i = 0; i < AccessPoint.SIGNAL_LEVELS; i++) {
3999853743705603e0b5214e5995bea8c9267708813Dave Schaefer            testAp = new TestAccessPointBuilder(mContext).setLevel(i).build();
4009853743705603e0b5214e5995bea8c9267708813Dave Schaefer            assertThat(testAp.getLevel()).isEqualTo(i);
4019853743705603e0b5214e5995bea8c9267708813Dave Schaefer        }
4029853743705603e0b5214e5995bea8c9267708813Dave Schaefer
4039853743705603e0b5214e5995bea8c9267708813Dave Schaefer        // numbers larger than the max level should be set to max
4049853743705603e0b5214e5995bea8c9267708813Dave Schaefer        testAp = new TestAccessPointBuilder(mContext).setLevel(AccessPoint.SIGNAL_LEVELS).build();
4059853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(testAp.getLevel()).isEqualTo(AccessPoint.SIGNAL_LEVELS - 1);
4069853743705603e0b5214e5995bea8c9267708813Dave Schaefer
4079853743705603e0b5214e5995bea8c9267708813Dave Schaefer        // numbers less than 0 should give level 0
4089853743705603e0b5214e5995bea8c9267708813Dave Schaefer        testAp = new TestAccessPointBuilder(mContext).setLevel(-100).build();
4099853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(testAp.getLevel()).isEqualTo(0);
4109853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
4119853743705603e0b5214e5995bea8c9267708813Dave Schaefer
4129853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
4139853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testBuilder_settingReachableAfterLevelDoesNotAffectLevel() {
4149853743705603e0b5214e5995bea8c9267708813Dave Schaefer        int level = 1;
4159853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(level).isLessThan(AccessPoint.SIGNAL_LEVELS - 1);
4169853743705603e0b5214e5995bea8c9267708813Dave Schaefer
4179853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint testAp =
4189853743705603e0b5214e5995bea8c9267708813Dave Schaefer                new TestAccessPointBuilder(mContext).setLevel(level).setReachable(true).build();
4199853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(testAp.getLevel()).isEqualTo(level);
4209853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
4219853743705603e0b5214e5995bea8c9267708813Dave Schaefer
4229853743705603e0b5214e5995bea8c9267708813Dave Schaefer    @Test
4239853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public void testBuilder_setSsid() {
4249853743705603e0b5214e5995bea8c9267708813Dave Schaefer        String name = "AmazingSsid!";
4259853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint namedAp = new TestAccessPointBuilder(mContext).setSsid(name).build();
4269853743705603e0b5214e5995bea8c9267708813Dave Schaefer        assertThat(namedAp.getSsidStr()).isEqualTo(name);
4279853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
428ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu
429ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    @Test
430ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    public void testBuilder_passpointConfig() {
431ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        String fqdn = "Test.com";
432ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        String providerFriendlyName = "Test Provider";
433ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        AccessPoint ap = new TestAccessPointBuilder(mContext).setFqdn(fqdn)
434ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu                .setProviderFriendlyName(providerFriendlyName).build();
435b5bcb8d4d60a4cc667b11448577b0c82e518008aStephen Chen        assertThat(ap.isPasspointConfig()).isTrue();
436ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        assertThat(ap.getPasspointFqdn()).isEqualTo(fqdn);
437ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        assertThat(ap.getConfigName()).isEqualTo(providerFriendlyName);
438ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    }
43996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
44096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    @Test
44196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    public void testUpdateNetworkInfo_returnsTrue() {
44296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        int networkId = 123;
44396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        int rssi = -55;
44496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        WifiConfiguration config = new WifiConfiguration();
44596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        config.networkId = networkId;
44696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        WifiInfo wifiInfo = new WifiInfo();
44796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        wifiInfo.setNetworkId(networkId);
44896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        wifiInfo.setRssi(rssi);
44996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
45096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        NetworkInfo networkInfo =
45196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
45296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", "");
45396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
45496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        AccessPoint ap = new TestAccessPointBuilder(mContext)
45596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setNetworkInfo(networkInfo)
45696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setNetworkId(networkId)
45796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setRssi(rssi)
45896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setWifiInfo(wifiInfo)
45996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .build();
46096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
46196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        NetworkInfo newInfo = new NetworkInfo(networkInfo);
46296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        newInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
46396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        assertThat(ap.update(config, wifiInfo, newInfo)).isTrue();
46496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    }
46596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
46696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    @Test
46796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    public void testUpdateNetworkInfoWithSameInfo_returnsFalse() {
46896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        int networkId = 123;
46996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        int rssi = -55;
47096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        WifiConfiguration config = new WifiConfiguration();
47196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        config.networkId = networkId;
47296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        WifiInfo wifiInfo = new WifiInfo();
47396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        wifiInfo.setNetworkId(networkId);
47496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        wifiInfo.setRssi(rssi);
47596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
47696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        NetworkInfo networkInfo =
47796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
47896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", "");
47996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
48096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        AccessPoint ap = new TestAccessPointBuilder(mContext)
48196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setNetworkInfo(networkInfo)
48296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setNetworkId(networkId)
48396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setRssi(rssi)
48496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .setWifiInfo(wifiInfo)
48596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman                .build();
48696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
48796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        NetworkInfo newInfo = new NetworkInfo(networkInfo); // same values
48896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        assertThat(ap.update(config, wifiInfo, newInfo)).isFalse();
48996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    }
490eb83a0d5019570b76cc248d419ddb14afc74eb85Fan Zhang}
491