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