From 9ca7fee6c9046c85dcb836cb3cbae955e484e9c7 Mon Sep 17 00:00:00 2001 From: Hungming Chen Date: Mon, 16 Jan 2023 20:08:10 +0800 Subject: [PATCH 1/2] TetheringTest: demonstrate duplicated upstream change event The duplicated upstream change event on the same network is a bug which needs to be fixed. Bug: 243516306 Test: atest TetheringTest Change-Id: I7c70328d937877ec9832a2764cfb331561ee34b6 --- .../networkstack/tethering/TetheringTest.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index 98a3b1dcfa..6ca47a838c 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -2678,19 +2678,30 @@ public class TetheringTest { public void testUpstreamNetworkChanged() { final Tethering.TetherMainSM stateMachine = (Tethering.TetherMainSM) mTetheringDependencies.mUpstreamNetworkMonitorSM; + final InOrder inOrder = inOrder(mNotificationUpdater); + // Gain upstream. final UpstreamNetworkState upstreamState = buildMobileIPv4UpstreamState(); initTetheringUpstream(upstreamState); stateMachine.chooseUpstreamType(true); mTetheringEventCallback.expectUpstreamChanged(upstreamState.network); - verify(mNotificationUpdater) + inOrder.verify(mNotificationUpdater) .onUpstreamCapabilitiesChanged(upstreamState.networkCapabilities); + // Set the upstream with the same network ID but different object. + final UpstreamNetworkState upstreamState2 = buildMobileIPv4UpstreamState(); + initTetheringUpstream(upstreamState2); + stateMachine.chooseUpstreamType(true); + // Bug: duplicated upstream change event. + mTetheringEventCallback.expectUpstreamChanged(upstreamState2.network); + inOrder.verify(mNotificationUpdater) + .onUpstreamCapabilitiesChanged(upstreamState2.networkCapabilities); + // Lose upstream. initTetheringUpstream(null); stateMachine.chooseUpstreamType(true); mTetheringEventCallback.expectUpstreamChanged(NULL_NETWORK); - verify(mNotificationUpdater).onUpstreamCapabilitiesChanged(null); + inOrder.verify(mNotificationUpdater).onUpstreamCapabilitiesChanged(null); } @Test From 2ebcf840ef82eb8ca638c89ac3a5213e6b120918 Mon Sep 17 00:00:00 2001 From: Hungming Chen Date: Thu, 2 Feb 2023 17:13:03 +0800 Subject: [PATCH 2/2] TetheringTest: verify onUpstreamCapabilitiesChanged explicitly In testUpstreamCapabilitiesChanged, verify that onUpstreamCapabilitiesChanged is called just after which function triggered onUpstreamCapabilitiesChanged. Bug: 243516306 Test: atest TetheringTest Change-Id: Icd871654455033475092b9e7376b604cb0ba00eb --- .../android/networkstack/tethering/TetheringTest.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index 6ca47a838c..22d6e4da49 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -2708,16 +2708,17 @@ public class TetheringTest { public void testUpstreamCapabilitiesChanged() { final Tethering.TetherMainSM stateMachine = (Tethering.TetherMainSM) mTetheringDependencies.mUpstreamNetworkMonitorSM; + final InOrder inOrder = inOrder(mNotificationUpdater); final UpstreamNetworkState upstreamState = buildMobileIPv4UpstreamState(); initTetheringUpstream(upstreamState); + stateMachine.chooseUpstreamType(true); + inOrder.verify(mNotificationUpdater) + .onUpstreamCapabilitiesChanged(upstreamState.networkCapabilities); stateMachine.handleUpstreamNetworkMonitorCallback(EVENT_ON_CAPABILITIES, upstreamState); - // Should have two onUpstreamCapabilitiesChanged(). - // One is called by reportUpstreamChanged(). One is called by EVENT_ON_CAPABILITIES. - verify(mNotificationUpdater, times(2)) + inOrder.verify(mNotificationUpdater) .onUpstreamCapabilitiesChanged(upstreamState.networkCapabilities); - reset(mNotificationUpdater); // Verify that onUpstreamCapabilitiesChanged won't be called if not current upstream network // capabilities changed. @@ -2725,7 +2726,7 @@ public class TetheringTest { upstreamState.linkProperties, upstreamState.networkCapabilities, new Network(WIFI_NETID)); stateMachine.handleUpstreamNetworkMonitorCallback(EVENT_ON_CAPABILITIES, upstreamState2); - verify(mNotificationUpdater, never()).onUpstreamCapabilitiesChanged(any()); + inOrder.verify(mNotificationUpdater, never()).onUpstreamCapabilitiesChanged(any()); } @Test