blob: 584323e575844fbead809ca58570f2368716adf4 [file] [log] [blame]
package com.android.clockwork.connectivity;
import android.app.AlarmManager;
import android.content.Intent;
import com.android.clockwork.bluetooth.WearBluetoothMediator;
import com.android.clockwork.cellular.WearCellularMediator;
import com.android.clockwork.common.ActivityModeTracker;
import com.android.clockwork.wifi.WearWifiMediator;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
@RunWith(RobolectricTestRunner.class)
public class WearConnectivityControllerTest {
private @Mock AlarmManager mockAlarmManager;
private @Mock WearBluetoothMediator mockBtMediator;
private @Mock WearWifiMediator mockWifiMediator;
private @Mock WearCellularMediator mockCellMediator;
private @Mock WearProxyNetworkAgent mockProxyNetworkAgent;
private @Mock ActivityModeTracker mockActivityModeTracker;
private WearConnectivityController mController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mController = new WearConnectivityController(
RuntimeEnvironment.application,
mockAlarmManager,
mockBtMediator,
mockWifiMediator,
mockCellMediator,
mockProxyNetworkAgent,
mockActivityModeTracker);
verify(mockProxyNetworkAgent).addListener(mController);
verify(mockActivityModeTracker).addListener(mController);
// initial controller state
when(mockProxyNetworkAgent.isProxyConnected()).thenReturn(true);
mController.onBootCompleted();
}
@Test
public void testOnBootCompleted() {
assertTrue(ShadowApplication.getInstance().hasReceiverForIntent(
new Intent(WearConnectivityController.ACTION_PROXY_STATUS_CHANGE)));
verify(mockWifiMediator).onBootCompleted(true);
verify(mockCellMediator).onBootCompleted(true);
}
@Test
public void testProxyConnectionStateForwardingWithDelay() {
reset(mockAlarmManager, mockWifiMediator, mockCellMediator);
when(mockProxyNetworkAgent.isProxyConnected()).thenReturn(false);
mController.onProxyConnectionChange(false);
verify(mockAlarmManager).cancel(mController.notifyProxyStatusChangeIntent);
verify(mockAlarmManager).setWindow(
anyInt(), anyLong(), anyLong(), eq(mController.notifyProxyStatusChangeIntent));
verifyNoMoreInteractions(mockWifiMediator);
verifyNoMoreInteractions(mockCellMediator);
reset(mockAlarmManager, mockWifiMediator, mockCellMediator);
when(mockProxyNetworkAgent.isProxyConnected()).thenReturn(true);
mController.onProxyConnectionChange(true);
verify(mockAlarmManager).cancel(mController.notifyProxyStatusChangeIntent);
verifyNoMoreInteractions(mockAlarmManager);
verify(mockWifiMediator).updateProxyConnected(true);
verify(mockCellMediator).updateProxyConnected(true);
}
@Test
public void testProxyConnectionStateForwardingWithoutDelay() {
mController.setBluetoothStateChangeDelay(0);
when(mockProxyNetworkAgent.isProxyConnected()).thenReturn(false);
mController.onProxyConnectionChange(false);
verify(mockWifiMediator).updateProxyConnected(false);
verify(mockCellMediator).updateProxyConnected(false);
reset(mockWifiMediator, mockCellMediator);
when(mockProxyNetworkAgent.isProxyConnected()).thenReturn(true);
mController.onProxyConnectionChange(true);
verify(mockWifiMediator).updateProxyConnected(true);
verify(mockCellMediator).updateProxyConnected(true);
}
@Test
public void testNetworkRequestForwarding() {
mController.onWifiRequestsChanged(1);
mController.onCellularRequestsChanged(2);
mController.onHighBandwidthRequestsChanged(3);
mController.onUnmeteredRequestsChanged(4);
verify(mockWifiMediator).updateNumWifiRequests(1);
verify(mockWifiMediator).updateNumHighBandwidthRequests(3);
verify(mockWifiMediator).updateNumUnmeteredRequests(4);
verify(mockCellMediator).updateNumCellularRequests(2);
verify(mockCellMediator).updateNumHighBandwidthRequests(3);
}
@Test
public void testActivityModeChanges() {
reset(mockWifiMediator, mockCellMediator, mockBtMediator);
when(mockActivityModeTracker.affectsBluetooth()).thenReturn(false);
when(mockActivityModeTracker.affectsWifi()).thenReturn(false);
when(mockActivityModeTracker.affectsCellular()).thenReturn(false);
mController.onActivityModeChanged(true);
verifyNoMoreInteractions(mockWifiMediator);
verifyNoMoreInteractions(mockCellMediator);
verifyNoMoreInteractions(mockBtMediator);
// TODO set up various radio matrix/configurations and test that they get toggled
}
}