blob: 21c2de79d68b7c04413acf0c7389a507f4ee9b6e [file] [log] [blame]
Hugo Benichi74264322016-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
Hugo Benichi74264322016-12-07 14:49:55 +090051 static final NetworkCapabilities CELL_CAPABILITIES = new NetworkCapabilities();
52 static final NetworkCapabilities WIFI_CAPABILITIES = new NetworkCapabilities();
53 static {
54 CELL_CAPABILITIES.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
55 CELL_CAPABILITIES.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
56
57 WIFI_CAPABILITIES.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
58 WIFI_CAPABILITIES.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
59 }
60
61 @Mock Context mCtx;
62 @Mock Resources mResources;
63 @Mock PackageManager mPm;
64 @Mock TelephonyManager mTelephonyManager;
65 @Mock NotificationManager mNotificationManager;
66 @Mock NetworkAgentInfo mWifiNai;
67 @Mock NetworkAgentInfo mCellNai;
68 @Mock NetworkInfo mNetworkInfo;
69 ArgumentCaptor<Notification> mCaptor;
70
71 NetworkNotificationManager mManager;
72
73 public void setUp() {
74 MockitoAnnotations.initMocks(this);
75 mCaptor = ArgumentCaptor.forClass(Notification.class);
76 mWifiNai.networkCapabilities = WIFI_CAPABILITIES;
77 mWifiNai.networkInfo = mNetworkInfo;
78 mCellNai.networkCapabilities = CELL_CAPABILITIES;
79 mCellNai.networkInfo = mNetworkInfo;
80 when(mCtx.getResources()).thenReturn(mResources);
81 when(mCtx.getPackageManager()).thenReturn(mPm);
82 when(mCtx.getApplicationInfo()).thenReturn(new ApplicationInfo());
Hugo Benichia5bf8192016-12-20 09:57:43 +090083 when(mNetworkInfo.getExtraInfo()).thenReturn("extra");
Hugo Benichi74264322016-12-07 14:49:55 +090084 when(mResources.getColor(anyInt(), any())).thenReturn(0xFF607D8B);
85
86 mManager = new NetworkNotificationManager(mCtx, mTelephonyManager, mNotificationManager);
87 }
88
89 @SmallTest
90 public void testNotificationsShownAndCleared() {
91 final int NETWORK_ID_BASE = 100;
92 List<NotificationType> types = Arrays.asList(NotificationType.values());
93 List<Integer> ids = new ArrayList<>(types.size());
94 for (int i = 0; i < ids.size(); i++) {
95 ids.add(NETWORK_ID_BASE + i);
96 }
97 Collections.shuffle(ids);
98 Collections.shuffle(types);
99
100 for (int i = 0; i < ids.size(); i++) {
101 mManager.showNotification(ids.get(i), types.get(i), mWifiNai, mCellNai, null, false);
102 }
103
104 Collections.shuffle(ids);
105 for (int i = 0; i < ids.size(); i++) {
106 mManager.clearNotification(ids.get(i));
107 }
108
109 for (int i = 0; i < ids.size(); i++) {
Hugo Benichifb2609d2016-12-08 09:36:52 +0900110 final int id = ids.get(i);
111 final int eventId = types.get(i).eventId;
112 final String tag = NetworkNotificationManager.tagFor(id);
113 verify(mNotificationManager, times(1)).notifyAsUser(eq(tag), eq(eventId), any(), any());
114 verify(mNotificationManager, times(1)).cancelAsUser(eq(tag), eq(eventId), any());
Hugo Benichi74264322016-12-07 14:49:55 +0900115 }
116 }
117
118 @SmallTest
119 public void testNoInternetNotificationsNotShownForCellular() {
120 mManager.showNotification(100, NO_INTERNET, mCellNai, mWifiNai, null, false);
121 mManager.showNotification(101, LOST_INTERNET, mCellNai, mWifiNai, null, false);
122
123 verify(mNotificationManager, never()).notifyAsUser(any(), anyInt(), any(), any());
124
125 mManager.showNotification(102, NO_INTERNET, mWifiNai, mCellNai, null, false);
126
Hugo Benichifb2609d2016-12-08 09:36:52 +0900127 final int eventId = NO_INTERNET.eventId;
128 final String tag = NetworkNotificationManager.tagFor(102);
129 verify(mNotificationManager, times(1)).notifyAsUser(eq(tag), eq(eventId), any(), any());
Hugo Benichi74264322016-12-07 14:49:55 +0900130 }
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}