blob: 813e928118813e72a44bf66f7c254da93965471b [file] [log] [blame]
Hugo Benichi55b5f0f2016-12-07 14:49:55 +09001/*
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.connectivity;
18
19import android.app.Notification;
20import android.app.NotificationManager;
21import android.content.Context;
22import android.content.pm.ApplicationInfo;
23import android.content.pm.PackageManager;
24import android.content.res.Resources;
25import android.net.NetworkCapabilities;
26import android.net.NetworkInfo;
27import android.telephony.TelephonyManager;
28import android.test.suitebuilder.annotation.SmallTest;
29import com.android.server.connectivity.NetworkNotificationManager.NotificationType;
30import java.util.ArrayList;
31import java.util.Arrays;
32import java.util.Collections;
33import java.util.List;
34import junit.framework.TestCase;
35import org.mockito.ArgumentCaptor;
36import org.mockito.Mock;
37import org.mockito.Mockito;
38import org.mockito.MockitoAnnotations;
39
40import static com.android.server.connectivity.NetworkNotificationManager.NotificationType.*;
41import static org.mockito.Mockito.any;
42import static org.mockito.Mockito.anyInt;
43import static org.mockito.Mockito.eq;
44import static org.mockito.Mockito.never;
45import static org.mockito.Mockito.times;
46import static org.mockito.Mockito.verify;
47import static org.mockito.Mockito.when;
48
49public class NetworkNotificationManagerTest extends TestCase {
50
51 static final String NOTIFICATION_ID = NetworkNotificationManager.NOTIFICATION_ID;
52
53 static final NetworkCapabilities CELL_CAPABILITIES = new NetworkCapabilities();
54 static final NetworkCapabilities WIFI_CAPABILITIES = new NetworkCapabilities();
55 static {
56 CELL_CAPABILITIES.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
57 CELL_CAPABILITIES.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
58
59 WIFI_CAPABILITIES.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
60 WIFI_CAPABILITIES.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
61 }
62
63 @Mock Context mCtx;
64 @Mock Resources mResources;
65 @Mock PackageManager mPm;
66 @Mock TelephonyManager mTelephonyManager;
67 @Mock NotificationManager mNotificationManager;
68 @Mock NetworkAgentInfo mWifiNai;
69 @Mock NetworkAgentInfo mCellNai;
70 @Mock NetworkInfo mNetworkInfo;
71 ArgumentCaptor<Notification> mCaptor;
72
73 NetworkNotificationManager mManager;
74
75 public void setUp() {
76 MockitoAnnotations.initMocks(this);
77 mCaptor = ArgumentCaptor.forClass(Notification.class);
78 mWifiNai.networkCapabilities = WIFI_CAPABILITIES;
79 mWifiNai.networkInfo = mNetworkInfo;
80 mCellNai.networkCapabilities = CELL_CAPABILITIES;
81 mCellNai.networkInfo = mNetworkInfo;
82 when(mCtx.getResources()).thenReturn(mResources);
83 when(mCtx.getPackageManager()).thenReturn(mPm);
84 when(mCtx.getApplicationInfo()).thenReturn(new ApplicationInfo());
85 when(mResources.getColor(anyInt(), any())).thenReturn(0xFF607D8B);
86
87 mManager = new NetworkNotificationManager(mCtx, mTelephonyManager, mNotificationManager);
88 }
89
90 @SmallTest
91 public void testNotificationsShownAndCleared() {
92 final int NETWORK_ID_BASE = 100;
93 List<NotificationType> types = Arrays.asList(NotificationType.values());
94 List<Integer> ids = new ArrayList<>(types.size());
95 for (int i = 0; i < ids.size(); i++) {
96 ids.add(NETWORK_ID_BASE + i);
97 }
98 Collections.shuffle(ids);
99 Collections.shuffle(types);
100
101 for (int i = 0; i < ids.size(); i++) {
102 mManager.showNotification(ids.get(i), types.get(i), mWifiNai, mCellNai, null, false);
103 }
104
105 Collections.shuffle(ids);
106 for (int i = 0; i < ids.size(); i++) {
107 mManager.clearNotification(ids.get(i));
108 }
109
110 for (int i = 0; i < ids.size(); i++) {
111 final int expectedId = NETWORK_ID_BASE + i;
112 verify(mNotificationManager, times(1))
113 .notifyAsUser(eq(NOTIFICATION_ID), eq(expectedId), any(), any());
114 verify(mNotificationManager, times(1))
115 .cancelAsUser(eq(NOTIFICATION_ID), eq(expectedId), any());
116 }
117 }
118
119 @SmallTest
120 public void testNoInternetNotificationsNotShownForCellular() {
121 mManager.showNotification(100, NO_INTERNET, mCellNai, mWifiNai, null, false);
122 mManager.showNotification(101, LOST_INTERNET, mCellNai, mWifiNai, null, false);
123
124 verify(mNotificationManager, never()).notifyAsUser(any(), anyInt(), any(), any());
125
126 mManager.showNotification(102, NO_INTERNET, mWifiNai, mCellNai, null, false);
127
128 verify(mNotificationManager, times(1))
129 .notifyAsUser(eq(NOTIFICATION_ID), eq(102), any(), any());
130 }
131
132 @SmallTest
133 public void testNotificationsNotShownIfNoInternetCapability() {
134 mWifiNai.networkCapabilities = new NetworkCapabilities();
135 mWifiNai.networkCapabilities .addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
136 mManager.showNotification(102, NO_INTERNET, mWifiNai, mCellNai, null, false);
137 mManager.showNotification(103, LOST_INTERNET, mWifiNai, mCellNai, null, false);
138 mManager.showNotification(104, NETWORK_SWITCH, mWifiNai, mCellNai, null, false);
139
140 verify(mNotificationManager, never()).notifyAsUser(any(), anyInt(), any(), any());
141 }
142}