summaryrefslogtreecommitdiff
path: root/robotests/src/com/android/networkrecommendation/notify/WifiNotificationControllerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'robotests/src/com/android/networkrecommendation/notify/WifiNotificationControllerTest.java')
-rw-r--r--robotests/src/com/android/networkrecommendation/notify/WifiNotificationControllerTest.java469
1 files changed, 0 insertions, 469 deletions
diff --git a/robotests/src/com/android/networkrecommendation/notify/WifiNotificationControllerTest.java b/robotests/src/com/android/networkrecommendation/notify/WifiNotificationControllerTest.java
deleted file mode 100644
index 3f4828f..0000000
--- a/robotests/src/com/android/networkrecommendation/notify/WifiNotificationControllerTest.java
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * Copyright (C) 2017 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.notify;
-
-import static com.android.networkrecommendation.PlatformTestObjectFactory.createOpenNetworkScanResult;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.ContentResolver;
-import android.content.Intent;
-import android.net.NetworkInfo;
-import android.net.NetworkInfo.DetailedState;
-import android.net.NetworkInfo.State;
-import android.net.RecommendationRequest;
-import android.net.RecommendationResult;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
-import android.os.Handler;
-import android.provider.Settings;
-import com.android.networkrecommendation.BroadcastIntentTestHelper;
-import com.android.networkrecommendation.SynchronousNetworkRecommendationProvider;
-import com.android.networkrecommendation.TestData;
-import com.android.networkrecommendation.util.RoboCompatUtil;
-import com.google.common.collect.Lists;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.List;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-import org.robolectric.shadows.ShadowLooper;
-import org.robolectric.shadows.ShadowSettings;
-
-/**
- * Instrumentation tests for {@link com.android.networkrecommendation.WifiNotificationController}.
- */
-@RunWith(RobolectricTestRunner.class)
-@Config(manifest = "packages/services/NetworkRecommendation/AndroidManifest.xml", sdk = 23)
-public class WifiNotificationControllerTest {
-
- @Mock private WifiManager mWifiManager;
- @Mock private NotificationManager mNotificationManager;
- @Mock private WifiNotificationHelper mWifiNotificationHelper;
- @Mock private SynchronousNetworkRecommendationProvider mNetworkRecommendationProvider;
- @Mock private NetworkInfo mNetworkInfo;
- @Mock private RoboCompatUtil mRoboCompatUtil;
- @Captor private ArgumentCaptor<RecommendationRequest> mRecommendationRequestCaptor;
- private ContentResolver mContentResolver;
- private Handler mHandler;
- private WifiNotificationController mWifiNotificationController;
- private BroadcastIntentTestHelper mBroadcastIntentTestHelper;
-
- /** Initialize objects before each test run. */
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- // Needed for the NotificationEnabledSettingObserver.
- mContentResolver = RuntimeEnvironment.application.getContentResolver();
- ShadowSettings.ShadowGlobal.putInt(
- mContentResolver, Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 1);
- mHandler = new Handler(ShadowLooper.getMainLooper());
-
- RoboCompatUtil.setInstanceForTesting(mRoboCompatUtil);
-
- mWifiNotificationController =
- new WifiNotificationController(
- RuntimeEnvironment.application,
- mContentResolver,
- mHandler,
- mNetworkRecommendationProvider,
- mWifiManager,
- mNotificationManager,
- mWifiNotificationHelper);
- mWifiNotificationController.start();
-
- when(mNetworkInfo.getState()).thenReturn(State.UNKNOWN);
- mBroadcastIntentTestHelper = new BroadcastIntentTestHelper(RuntimeEnvironment.application);
- }
-
- private void setOpenAccessPoints() {
- List<ScanResult> scanResults =
- Lists.newArrayList(
- createOpenNetworkScanResult(TestData.UNQUOTED_SSID_1, TestData.BSSID_1),
- createOpenNetworkScanResult(TestData.UNQUOTED_SSID_2, TestData.BSSID_2),
- createOpenNetworkScanResult(TestData.UNQUOTED_SSID_3, TestData.BSSID_3));
- assertFalse(scanResults.isEmpty());
- when(mWifiManager.getScanResults()).thenReturn(scanResults);
- }
-
- private static WifiConfiguration createFakeConfig() {
- WifiConfiguration config = new WifiConfiguration();
- config.SSID = TestData.SSID_1;
- config.BSSID = TestData.BSSID_1;
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
- return config;
- }
-
- /**
- * When the NetworkRecommendationService associated with this WifiNotificationController is
- * unbound, this WifiWakeupController should no longer function.
- */
- @Test
- public void wifiNotificationControllerStopped() {
- mWifiNotificationController.stop();
-
- assertFalse(
- ShadowApplication.getInstance()
- .hasReceiverForIntent(
- new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)));
- }
-
- /** Verifies that a notification is displayed (and retracted) given system events. */
- @Test
- public void verifyNotificationDisplayedWhenNetworkRecommended() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- // The notification should not be displayed after only two scan results.
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mNotificationManager, never())
- .notify(anyString(), anyInt(), any(Notification.class));
-
- verify(mWifiManager, times(2)).getScanResults();
-
- // Changing to and from "SCANNING" state should not affect the counter.
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.SCANNING);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
-
- verify(mNotificationManager, never())
- .notify(anyString(), anyInt(), any(Notification.class));
-
- // The third scan result notification will trigger the notification.
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
-
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
- verify(mNotificationManager, never()).cancel(anyString(), anyInt());
- }
-
- /** Verifies that a notification is not displayed for bad networks. */
- @Test
- public void verifyNotificationNotDisplayedWhenNoNetworkRecommended() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- // Recommendation result with no WifiConfiguration returned.
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createDoNotConnectRecommendation());
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mNotificationManager, never())
- .notify(anyString(), anyInt(), any(Notification.class));
- }
-
- /**
- * Verifies the notifications flow (Connect -> connecting -> connected) when user clicks on
- * Connect button.
- */
- @Test
- public void verifyNotificationsFlowOnConnectToNetwork() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- // Send connect intent, should attempt to connect to Wi-Fi
- Intent intent =
- new Intent(WifiNotificationController.ACTION_CONNECT_TO_RECOMMENDED_NETWORK);
- ShadowApplication.getInstance().sendBroadcast(intent);
- verify(mRoboCompatUtil).connectToWifi(any(WifiManager.class), any(WifiConfiguration.class));
- verify(mWifiNotificationHelper).createConnectingNotification(any(WifiConfiguration.class));
-
- // Show connecting notification.
- verify(mNotificationManager, times(2))
- .notify(anyString(), anyInt(), any(Notification.class));
-
- // Verify show connected notification.
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.CONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- verify(mWifiNotificationHelper).createConnectedNotification(any(WifiConfiguration.class));
- verify(mNotificationManager, times(3))
- .notify(anyString(), anyInt(), any(Notification.class));
-
- // Dismissed the connected notification.
- ShadowLooper.runMainLooperToNextTask();
- verify(mNotificationManager).cancel(anyString(), anyInt());
- }
-
- /** Verifies the Failure to Connect notification after attempting to connect. */
- @Test
- public void verifyNotificationsFlowOnFailedToConnectToNetwork() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- // Send connect intent, should attempt to connect to Wi-Fi
- Intent intent =
- new Intent(WifiNotificationController.ACTION_CONNECT_TO_RECOMMENDED_NETWORK);
- ShadowApplication.getInstance().sendBroadcast(intent);
- verify(mRoboCompatUtil).connectToWifi(any(WifiManager.class), any(WifiConfiguration.class));
- verify(mWifiNotificationHelper).createConnectingNotification(any(WifiConfiguration.class));
-
- // Show connecting notification.
- verify(mNotificationManager, times(2))
- .notify(anyString(), anyInt(), any(Notification.class));
-
- // Show failed to connect notification.
- ShadowLooper.runMainLooperToNextTask();
- verify(mWifiNotificationHelper).createFailedToConnectNotification();
-
- // Dismissed the cancel notification.
- ShadowLooper.runMainLooperToNextTask();
- verify(mNotificationManager).cancel(anyString(), anyInt());
- }
-
- /** Verifies the flow where notification is dismissed. */
- @Test
- public void verifyNotificationsFlowOnDismissMainNotification() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
-
- // Show main notification
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- // Send dismiss intent
- Intent intent = new Intent(WifiNotificationController.ACTION_NOTIFICATION_DELETED);
- ShadowApplication.getInstance().sendBroadcast(intent);
- }
-
- /** Verifies the flow where "Settings" button on notification is clicked. */
- @Test
- public void verifyNotificationsFlowOnClickSettingsFromMainNotification() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
-
- // Show main notification
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- // Send click settings intent
- Intent intent = new Intent(WifiNotificationController.ACTION_PICK_WIFI_NETWORK);
- ShadowApplication.getInstance().sendBroadcast(intent);
- verify(mNotificationManager).cancel(anyString(), anyInt());
- }
-
- /** Verifies the flow when notification is reset on captive portal check. */
- @Test
- public void verifyNotificationsFlowResetNotificationOnCaptivePortalCheck() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
-
- // Show main notification
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.CAPTIVE_PORTAL_CHECK);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- verify(mNotificationManager).cancel(anyString(), anyInt());
- }
-
- /** Verifies saved networks are skipped when getting network recommendations */
- @Test
- public void verifyNotificationsFlowSkipSavedNetworks() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
-
- // First scan result and saved WifiConfiguration should be equal
- when(mWifiManager.getScanResults())
- .thenReturn(
- Lists.newArrayList(
- createOpenNetworkScanResult(
- TestData.UNQUOTED_SSID_1, TestData.BSSID_1)));
- when(mWifiManager.getConfiguredNetworks())
- .thenReturn(Lists.newArrayList(createFakeConfig()));
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
-
- verify(mNetworkRecommendationProvider)
- .requestRecommendation(mRecommendationRequestCaptor.capture());
-
- assertEquals(0, mRecommendationRequestCaptor.getValue().getScanResults().length);
- }
-
- /**
- * Test that recommendations are not requested for new scan results when user has clicked on
- * connect and a notification is showing.
- */
- @Test
- public void verifyNotificationsFlowSkipNewScanResultsWhenConnectionAttempted()
- throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mNetworkRecommendationProvider, times(3)).requestRecommendation(any());
-
- // Show main notification
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- // Send connect intent, should attempt to connect to Wi-Fi
- Intent intent =
- new Intent(WifiNotificationController.ACTION_CONNECT_TO_RECOMMENDED_NETWORK);
- ShadowApplication.getInstance().sendBroadcast(intent);
- verify(mRoboCompatUtil).connectToWifi(any(WifiManager.class), any(WifiConfiguration.class));
- verify(mWifiNotificationHelper).createConnectingNotification(any(WifiConfiguration.class));
- verify(mNotificationManager, times(2))
- .notify(anyString(), anyInt(), any(Notification.class));
-
- // No new recommendation requests made
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mNetworkRecommendationProvider, times(3)).requestRecommendation(any());
- }
-
- /** Test that the main notification updates when new scan results are available. */
- @Test
- public void verifyNotificationsFlowUpdateMainNotificationOnNewScanResults() throws Exception {
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
-
- mBroadcastIntentTestHelper.sendWifiStateChanged();
- when(mNetworkInfo.getDetailedState()).thenReturn(DetailedState.DISCONNECTED);
- mBroadcastIntentTestHelper.sendNetworkStateChanged(mNetworkInfo);
- setOpenAccessPoints();
-
- when(mNetworkRecommendationProvider.requestRecommendation(any(RecommendationRequest.class)))
- .thenReturn(RecommendationResult.createConnectRecommendation(createFakeConfig()));
-
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mNetworkRecommendationProvider, times(3)).requestRecommendation(any());
-
- // Show main notification
- verify(mWifiNotificationHelper).createMainNotification(any(WifiConfiguration.class));
- verify(mNotificationManager).notify(anyString(), anyInt(), any(Notification.class));
-
- // Update main notification.
- mBroadcastIntentTestHelper.sendScanResultsAvailable();
- verify(mNetworkRecommendationProvider, times(4)).requestRecommendation(any());
- verify(mNotificationManager, times(2))
- .notify(anyString(), anyInt(), any(Notification.class));
- }
-
- /** Test dump() does not crash. */
- @Test
- public void testDump() {
- StringWriter stringWriter = new StringWriter();
- mWifiNotificationController.dump(
- new FileDescriptor(), new PrintWriter(stringWriter), new String[0]);
- }
-}