summaryrefslogtreecommitdiff
path: root/tests/src/com/android/networkrecommendation/DefaultNetworkRecommendationProviderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/networkrecommendation/DefaultNetworkRecommendationProviderTest.java')
-rw-r--r--tests/src/com/android/networkrecommendation/DefaultNetworkRecommendationProviderTest.java381
1 files changed, 0 insertions, 381 deletions
diff --git a/tests/src/com/android/networkrecommendation/DefaultNetworkRecommendationProviderTest.java b/tests/src/com/android/networkrecommendation/DefaultNetworkRecommendationProviderTest.java
deleted file mode 100644
index dc6c673..0000000
--- a/tests/src/com/android/networkrecommendation/DefaultNetworkRecommendationProviderTest.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.networkrecommendation;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.net.NetworkKey;
-import android.net.NetworkRecommendationProvider;
-import android.net.NetworkScoreManager;
-import android.net.RecommendationRequest;
-import android.net.RecommendationResult;
-import android.net.RssiCurve;
-import android.net.ScoredNetwork;
-import android.net.WifiKey;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiSsid;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-/**
- * Tests the recommendation provider directly, to test internals of the provider rather than the
- * service's API.
- */
-@RunWith(AndroidJUnit4.class)
-public class DefaultNetworkRecommendationProviderTest {
-
- private static final String GOOD_METERED_NETWORK_STRING_UNQUOTED = "Metered";
- private static final String GOOD_METERED_NETWORK_STRING = "\"Metered\",aa:bb:cc:dd:ee:ff" +
- "|10,-128,-128,-128,-128,-128,-128,-128,-128,20,20,20,20,-128|1|0|4K";
- private static final RssiCurve GOOD_METERED_NETWORK_CURVE = new RssiCurve(
- DefaultNetworkRecommendationProvider.CONSTANT_CURVE_START, 10 /* bucketWidth */,
- new byte[]{-128, -128, -128, -128, -128, -128, -128, -128, 20, 20, 20, 20, -128},
- 0 /* defaultActiveNetworkBoost */);
- private static final ScoredNetwork GOOD_METERED_NETWORK = new ScoredNetwork(
- new NetworkKey(new WifiKey("\"Metered\"", "aa:bb:cc:dd:ee:ff")),
- GOOD_METERED_NETWORK_CURVE, true /* meteredHint */, new Bundle());
-
- private static final String GOOD_CAPTIVE_NETWORK_STRING_UNQUOTED = "Captive";
- private static final String GOOD_CAPTIVE_NETWORK_STRING =
- "\"Captive\",ff:ee:dd:cc:bb:aa"
- + "|18,-128,-128,-128,-128,-128,-128,21,21,21,-128|0|1|HD";
- private static final RssiCurve GOOD_CAPTIVE_NETWORK_CURVE = new RssiCurve(
- DefaultNetworkRecommendationProvider.CONSTANT_CURVE_START, 18 /* bucketWidth */,
- new byte[]{-128, -128, -128, -128, -128, -128, 21, 21, 21, -128},
- 0 /* defaultActiveNetworkBoost */);
- private static final ScoredNetwork GOOD_CAPTIVE_NETWORK;
- static {
- Bundle attributes = new Bundle();
- attributes.putBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL, true);
- GOOD_CAPTIVE_NETWORK = new ScoredNetwork(
- new NetworkKey(new WifiKey("\"Captive\"", "ff:ee:dd:cc:bb:aa")),
- GOOD_CAPTIVE_NETWORK_CURVE, false /* meteredHint */, attributes);
- }
-
- private static final String ANY_NETWORK_STRING_UNQUOTED = "AnySsid";
- private static final String ANY_NETWORK_STRING =
- "\"AnySsid\",00:00:00:00:00:00"
- + "|18,-128,-128,-128,-128,-128,-128,22,22,22,-128|0|0|NONE";
- private static final RssiCurve ANY_NETWORK_CURVE = new RssiCurve(
- DefaultNetworkRecommendationProvider.CONSTANT_CURVE_START, 18 /* bucketWidth */,
- new byte[]{-128, -128, -128, -128, -128, -128, 22, 22, 22, -128},
- 0 /* defaultActiveNetworkBoost */);
- private static final ScoredNetwork ANY_NETWORK = new ScoredNetwork(
- new NetworkKey(new WifiKey("\"AnySsid\"", "ee:ee:ee:ee:ee:ee")),
- ANY_NETWORK_CURVE, false /* meteredHint */, new Bundle());
-
- private static final String ANY_NETWORK_SPECIFIC_STRING_UNQUOTED = "AnySsid";
- private static final String ANY_NETWORK_SPECIFIC_STRING =
- "\"AnySsid\",ee:ee:ee:ee:ee:ee"
- + "|18,-128,-128,-128,-128,-128,-128,23,23,23,-128|0|0|NONE";
- private static final RssiCurve ANY_NETWORK_SPECIFIC_CURVE = new RssiCurve(
- DefaultNetworkRecommendationProvider.CONSTANT_CURVE_START, 18 /* bucketWidth */,
- new byte[]{-128, -128, -128, -128, -128, -128, 23, 23, 23, -128},
- 0 /* defaultActiveNetworkBoost */);
- private static final ScoredNetwork ANY_NETWORK_SPECIFIC = new ScoredNetwork(
- new NetworkKey(new WifiKey("\"AnySsid\"", "ee:ee:ee:ee:ee:ee")),
- ANY_NETWORK_SPECIFIC_CURVE, false /* meteredHint */, new Bundle());
-
- private static final String BAD_NETWORK_STRING_UNQUOTED = "Bad";
- private static final String BAD_NETWORK_STRING =
- "\"Bad\",aa:bb:cc:dd:ee:ff"
- + "|10,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128,-128"
- + "|1|0|SD";
- private static final RssiCurve BAD_NETWORK_CURVE =
- new RssiCurve(
- DefaultNetworkRecommendationProvider.CONSTANT_CURVE_START,
- 10 /* bucketWidth */,
- new byte[] {-128, -128, -128, -128, -128, -128,
- -128, -128, -128, -128, -128, -128, -128},
- 0 /* defaultActiveNetworkBoost */);
- private static final ScoredNetwork BAD_NETWORK =
- new ScoredNetwork(
- new NetworkKey(new WifiKey("\"Bad\"", "aa:bb:cc:dd:ee:ff")),
- BAD_NETWORK_CURVE,
- true /* meteredHint */,
- new Bundle());
-
- @Mock
- private NetworkRecommendationProvider.ResultCallback mCallback;
-
- @Mock
- private NetworkScoreManager mNetworkScoreManager;
-
- @Mock
- private Context mContext;
-
- private DefaultNetworkRecommendationProvider.ScoreStorage mStorage;
- private DefaultNetworkRecommendationProvider mProvider;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mStorage = new DefaultNetworkRecommendationProvider.ScoreStorage();
- final Handler handler = new Handler(Looper.getMainLooper());
- mProvider = new DefaultNetworkRecommendationProvider(mContext,
- handler::post, mNetworkScoreManager, mStorage);
- }
-
- @Test
- public void basicRecommendation() throws Exception {
-
- ScanResult[] scanResults = new ScanResult[6];
- for (int i = 0; i < 3; i++) {
- scanResults[i] = TestUtil.createMockScanResult(i);
- }
-
- // For now we add directly to storage, but when we start calling
- // networkScoreManager.updateScores, we'll have to adjust this test.
- mProvider.addScoreForTest(GOOD_METERED_NETWORK);
- {
- ScanResult scanResult = new ScanResult();
- scanResult.level = 115;
- scanResult.SSID = GOOD_METERED_NETWORK_STRING_UNQUOTED;
- scanResult.wifiSsid = WifiSsid.createFromAsciiEncoded(
- GOOD_METERED_NETWORK_STRING_UNQUOTED);
- scanResult.BSSID = GOOD_METERED_NETWORK.networkKey.wifiKey.bssid;
- scanResult.capabilities = "[ESS]";
- scanResult.timestamp = SystemClock.elapsedRealtime() * 1000;
- scanResults[3] = scanResult;
- }
-
- for (int i = 4; i < 6; i++) {
- scanResults[i] = TestUtil.createMockScanResult(i);
- }
-
- RecommendationRequest request = new RecommendationRequest.Builder()
- .setScanResults(scanResults)
- .build();
-
- RecommendationResult result = verifyAndCaptureResult(request);
- assertEquals(GOOD_METERED_NETWORK.networkKey.wifiKey.ssid,
- result.getWifiConfiguration().SSID);
- }
-
- @Test
- public void recommendation_noScans_returnsCurrentConfig() throws Exception {
- ScanResult[] scanResults = new ScanResult[0];
-
- WifiConfiguration expectedConfig = new WifiConfiguration();
- expectedConfig.SSID = "ssid";
- expectedConfig.BSSID = "bssid";
- RecommendationRequest request = new RecommendationRequest.Builder()
- .setScanResults(scanResults)
- .setDefaultWifiConfig(expectedConfig)
- .build();
-
- RecommendationResult result = verifyAndCaptureResult(request);
- assertEquals(expectedConfig, result.getWifiConfiguration());
- }
-
- @Test
- public void recommendation_noScans_noCurrentConfig_returnsEmpty() throws Exception {
- ScanResult[] scanResults = new ScanResult[0];
-
- RecommendationRequest request = new RecommendationRequest.Builder()
- .setScanResults(scanResults)
- .build();
-
- RecommendationResult result = verifyAndCaptureResult(request);
- assertNull(result.getWifiConfiguration());
- }
-
- @Test
- public void scoreNetworks() throws Exception {
- NetworkKey[] keys =
- new NetworkKey[]{GOOD_METERED_NETWORK.networkKey, GOOD_CAPTIVE_NETWORK.networkKey};
- mProvider.onRequestScores(keys);
-
- verify(mNetworkScoreManager).updateScores(Mockito.any());
- }
-
- @Test
- public void scoreNetworks_empty() throws Exception {
- NetworkKey[] keys = new NetworkKey[]{};
- mProvider.onRequestScores(keys);
-
- verify(mNetworkScoreManager, times(0)).updateScores(Mockito.any());
- }
-
- @Test
- public void dumpAddScores_goodMetered() {
- String[] args = {"netrec", "addScore", GOOD_METERED_NETWORK_STRING};
- mProvider.dump(null /* fd */, new PrintWriter(new StringWriter()), args);
-
- ScoredNetwork[] scoredNetworks = verifyAndCaptureScoredNetworks();
- assertEquals(1, scoredNetworks.length);
- ScoredNetwork score = scoredNetworks[0];
-
- assertEquals(GOOD_METERED_NETWORK.networkKey.wifiKey.ssid, score.networkKey.wifiKey.ssid);
- assertEquals(GOOD_METERED_NETWORK.networkKey.wifiKey.bssid, score.networkKey.wifiKey.bssid);
-
- assertEquals(GOOD_METERED_NETWORK.meteredHint, score.meteredHint);
- assertEquals(
- GOOD_METERED_NETWORK.attributes.getBoolean(
- ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL),
- score.attributes.getBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL));
-
- assertEquals("Network curve does not match", GOOD_METERED_NETWORK_CURVE, score.rssiCurve);
- assertEquals(
- "Badge curve does not match",
- DefaultNetworkRecommendationProvider.BADGE_CURVE_4K,
- (RssiCurve) score.attributes.getParcelable(
- ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE));
- }
-
- @Test
- public void dumpAddScores_bad() {
- String[] args = {"netrec", "addScore", BAD_NETWORK_STRING};
- mProvider.dump(null /* fd */, new PrintWriter(new StringWriter()), args);
-
- ScoredNetwork[] scoredNetworks = verifyAndCaptureScoredNetworks();
- assertEquals(1, scoredNetworks.length);
- ScoredNetwork score = scoredNetworks[0];
-
- assertEquals(BAD_NETWORK.networkKey.wifiKey.ssid, score.networkKey.wifiKey.ssid);
- assertEquals(BAD_NETWORK.networkKey.wifiKey.bssid, score.networkKey.wifiKey.bssid);
-
- assertEquals(BAD_NETWORK.meteredHint, score.meteredHint);
- assertEquals(
- BAD_NETWORK.attributes.getBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL),
- score.attributes.getBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL));
-
- assertEquals("Network curve does not match", BAD_NETWORK_CURVE, score.rssiCurve);
- assertEquals(
- "Badge curve does not match",
- DefaultNetworkRecommendationProvider.BADGE_CURVE_SD,
- (RssiCurve) score.attributes.getParcelable(
- ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE));
- }
-
- @Test
- public void dumpAddScores_goodCaptivePortal() {
- String[] args = {"addScore", GOOD_CAPTIVE_NETWORK_STRING};
- mProvider.dump(null /* fd */, new PrintWriter(new StringWriter()), args);
-
- ScoredNetwork[] scoredNetworks = verifyAndCaptureScoredNetworks();
- assertEquals(1, scoredNetworks.length);
- ScoredNetwork score = scoredNetworks[0];
-
- assertEquals(GOOD_CAPTIVE_NETWORK.networkKey.wifiKey.ssid, score.networkKey.wifiKey.ssid);
- assertEquals(GOOD_CAPTIVE_NETWORK.networkKey.wifiKey.bssid, score.networkKey.wifiKey.bssid);
-
- assertEquals(GOOD_CAPTIVE_NETWORK.meteredHint, score.meteredHint);
-
- assertEquals(
- GOOD_CAPTIVE_NETWORK.attributes.getBoolean(
- ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL),
- score.attributes.getBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL));
- assertEquals("Network curve does not match.", GOOD_CAPTIVE_NETWORK_CURVE, score.rssiCurve);
- assertEquals(
- "Badge curve does not match",
- DefaultNetworkRecommendationProvider.BADGE_CURVE_HD,
- (RssiCurve) score.attributes.getParcelable(
- ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE));
- }
-
- @Test
- public void dumpAddScores_anySsid() {
- String[] args = {"addScore", ANY_NETWORK_STRING};
- mProvider.dump(null /* fd */, new PrintWriter(new StringWriter()), args);
-
- // We don't update the platform with the any bssid score, but we do store it.
- verify(mNetworkScoreManager, times(0)).updateScores(Mockito.any());
-
- // We do store and serve the score, though:
- ScoredNetwork score = mStorage.get(ANY_NETWORK.networkKey);
- assertNotNull(score);
-
- assertEquals(ANY_NETWORK.networkKey, score.networkKey);
- assertEquals(ANY_NETWORK.meteredHint, score.meteredHint);
- assertEquals(
- ANY_NETWORK.attributes.getBoolean(
- ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL),
- score.attributes.getBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL));
- assertEquals("Network curve does not match", ANY_NETWORK_CURVE, score.rssiCurve);
- assertNull(
- "Badge curve should not be set.",
- (RssiCurve) score.attributes.getParcelable(
- ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE));
- }
-
- @Test
- public void dumpAddScores_anySsid_useMoreSpecific() {
- mProvider.dump(null /* fd */, new PrintWriter(new StringWriter()),
- new String[] {"addScore", ANY_NETWORK_STRING});
- verify(mNetworkScoreManager, times(0)).updateScores(Mockito.any());
-
- mProvider.dump(null /* fd */, new PrintWriter(new StringWriter()),
- new String[] {"addScore", ANY_NETWORK_SPECIFIC_STRING});
- verify(mNetworkScoreManager).updateScores(Mockito.any());
-
- // We don't update the platform with the any bssid score, but we do store it.
- ScoredNetwork score = mStorage.get(ANY_NETWORK.networkKey);
- assertNotNull(score);
-
- assertEquals(ANY_NETWORK_SPECIFIC.networkKey, score.networkKey);
- assertEquals(ANY_NETWORK_SPECIFIC.meteredHint, score.meteredHint);
- assertEquals(
- ANY_NETWORK_SPECIFIC.attributes.getBoolean(
- ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL),
- score.attributes.getBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL));
- assertEquals("Network curve does not match", ANY_NETWORK_SPECIFIC_CURVE, score.rssiCurve);
- assertNull(
- "Badge curve should not be set.",
- (RssiCurve) score.attributes.getParcelable(
- ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE));
-
- }
-
- private RecommendationResult verifyAndCaptureResult(
- RecommendationRequest request) {
- mProvider.onRequestRecommendation(request, mCallback);
-
- ArgumentCaptor<RecommendationResult> resultCaptor =
- ArgumentCaptor.forClass(RecommendationResult.class);
- verify(mCallback).onResult(resultCaptor.capture());
-
- return resultCaptor.getValue();
- }
-
- private ScoredNetwork[] verifyAndCaptureScoredNetworks() {
- ArgumentCaptor<ScoredNetwork[]> resultCaptor = ArgumentCaptor.forClass(
- ScoredNetwork[].class);
- verify(mNetworkScoreManager).updateScores(resultCaptor.capture());
- return resultCaptor.getValue();
- }
-}