Code cleanup on EthernetNetworkFactoryTest

Code cleanup on EthernetNetworkFactoryTest.

Bug: 210485380
Test: atest EthernetServiceTests:
com.android.server.ethernet.EthernetNetworkFactoryTest

Change-Id: I38c568d0760e4273f1ca8540bac268f07876b67f
This commit is contained in:
James Mattis
2021-12-31 15:54:23 -08:00
parent 54e3aebb95
commit 18ed8f6680

View File

@@ -64,11 +64,11 @@ import org.mockito.MockitoAnnotations;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class EthernetNetworkFactoryTest {
private TestLooper mLooper = new TestLooper();
private static final String TEST_IFACE = "test123";
private final TestLooper mLooper = new TestLooper();
private Handler mHandler;
private EthernetNetworkFactory mNetFactory = null;
private IpClientCallbacks mIpClientCallbacks;
private int mNetworkRequestCount = 0;
@Mock private Context mContext;
@Mock private Resources mResources;
@Mock private EthernetNetworkFactory.Dependencies mDeps;
@@ -79,10 +79,7 @@ public class EthernetNetworkFactoryTest {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mHandler = new Handler(mLooper.getLooper());
mNetworkRequestCount = 0;
mNetFactory = new EthernetNetworkFactory(mHandler, mContext, createDefaultFilterCaps(),
mDeps);
@@ -129,10 +126,24 @@ public class EthernetNetworkFactoryTest {
}).when(mIpClient).shutdown();
}
private void triggerOnProvisioningSuccess() {
mIpClientCallbacks.onProvisioningSuccess(new LinkProperties());
mLooper.dispatchAll();
}
private void triggerOnProvisioningFailure() {
mIpClientCallbacks.onProvisioningFailure(new LinkProperties());
mLooper.dispatchAll();
}
private void triggerOnReachabilityLost() {
mIpClientCallbacks.onReachabilityLost("ReachabilityLost");
mLooper.dispatchAll();
}
private void setupContext() {
when(mContext.getResources()).thenReturn(mResources);
when(mResources.getString(R.string.config_ethernet_tcp_buffers)).thenReturn(
"524288,1048576,3145728,524288,1048576,2097152");
when(mResources.getString(R.string.config_ethernet_tcp_buffers)).thenReturn("");
}
@After
@@ -184,8 +195,7 @@ public class EthernetNetworkFactoryTest {
mNetFactory.addInterface(iface, iface, createInterfaceCapsBuilder(transportType).build(),
createDefaultIpConfig());
assertTrue(mNetFactory.updateInterfaceLinkState(iface, true));
verify(mDeps).makeIpClient(any(Context.class), anyString(), any());
verify(mIpClient).startProvisioning(any());
verifyStart();
clearInvocations(mDeps);
clearInvocations(mIpClient);
}
@@ -197,18 +207,23 @@ public class EthernetNetworkFactoryTest {
ConnectivityManager.TYPE_ETHERNET);
}
private void createVerifyAndRemoveProvisionedInterface(final int transportType,
final int expectedLegacyType) throws Exception {
createAndVerifyProvisionedInterface(TEST_IFACE, transportType,
expectedLegacyType);
mNetFactory.removeInterface(TEST_IFACE);
}
private void createAndVerifyProvisionedInterface(
@NonNull final String iface, final int transportType, final int expectedLegacyType)
throws Exception {
createInterfaceUndergoingProvisioning(iface, transportType);
mIpClientCallbacks.onProvisioningSuccess(new LinkProperties());
mLooper.dispatchAll();
triggerOnProvisioningSuccess();
// provisioning succeeded, verify that the network agent is created, registered, marked
// as connected and legacy type are correctly set.
verify(mDeps).makeEthernetNetworkAgent(any(), any(), any(), any(),
argThat(x -> x.getLegacyType() == expectedLegacyType), any(), any());
verify(mNetworkAgent).register();
verify(mNetworkAgent).markConnected();
verifyNetworkAgentRegistersAndConnects();
clearInvocations(mDeps);
clearInvocations(mNetworkAgent);
}
@@ -228,8 +243,7 @@ public class EthernetNetworkFactoryTest {
verify(mNetworkAgent, never()).register();
mNetFactory.releaseNetworkFor(createDefaultRequest());
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
verifyStop();
clearInvocations(mIpClient);
clearInvocations(mNetworkAgent);
@@ -237,7 +251,7 @@ public class EthernetNetworkFactoryTest {
@Test
public void testAcceptRequest() throws Exception {
createInterfaceUndergoingProvisioning("eth0");
createInterfaceUndergoingProvisioning(TEST_IFACE);
assertTrue(mNetFactory.acceptRequest(createDefaultRequest()));
NetworkRequest wifiRequest = createDefaultRequestBuilder()
@@ -248,27 +262,23 @@ public class EthernetNetworkFactoryTest {
@Test
public void testUpdateInterfaceLinkStateForActiveProvisioningInterface() throws Exception {
String iface = "eth0";
createInterfaceUndergoingProvisioning(iface);
createInterfaceUndergoingProvisioning(TEST_IFACE);
// verify that the IpClient gets shut down when interface state changes to down.
assertTrue(mNetFactory.updateInterfaceLinkState(iface, false));
assertTrue(mNetFactory.updateInterfaceLinkState(TEST_IFACE, false));
verify(mIpClient).shutdown();
}
@Test
public void testUpdateInterfaceLinkStateForProvisionedInterface() throws Exception {
String iface = "eth0";
createAndVerifyProvisionedInterface(iface);
assertTrue(mNetFactory.updateInterfaceLinkState(iface, false));
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
createAndVerifyProvisionedInterface(TEST_IFACE);
assertTrue(mNetFactory.updateInterfaceLinkState(TEST_IFACE, false));
verifyStop();
}
@Test
public void testUpdateInterfaceLinkStateForUnprovisionedInterface() throws Exception {
String iface = "eth0";
createUnprovisionedInterface(iface);
assertTrue(mNetFactory.updateInterfaceLinkState(iface, false));
createUnprovisionedInterface(TEST_IFACE);
assertTrue(mNetFactory.updateInterfaceLinkState(TEST_IFACE, false));
// There should not be an active IPClient or NetworkAgent.
verify(mDeps, never()).makeIpClient(any(), any(), any());
verify(mDeps, never())
@@ -284,75 +294,64 @@ public class EthernetNetworkFactoryTest {
@Test
public void testNeedNetworkForOnProvisionedInterface() throws Exception {
createAndVerifyProvisionedInterface("eth0");
createAndVerifyProvisionedInterface(TEST_IFACE);
mNetFactory.needNetworkFor(createDefaultRequest());
verify(mIpClient, never()).startProvisioning(any());
}
@Test
public void testNeedNetworkForOnUnprovisionedInterface() throws Exception {
createUnprovisionedInterface("eth0");
createUnprovisionedInterface(TEST_IFACE);
mNetFactory.needNetworkFor(createDefaultRequest());
verify(mIpClient).startProvisioning(any());
mIpClientCallbacks.onProvisioningSuccess(new LinkProperties());
mLooper.dispatchAll();
verify(mNetworkAgent).register();
verify(mNetworkAgent).markConnected();
triggerOnProvisioningSuccess();
verifyNetworkAgentRegistersAndConnects();
}
@Test
public void testNeedNetworkForOnInterfaceUndergoingProvisioning() throws Exception {
createInterfaceUndergoingProvisioning("eth0");
createInterfaceUndergoingProvisioning(TEST_IFACE);
mNetFactory.needNetworkFor(createDefaultRequest());
verify(mIpClient, never()).startProvisioning(any());
mIpClientCallbacks.onProvisioningSuccess(new LinkProperties());
mLooper.dispatchAll();
verify(mNetworkAgent).register();
verify(mNetworkAgent).markConnected();
triggerOnProvisioningSuccess();
verifyNetworkAgentRegistersAndConnects();
}
@Test
public void testProvisioningLoss() throws Exception {
String iface = "eth0";
when(mDeps.getNetworkInterfaceByName(iface)).thenReturn(mInterfaceParams);
createAndVerifyProvisionedInterface(iface);
when(mDeps.getNetworkInterfaceByName(TEST_IFACE)).thenReturn(mInterfaceParams);
createAndVerifyProvisionedInterface(TEST_IFACE);
mIpClientCallbacks.onProvisioningFailure(new LinkProperties());
mLooper.dispatchAll();
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
triggerOnProvisioningFailure();
verifyStop();
// provisioning loss should trigger a retry, since the interface is still there
verify(mIpClient).startProvisioning(any());
}
@Test
public void testProvisioningLossForDisappearedInterface() throws Exception {
String iface = "eth0";
// mocked method returns null by default, but just to be explicit in the test:
when(mDeps.getNetworkInterfaceByName(eq(iface))).thenReturn(null);
when(mDeps.getNetworkInterfaceByName(eq(TEST_IFACE))).thenReturn(null);
createAndVerifyProvisionedInterface(iface);
mIpClientCallbacks.onProvisioningFailure(new LinkProperties());
mLooper.dispatchAll();
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
createAndVerifyProvisionedInterface(TEST_IFACE);
triggerOnProvisioningFailure();
verifyStop();
// the interface disappeared and getNetworkInterfaceByName returns null, we should not retry
verify(mIpClient, never()).startProvisioning(any());
}
@Test
public void testIpClientIsNotStartedWhenLinkIsDown() throws Exception {
String iface = "eth0";
createUnprovisionedInterface(iface);
mNetFactory.updateInterfaceLinkState(iface, false);
createUnprovisionedInterface(TEST_IFACE);
mNetFactory.updateInterfaceLinkState(TEST_IFACE, false);
mNetFactory.needNetworkFor(createDefaultRequest());
NetworkRequest specificNetRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
.setNetworkSpecifier(new EthernetNetworkSpecifier(iface))
.setNetworkSpecifier(new EthernetNetworkSpecifier(TEST_IFACE))
.build();
mNetFactory.needNetworkFor(specificNetRequest);
@@ -363,7 +362,7 @@ public class EthernetNetworkFactoryTest {
@Test
public void testLinkPropertiesChanged() throws Exception {
createAndVerifyProvisionedInterface("eth0");
createAndVerifyProvisionedInterface(TEST_IFACE);
LinkProperties lp = new LinkProperties();
mIpClientCallbacks.onLinkPropertiesChange(lp);
@@ -373,30 +372,26 @@ public class EthernetNetworkFactoryTest {
@Test
public void testNetworkUnwanted() throws Exception {
createAndVerifyProvisionedInterface("eth0");
createAndVerifyProvisionedInterface(TEST_IFACE);
mNetworkAgent.getCallbacks().onNetworkUnwanted();
mLooper.dispatchAll();
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
verifyStop();
}
@Test
public void testNetworkUnwantedWithStaleNetworkAgent() throws Exception {
String iface = "eth0";
// ensures provisioning is restarted after provisioning loss
when(mDeps.getNetworkInterfaceByName(iface)).thenReturn(mInterfaceParams);
createAndVerifyProvisionedInterface(iface);
when(mDeps.getNetworkInterfaceByName(TEST_IFACE)).thenReturn(mInterfaceParams);
createAndVerifyProvisionedInterface(TEST_IFACE);
EthernetNetworkAgent.Callbacks oldCbs = mNetworkAgent.getCallbacks();
// replace network agent in EthernetNetworkFactory
// Loss of provisioning will restart the ip client and network agent.
mIpClientCallbacks.onProvisioningFailure(new LinkProperties());
mLooper.dispatchAll();
triggerOnProvisioningFailure();
verify(mDeps).makeIpClient(any(), any(), any());
mIpClientCallbacks.onProvisioningSuccess(new LinkProperties());
mLooper.dispatchAll();
triggerOnProvisioningSuccess();
verify(mDeps).makeEthernetNetworkAgent(any(), any(), any(), any(), any(), any(), any());
// verify that unwanted is ignored
@@ -409,45 +404,47 @@ public class EthernetNetworkFactoryTest {
@Test
public void testTransportOverrideIsCorrectlySet() throws Exception {
final String iface = "eth0";
// createProvisionedInterface() has verifications in place for transport override
// functionality which for EthernetNetworkFactory is network score and legacy type mappings.
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_ETHERNET,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_ETHERNET,
ConnectivityManager.TYPE_ETHERNET);
mNetFactory.removeInterface(iface);
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_BLUETOOTH,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_BLUETOOTH,
ConnectivityManager.TYPE_BLUETOOTH);
mNetFactory.removeInterface(iface);
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_WIFI,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_WIFI,
ConnectivityManager.TYPE_WIFI);
mNetFactory.removeInterface(iface);
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_CELLULAR,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_CELLULAR,
ConnectivityManager.TYPE_MOBILE);
mNetFactory.removeInterface(iface);
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_LOWPAN,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_LOWPAN,
ConnectivityManager.TYPE_NONE);
mNetFactory.removeInterface(iface);
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_WIFI_AWARE,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_WIFI_AWARE,
ConnectivityManager.TYPE_NONE);
mNetFactory.removeInterface(iface);
createAndVerifyProvisionedInterface(iface, NetworkCapabilities.TRANSPORT_TEST,
createVerifyAndRemoveProvisionedInterface(NetworkCapabilities.TRANSPORT_TEST,
ConnectivityManager.TYPE_NONE);
mNetFactory.removeInterface(iface);
}
@Test
public void testReachabilityLoss() throws Exception {
String iface = "eth0";
createAndVerifyProvisionedInterface(iface);
createAndVerifyProvisionedInterface(TEST_IFACE);
mIpClientCallbacks.onReachabilityLost("ReachabilityLost");
mLooper.dispatchAll();
triggerOnReachabilityLost();
// Reachability loss should trigger a stop and start, since the interface is still there
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
verifyStop();
verifyStart();
}
private void verifyStart() throws Exception {
verify(mDeps).makeIpClient(any(Context.class), anyString(), any());
verify(mIpClient).startProvisioning(any());
}
private void verifyStop() throws Exception {
verify(mIpClient).shutdown();
verify(mNetworkAgent).unregister();
}
private void verifyNetworkAgentRegistersAndConnects() {
verify(mNetworkAgent).register();
verify(mNetworkAgent).markConnected();
}
}