Merge "Fix EtherentTetheringTest flaky" into main
This commit is contained in:
@@ -58,6 +58,8 @@ import android.net.TetheringManager.TetheringEventCallback;
|
|||||||
import android.net.TetheringManager.TetheringRequest;
|
import android.net.TetheringManager.TetheringRequest;
|
||||||
import android.net.TetheringTester.TetheredDevice;
|
import android.net.TetheringTester.TetheredDevice;
|
||||||
import android.net.cts.util.CtsNetUtils;
|
import android.net.cts.util.CtsNetUtils;
|
||||||
|
import android.net.cts.util.CtsTetheringUtils;
|
||||||
|
import android.net.cts.util.CtsTetheringUtils.TestTetheringEventCallback;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
@@ -75,6 +77,7 @@ import com.android.testutils.TestNetworkTracker;
|
|||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
@@ -161,6 +164,28 @@ public abstract class EthernetTetheringTestBase {
|
|||||||
private TapPacketReader mDownstreamReader;
|
private TapPacketReader mDownstreamReader;
|
||||||
private MyTetheringEventCallback mTetheringEventCallback;
|
private MyTetheringEventCallback mTetheringEventCallback;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setUpOnce() throws Exception {
|
||||||
|
// The first test case may experience tethering restart with IP conflict handling.
|
||||||
|
// Tethering would cache the last upstreams so that the next enabled tethering avoids
|
||||||
|
// picking up the address that is in conflict with the upstreams. To protect subsequent
|
||||||
|
// tests, turn tethering on and off before running them.
|
||||||
|
final Context ctx = InstrumentationRegistry.getInstrumentation().getContext();
|
||||||
|
final CtsTetheringUtils utils = new CtsTetheringUtils(ctx);
|
||||||
|
final TestTetheringEventCallback callback = utils.registerTetheringEventCallback();
|
||||||
|
try {
|
||||||
|
if (!callback.isWifiTetheringSupported(ctx)) return;
|
||||||
|
|
||||||
|
callback.expectNoTetheringActive();
|
||||||
|
|
||||||
|
utils.startWifiTethering(callback);
|
||||||
|
callback.getCurrentValidUpstream();
|
||||||
|
utils.stopWifiTethering(callback);
|
||||||
|
} finally {
|
||||||
|
utils.unregisterTetheringEventCallback(callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
mHandlerThread = new HandlerThread(getClass().getSimpleName());
|
mHandlerThread = new HandlerThread(getClass().getSimpleName());
|
||||||
|
|||||||
@@ -393,21 +393,28 @@ public final class CtsTetheringUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void assumeTetheringSupported() {
|
public void assumeTetheringSupported() {
|
||||||
|
assumeTrue(isTetheringSupported());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isTetheringSupported() {
|
||||||
final ArrayTrackRecord<CallbackValue>.ReadHead history =
|
final ArrayTrackRecord<CallbackValue>.ReadHead history =
|
||||||
mHistory.newReadHead();
|
mHistory.newReadHead();
|
||||||
assertNotNull("No onSupported callback", history.poll(TIMEOUT_MS, (cv) -> {
|
final CallbackValue result = history.poll(TIMEOUT_MS, (cv) -> {
|
||||||
if (cv.callbackType != CallbackType.ON_SUPPORTED) return false;
|
return cv.callbackType == CallbackType.ON_SUPPORTED;
|
||||||
|
});
|
||||||
|
|
||||||
assumeTrue(cv.callbackParam2 == 1 /* supported */);
|
assertNotNull("No onSupported callback", result);
|
||||||
return true;
|
return result.callbackParam2 == 1 /* supported */;
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void assumeWifiTetheringSupported(final Context ctx) throws Exception {
|
public void assumeWifiTetheringSupported(final Context ctx) throws Exception {
|
||||||
assumeTetheringSupported();
|
assumeTrue(isWifiTetheringSupported(ctx));
|
||||||
|
}
|
||||||
|
|
||||||
assumeTrue(!getTetheringInterfaceRegexps().getTetherableWifiRegexs().isEmpty());
|
public boolean isWifiTetheringSupported(final Context ctx) throws Exception {
|
||||||
assumeTrue(isPortableHotspotSupported(ctx));
|
return isTetheringSupported()
|
||||||
|
&& !getTetheringInterfaceRegexps().getTetherableWifiRegexs().isEmpty()
|
||||||
|
&& isPortableHotspotSupported(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TetheringInterfaceRegexps getTetheringInterfaceRegexps() {
|
public TetheringInterfaceRegexps getTetheringInterfaceRegexps() {
|
||||||
|
|||||||
Reference in New Issue
Block a user