blob: b9b86b0e8ef220cd6f51d02015623d8d27a432e6 [file] [log] [blame]
package com.android.clockwork.connectivity;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class WearProxyNetworkAgentTest {
@Mock ConnectivityManager mockConnectivityMgr;
@Mock Network mockProxyNetwork;
@Mock NetworkInfo mockProxyNetworkInfo;
@Mock WearProxyNetworkAgent.Listener mockListener;
WearProxyNetworkAgent mAgent;
ConnectivityManager.NetworkCallback mNetworkCallback;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mockConnectivityMgr.getAllNetworks()).thenReturn(new Network[] {mockProxyNetwork});
when(mockConnectivityMgr.getNetworkInfo(mockProxyNetwork)).thenReturn(mockProxyNetworkInfo);
// default to proxy connected; individual tests may override this
when(mockProxyNetworkInfo.isConnected()).thenReturn(true);
when(mockProxyNetworkInfo.getType()).thenReturn(ConnectivityManager.TYPE_PROXY);
mAgent = new WearProxyNetworkAgent(mockConnectivityMgr);
mAgent.addListener(mockListener);
ArgumentCaptor<ConnectivityManager.NetworkCallback> networkCallbackCaptor =
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
verify(mockConnectivityMgr).requestNetwork(
any(NetworkRequest.class), networkCallbackCaptor.capture());
mNetworkCallback = networkCallbackCaptor.getValue();
}
@Test
public void testNotifyProxyChanges() {
// the default setup starts off as connected
Assert.assertTrue(mAgent.isProxyConnected());
mNetworkCallback.onLost(mockProxyNetwork);
verify(mockListener).onProxyConnectionChange(false);
Assert.assertFalse(mAgent.isProxyConnected());
reset(mockListener);
mNetworkCallback.onAvailable(mockProxyNetwork);
verify(mockListener).onProxyConnectionChange(true);
Assert.assertTrue(mAgent.isProxyConnected());
}
@Test
public void testConstructorWithDifferentTransportConnected() {
when(mockProxyNetworkInfo.isConnected()).thenReturn(true);
when(mockProxyNetworkInfo.getType()).thenReturn(ConnectivityManager.TYPE_WIFI);
WearProxyNetworkAgent agent = new WearProxyNetworkAgent(mockConnectivityMgr);
Assert.assertFalse(agent.isProxyConnected());
}
@Test
public void testConstructorWithProxyDisconnected() {
when(mockProxyNetworkInfo.isConnected()).thenReturn(false);
when(mockProxyNetworkInfo.getType()).thenReturn(ConnectivityManager.TYPE_PROXY);
WearProxyNetworkAgent agent = new WearProxyNetworkAgent(mockConnectivityMgr);
Assert.assertFalse(agent.isProxyConnected());
}
@Test
public void testConstructorWithNoNetworks() {
when(mockConnectivityMgr.getAllNetworks()).thenReturn(new Network[0]);
when(mockConnectivityMgr.getNetworkInfo(mockProxyNetwork)).thenReturn(null);
WearProxyNetworkAgent agent = new WearProxyNetworkAgent(mockConnectivityMgr);
Assert.assertFalse(agent.isProxyConnected());
}
}