Snap for 10582811 from 9a43ff80833c660ea5108897b628d9f563aa8360 to mainline-documentsui-release Change-Id: I4ac7c2a45a1cddb1cd72a9bd8953cb1d8782bc01
diff --git a/TEST_MAPPING b/TEST_MAPPING index 3869fc9..46ade58 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING
@@ -7,7 +7,12 @@ "name": "NetworkStackNextTests" }, { - "name": "NetworkStackIntegrationTests" + "name": "NetworkStackIntegrationTests", + "options": [ + { + "exclude-annotation": "com.android.testutils.SkipPresubmit" + } + ] }, { "name": "NetworkStackRootTests" @@ -32,6 +37,11 @@ "name": "NetworkStackRootTests[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk]" } ], + "postsubmit": [ + { + "name": "NetworkStackIntegrationTests" + } + ], "imports": [ { "path": "packages/modules/Connectivity"
diff --git a/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java b/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java index dfc8c1a..246d0d4 100644 --- a/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java +++ b/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java
@@ -218,6 +218,7 @@ import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter; import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo; import com.android.testutils.HandlerUtils; +import com.android.testutils.SkipPresubmit; import com.android.testutils.TapPacketReader; import com.android.testutils.TestableNetworkAgent; import com.android.testutils.TestableNetworkCallback; @@ -4851,6 +4852,8 @@ x -> x.isIpv6Provisioned() && hasIpv6AddressPrefixedWith(x, prefix) && hasRouteTo(x, "2001:db8:1::/64", RTN_UNREACHABLE) + // IPv4 address, IPv6 link-local, two global delegated IPv6 addresses + && x.getLinkAddresses().size() == 4 )); } @@ -4886,8 +4889,9 @@ assertTrue(packet instanceof Dhcp6RebindPacket); } - @Test @SignatureRequiredTest(reason = "Need to mock the DHCP6 renew/rebind alarms") + @SkipPresubmit(reason = "Out of SLO flakiness") + @Test public void testDhcp6Pd_prefixMismatchOnRenew() throws Exception { prepareDhcp6PdRenewTest();
diff --git a/tests/integration/signature/android/net/NetworkStatsIntegrationTest.kt b/tests/integration/signature/android/net/NetworkStatsIntegrationTest.kt index dcc0b1f..0f860a8 100644 --- a/tests/integration/signature/android/net/NetworkStatsIntegrationTest.kt +++ b/tests/integration/signature/android/net/NetworkStatsIntegrationTest.kt
@@ -34,6 +34,7 @@ import com.android.testutils.DevSdkIgnoreRunner import com.android.testutils.PacketBridge import com.android.testutils.RecorderCallback.CallbackEntry.LinkPropertiesChanged +import com.android.testutils.SkipPresubmit import com.android.testutils.TestDnsServer import com.android.testutils.TestHttpServer import com.android.testutils.TestableNetworkCallback @@ -178,6 +179,7 @@ * While the packets are being forwarded to the external interface, the servers will see * the packets originated from the mocked v6 address, and destined to a local v6 address. */ + @SkipPresubmit(reason = "Out of SLO flakiness") @Test fun test464XlatTcpStats() { // Wait for 464Xlat to be ready.
diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java index 19c9e5e..4cf6f34 100644 --- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -90,7 +90,6 @@ import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.times; @@ -578,7 +577,7 @@ return null; }).when(mContext).unregisterReceiver(any()); - resetCallbacks(); + initCallbacks(11 /* interfaceVersion */); setMinDataStallEvaluateInterval(TEST_MIN_STALL_EVALUATE_INTERVAL_MS); setDataStallEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS); @@ -609,12 +608,7 @@ } } - private void resetCallbacks() throws Exception { - resetCallbacks(11); - } - - private void resetCallbacks(int interfaceVersion) throws Exception { - reset(mCallbacks); + private void initCallbacks(int interfaceVersion) throws Exception { try { doReturn(interfaceVersion).when(mCallbacks).getInterfaceVersion(); } catch (RemoteException e) { @@ -1025,7 +1019,6 @@ verify(mContext, times(1)).registerReceiver(receiverCaptor.capture(), argThat(receiver -> ACTION_CONFIGURATION_CHANGED.equals(receiver.getAction(0)))); - resetCallbacks(); // New URLs with partial connectivity doReturn(TEST_HTTPS_OTHER_URL1).when(mResources).getString( R.string.config_captive_portal_https_url); @@ -1039,7 +1032,8 @@ HandlerUtils.waitForIdle(nm.getHandler(), HANDLER_TIMEOUT_MS); verifyNetworkTested(NETWORK_VALIDATION_RESULT_PARTIAL, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP); + NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP, + 1 /* interactions */); verify(mOtherHttpsConnection1, times(1)).getResponseCode(); verify(mOtherHttpConnection1, times(1)).getResponseCode(); } @@ -1311,7 +1305,7 @@ assertTrue(INITIAL_REEVALUATE_DELAY_MS < 2000); verify(mOtherFallbackConnection, timeout(INITIAL_REEVALUATE_DELAY_MS + HANDLER_TIMEOUT_MS)) .getResponseCode(); - verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, TEST_LOGIN_URL); + verifyNetworkTestedPortal(TEST_LOGIN_URL, 1 /* interactions */); } @Test @@ -1403,8 +1397,7 @@ + "'user-portal-url': '" + TEST_LOGIN_URL + "'}"); nm.notifyLinkPropertiesChanged(makeCapportLPs()); - verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, - TEST_LOGIN_URL); + verifyNetworkTestedPortal(TEST_LOGIN_URL, 1 /* interactions */); final ArgumentCaptor<CaptivePortalData> capportCaptor = ArgumentCaptor.forClass( CaptivePortalData.class); verify(mCallbacks).notifyCaptivePortalDataChanged(capportCaptor.capture()); @@ -1435,7 +1428,7 @@ // After notifyNetworkConnected, validation uses the capport API contents notifyNetworkConnected(nm, lp, CELL_METERED_CAPABILITIES); - verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, TEST_LOGIN_URL); + verifyNetworkTestedPortal(TEST_LOGIN_URL, 1 /* interactions */); verify(mHttpConnection, never()).getResponseCode(); verify(mCapportApiConnection).getResponseCode(); @@ -1555,25 +1548,19 @@ NETWORK_VALIDATION_RESULT_VALID, NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS, null); - resetCallbacks(); // Underlying network changed. notifyUnderlyingNetworkChange(nm, nc , List.of(new Network(TEST_NETID))); // The underlying network change should cause a re-validation - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); + verifyNetworkTestedValidFromHttps(1 /* interactions */); - resetCallbacks(); notifyUnderlyingNetworkChange(nm, nc , List.of(new Network(TEST_NETID))); - // Identical networks should not cause revalidation. - verify(mCallbacks, never()).notifyNetworkTestedWithExtras(matchNetworkTestResultParcelable( - NETWORK_VALIDATION_RESULT_VALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS)); + // Identical networks should not cause revalidation. The interaction stays in 1 time which + // is verified in runNetworkTest. + verifyNetworkTestedValidFromHttps(1 /* interactions */); - resetCallbacks(); // Change to another network notifyUnderlyingNetworkChange(nm, nc , List.of(new Network(TEST_NETID2))); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); + verifyNetworkTestedValidFromHttps(2 /* interactions */); } private void notifyUnderlyingNetworkChange(NetworkMonitor nm, NetworkCapabilities nc, @@ -1974,7 +1961,7 @@ @Test public void testNoInternetCapabilityValidated_OlderPlatform() throws Exception { // Before callbacks version 11, NETWORK_VALIDATION_RESULT_SKIPPED is not sent - resetCallbacks(10); + initCallbacks(10); doValidationSkippedTest(CELL_NO_INTERNET_CAPABILITIES, NETWORK_VALIDATION_RESULT_VALID); } @@ -2127,8 +2114,6 @@ // Portal URL should be detection URL. final String redirectUrl = bundle.getString(ConnectivityManager.EXTRA_CAPTIVE_PORTAL_URL); assertEquals(expectedUrl, redirectUrl); - - resetCallbacks(); } @@ -2206,29 +2191,25 @@ wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns6.google", new InetAddress[0])); notifyNetworkConnected(wnm, CELL_NOT_METERED_CAPABILITIES); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); + verifyNetworkTestedValidFromPrivateDns(1 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(1 /* interaction */); // Verify dns query only get v4 address. - resetCallbacks(); mFakeDns.setAnswer("dns4.google", new String[]{"192.0.2.1"}, TYPE_A); wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns4.google", new InetAddress[0])); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID); + verifyNetworkTestedValidFromPrivateDns(2 /* interactions */); // NetworkMonitor will check if the probes has changed or not, if the probes has not - // changed, the callback won't be fired. - verify(mCallbacks, never()).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); + // changed, the callback won't be fired. The interaction stays in 1 time. + verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(1 /* interaction */); // Verify dns query get both v4 and v6 address. - resetCallbacks(); mFakeDns.setAnswer("dns.google", new String[]{"2001:db8::54"}, TYPE_AAAA); mFakeDns.setAnswer("dns.google", new String[]{"192.0.2.3"}, TYPE_A); wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns.google", new InetAddress[0])); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID); - verify(mCallbacks, never()).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); + verifyNetworkTestedValidFromPrivateDns(3 /* interactions */); + // Verify no further interaction. + verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(1 /* interaction */); } @Test @@ -2240,22 +2221,18 @@ WrappedNetworkMonitor wnm = makeCellNotMeteredNetworkMonitor(); wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns.google", new InetAddress[0])); notifyNetworkConnected(wnm, CELL_NOT_METERED_CAPABILITIES); - verifyNetworkTested(VALIDATION_RESULT_INVALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(NETWORK_VALIDATION_PROBE_DNS - | NETWORK_VALIDATION_PROBE_HTTPS)); + verifyNetworkTestedInvalidFromHttps(1 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndHttpsSucceeded(1 /* interaction */); + // Fix DNS and retry, expect validation to succeed. - resetCallbacks(); mFakeDns.setAnswer("dns.google", new String[]{"2001:db8::1"}, TYPE_AAAA); wnm.forceReevaluation(Process.myUid()); // ProbeCompleted should be reset to 0 HandlerUtils.waitForIdle(wnm.getHandler(), HANDLER_TIMEOUT_MS); assertEquals(wnm.getEvaluationState().getProbeCompletedResult(), 0); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); + verifyNetworkTestedValidFromPrivateDns(1 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(1 /* interaction */); } @Test @@ -2267,57 +2244,40 @@ WrappedNetworkMonitor wnm = makeCellNotMeteredNetworkMonitor(); wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns.google", new InetAddress[0])); notifyNetworkConnected(wnm, CELL_NOT_METERED_CAPABILITIES); - verifyNetworkTested(VALIDATION_RESULT_INVALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(NETWORK_VALIDATION_PROBE_DNS - | NETWORK_VALIDATION_PROBE_HTTPS)); + verifyNetworkTestedInvalidFromHttps(1 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndHttpsSucceeded(1 /* interactions */); // Fix DNS and retry, expect validation to succeed. - resetCallbacks(); mFakeDns.setAnswer("dns.google", new String[]{"2001:db8::1"}, TYPE_AAAA); wnm.forceReevaluation(Process.myUid()); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).atLeastOnce()) - .notifyNetworkTestedWithExtras(matchNetworkTestResultParcelable( - NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID)); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); + verifyNetworkTestedValidFromPrivateDns(1 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(1 /* interaction */); // Change configuration to an invalid DNS name, expect validation to fail. - resetCallbacks(); mFakeDns.setAnswer("dns.bad", new String[0], TYPE_A); mFakeDns.setAnswer("dns.bad", new String[0], TYPE_AAAA); wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns.bad", new InetAddress[0])); // Strict mode hostname resolve fail. Expect only notification for evaluation fail. No probe // notification. - verifyNetworkTested(VALIDATION_RESULT_INVALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(NETWORK_VALIDATION_PROBE_DNS - | NETWORK_VALIDATION_PROBE_HTTPS)); + verifyNetworkTestedInvalidFromHttps(2 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndHttpsSucceeded(2 /* interaction */); // Change configuration back to working again, but make private DNS not work. // Expect validation to fail. - resetCallbacks(); mFakeDns.setNonBypassPrivateDnsWorking(false); wnm.notifyPrivateDnsSettingsChanged(new PrivateDnsConfig("dns.google", new InetAddress[0])); - verifyNetworkTested(VALIDATION_RESULT_INVALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); + verifyNetworkTestedInvalidFromHttps(3 /* interactions */); // NetworkMonitor will check if the probes has changed or not, if the probes has not - // changed, the callback won't be fired. - verify(mCallbacks, never()).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(NETWORK_VALIDATION_PROBE_DNS - | NETWORK_VALIDATION_PROBE_HTTPS)); + // changed, the callback won't be fired. No further interaction. + verifyProbeStatusChangedPrivateDnsCompleteAndHttpsSucceeded(2 /* interaction */); // Make private DNS work again. Expect validation to succeed. - resetCallbacks(); mFakeDns.setNonBypassPrivateDnsWorking(true); wnm.forceReevaluation(Process.myUid()); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID); - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)).notifyProbeStatusChanged( - eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); + verifyNetworkTestedValidFromPrivateDns(1 /* interactions */); + verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(1 /* interaction */); } @Test @@ -2423,8 +2383,7 @@ fail("Undefined transport type"); } notifyNetworkConnected(nm, nc); - verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS); + verifyNetworkTestedValidFromHttps(1 /* interactions */); nm.setLastProbeTime(SystemClock.elapsedRealtime() - STALL_EXPECTED_LAST_PROBE_TIME_MS); return nm; } @@ -2633,11 +2592,11 @@ NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP, null /* redirectUrl */); - resetCallbacks(); nm.setAcceptPartialConnectivity(); // Expect to update evaluation result notifications to CS. verifyNetworkTested(NETWORK_VALIDATION_RESULT_PARTIAL | NETWORK_VALIDATION_RESULT_VALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP); + NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP, + 1 /* interactions */); } @Test @@ -2710,7 +2669,6 @@ final NetworkMonitor nm = runValidatedNetworkTest(); // Verify forceReevaluation will not reset the validation result but only probe result until // getting the validation result. - resetCallbacks(); setSslException(mHttpsConnection); setStatus(mHttpConnection, 500); setStatus(mFallbackConnection, 204); @@ -2718,7 +2676,7 @@ // Expect to send HTTP, HTTPs, FALLBACK and evaluation results. verifyNetworkTested(VALIDATION_RESULT_INVALID, NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_FALLBACK, - null /* redirectUrl */); + 1 /* interactions */); HandlerUtils.waitForIdle(nm.getHandler(), HANDLER_TIMEOUT_MS); } @@ -2726,7 +2684,7 @@ public void testNotifyNetwork_NotifyNetworkTestedOldInterfaceVersion() throws Exception { // Use old interface version so notifyNetworkTested is used over // notifyNetworkTestedWithExtras - resetCallbacks(4); + initCallbacks(4); // Trigger Network validation setStatus(mHttpsConnection, 204); @@ -2813,8 +2771,6 @@ setValidProbes(); final NetworkMonitor nm = runValidatedNetworkTest(); - resetCallbacks(); - nm.reportHttpProbeResult(NETWORK_VALIDATION_PROBE_HTTP, CaptivePortalProbeResult.success(1 << PROBE_HTTP)); // Verify result should be appended and notifyNetworkTestedWithExtras callback is triggered @@ -2842,20 +2798,22 @@ nm.getEvaluationState().reportEvaluationResult(NETWORK_VALIDATION_RESULT_VALID, null /* redirectUrl */); verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP); + NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP, + 1 /* interactions */); nm.getEvaluationState().reportEvaluationResult( NETWORK_VALIDATION_RESULT_VALID | NETWORK_VALIDATION_RESULT_PARTIAL, null /* redirectUrl */); verifyNetworkTested( NETWORK_VALIDATION_RESULT_VALID | NETWORK_VALIDATION_RESULT_PARTIAL, - NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP); + NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP, + 1 /* interactions */); nm.getEvaluationState().reportEvaluationResult(VALIDATION_RESULT_INVALID, TEST_REDIRECT_URL); verifyNetworkTested(VALIDATION_RESULT_INVALID, NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTP, - TEST_REDIRECT_URL); + TEST_REDIRECT_URL, 1 /* interactions */); } @Test @@ -2997,14 +2955,13 @@ verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .showProvisioningNotification(any(), any()); assertCaptivePortalAppReceiverRegistered(true /* isPortal */); - verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, TEST_LOGIN_URL); + verifyNetworkTestedPortal(TEST_LOGIN_URL, 1 /* interactions */); // Force reevaluation and confirm that the network is still captive HandlerUtils.waitForIdle(monitor.getHandler(), HANDLER_TIMEOUT_MS); - resetCallbacks(); monitor.forceReevaluation(Process.myUid()); assertEquals(monitor.getEvaluationState().getProbeCompletedResult(), 0); - verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, TEST_LOGIN_URL); + verifyNetworkTestedPortal(TEST_LOGIN_URL, 2 /* interactions */); // Check that startCaptivePortalApp sends the expected intent. monitor.launchCaptivePortalApp(); @@ -3197,21 +3154,59 @@ int testResult, int probesSucceeded, String redirectUrl) throws Exception { final NetworkMonitor monitor = makeMonitor(nc); notifyNetworkConnected(monitor, config, lp, nc); - verifyNetworkTested(testResult, probesSucceeded, redirectUrl); + verifyNetworkTested(testResult, probesSucceeded, redirectUrl, 1 /* interactions */); HandlerUtils.waitForIdle(monitor.getHandler(), HANDLER_TIMEOUT_MS); return monitor; } - private void verifyNetworkTested(int testResult, int probesSucceeded) throws Exception { - verifyNetworkTested(testResult, probesSucceeded, null /* redirectUrl */); + private void verifyProbeStatusChangedPrivateDnsCompleteAndSucceeded(int interactions) + throws Exception { + verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(interactions)) + .notifyProbeStatusChanged(eq(PROBES_PRIVDNS_VALID), eq(PROBES_PRIVDNS_VALID)); } - private void verifyNetworkTested(int testResult, int probesSucceeded, String redirectUrl) - throws RemoteException { + private void verifyProbeStatusChangedPrivateDnsCompleteAndHttpsSucceeded(int interactions) + throws Exception { + verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(interactions)) + .notifyProbeStatusChanged( + eq(PROBES_PRIVDNS_VALID), + eq(NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS)); + } + + private void verifyNetworkTestedInvalidFromHttps(int interactions) throws Exception { + verifyNetworkTested(VALIDATION_RESULT_INVALID, + NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS, + interactions); + } + + private void verifyNetworkTestedPortal(String redirectUrl, int interactions) throws Exception { + verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, redirectUrl, + interactions); + } + + private void verifyNetworkTestedValidFromHttps(int interactions) throws Exception { + verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, + NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS, + interactions); + } + + private void verifyNetworkTestedValidFromPrivateDns(int interactions) throws Exception { + verifyNetworkTested(NETWORK_VALIDATION_RESULT_VALID, PROBES_PRIVDNS_VALID, interactions); + } + + private void verifyNetworkTested(int testResult, int probesSucceeded, int interactions) + throws Exception { + verifyNetworkTested(testResult, probesSucceeded, null /* redirectUrl */, interactions); + } + + private void verifyNetworkTested(int testResult, int probesSucceeded, String redirectUrl, + int interactions) throws RemoteException { try { - verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS)).notifyNetworkTestedWithExtras( - matchNetworkTestResultParcelable(testResult, probesSucceeded, redirectUrl)); + verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(interactions)) + .notifyNetworkTestedWithExtras( + matchNetworkTestResultParcelable( + testResult, probesSucceeded, redirectUrl)); } catch (AssertionFailedError e) { // Capture the callbacks up to now to give a better error message final ArgumentCaptor<NetworkTestResultParcelable> captor = @@ -3221,14 +3216,15 @@ // call which failed, but this time use a captor to log the exact parcel sent by // NetworkMonitor. // This assertion will fail if notifyNetworkTested was not called at all. - verify(mCallbacks).notifyNetworkTestedWithExtras(captor.capture()); + verify(mCallbacks, times(interactions)).notifyNetworkTestedWithExtras(captor.capture()); - final NetworkTestResultParcelable lastResult = captor.getValue(); - fail(String.format("notifyNetworkTestedWithExtras was not called with the " + final List<NetworkTestResultParcelable> results = captor.getAllValues(); + final NetworkTestResultParcelable lastResult = results.get(results.size() - 1); + fail(String.format("notifyNetworkTestedWithExtras was not called %d times with the " + "expected result within timeout. " + "Expected result %d, probes succeeded %d, redirect URL %s, " + "last result was (%d, %d, %s).", - testResult, probesSucceeded, redirectUrl, + interactions, testResult, probesSucceeded, redirectUrl, lastResult.result, lastResult.probesSucceeded, lastResult.redirectUrl)); } }