Use CompletableFuture instead of a latch.

Addresses review comments on aosp/1260100.

Bug: 150644681
Test: test-only change
Change-Id: Ia73ba8a121a3744a5e36795d2d2bff2f099c1394
This commit is contained in:
Lorenzo Colitti
2020-03-27 23:42:58 +09:00
parent cdd0dabe09
commit 0a61e95319

View File

@@ -63,6 +63,7 @@ import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -150,10 +151,7 @@ public class EthernetTetheringTest {
Log.d(TAG, "Including test interfaces");
mEm.setIncludeTestInterfaces(true);
Log.d(TAG, "Requesting tethered interface");
mTetheredInterfaceRequester.requestInterface();
final String iface = mTetheredInterfaceRequester.awaitRequestedInterface();
final String iface = mTetheredInterfaceRequester.getInterface();
assertEquals("TetheredInterfaceCallback for unexpected interface",
mTestIface.getInterfaceName(), iface);
@@ -165,14 +163,13 @@ public class EthernetTetheringTest {
// This test requires manipulating packets. Skip if there is a physical Ethernet connected.
assumeFalse(mEm.isAvailable());
Log.d(TAG, "Requesting tethered interface");
mTetheredInterfaceRequester.requestInterface();
CompletableFuture<String> futureIface = mTetheredInterfaceRequester.requestInterface();
mEm.setIncludeTestInterfaces(true);
mTestIface = createTestInterface();
final String iface = mTetheredInterfaceRequester.awaitRequestedInterface();
final String iface = futureIface.get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
assertEquals("TetheredInterfaceCallback for unexpected interface",
mTestIface.getInterfaceName(), iface);
@@ -184,8 +181,7 @@ public class EthernetTetheringTest {
assumeTrue(mEm.isAvailable());
// Get an interface to use.
mTetheredInterfaceRequester.requestInterface();
String iface = mTetheredInterfaceRequester.awaitRequestedInterface();
final String iface = mTetheredInterfaceRequester.getInterface();
// Enable Ethernet tethering and check that it starts.
mTetheringEventCallback = enableEthernetTethering(iface);
@@ -373,8 +369,8 @@ public class EthernetTetheringTest {
private final Handler mHandler;
private final EthernetManager mEm;
private volatile TetheredInterfaceRequest mRequest;
private volatile String mIface;
private TetheredInterfaceRequest mRequest;
private final CompletableFuture<String> mFuture = new CompletableFuture<>();
TetheredInterfaceRequester(Handler handler, EthernetManager em) {
mHandler = handler;
@@ -384,25 +380,28 @@ public class EthernetTetheringTest {
@Override
public void onAvailable(String iface) {
Log.d(TAG, "Ethernet interface available: " + iface);
mIface = iface;
mInterfaceAvailableLatch.countDown();
mFuture.complete(iface);
}
@Override
public void onUnavailable() {}
public void requestInterface() {
assertNull("BUG: more than one tethered interface request", mRequest);
mRequest = mEm.requestTetheredInterface(mHandler::post, this);
public void onUnavailable() {
mFuture.completeExceptionally(new IllegalStateException("onUnavailable received"));
}
public String awaitRequestedInterface() throws InterruptedException {
assertTrue("No tethered interface available after " + TIMEOUT_MS + "ms",
mInterfaceAvailableLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
return mIface;
public CompletableFuture<String> requestInterface() {
assertNull("BUG: more than one tethered interface request", mRequest);
Log.d(TAG, "Requesting tethered interface");
mRequest = mEm.requestTetheredInterface(mHandler::post, this);
return mFuture;
}
public String getInterface() throws Exception {
return requestInterface().get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
}
public void release() {
if (mRequest != null) {
mFuture.obtrudeException(new IllegalStateException("Request already released"));
mRequest.release();
mRequest = null;
}