Index: net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java |
diff --git a/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java b/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java |
index a9ca6bd6173c71caa9109e36a93fed265bc5ef00..411265ba29503fc18d0bf7aba093f8e95ce4c4a3 100644 |
--- a/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java |
+++ b/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java |
@@ -4,23 +4,61 @@ |
package org.chromium.net.test; |
+import android.util.Log; |
+ |
import java.util.concurrent.atomic.AtomicBoolean; |
/** A base class for simple test servers. */ |
public abstract class BaseTestServer implements Runnable { |
+ private static final String TAG = "BaseTestServer"; |
+ |
private AtomicBoolean mKeepRunning; |
+ private final Object mLock; |
+ private boolean mRunning; |
/** Creates a test server. */ |
public BaseTestServer() { |
mKeepRunning = new AtomicBoolean(true); |
+ mLock = new Object(); |
} |
/** Accepts incoming connections until stopped via stop(). */ |
public void run() { |
- mKeepRunning.set(true); |
+ serverHasStarted(); |
+ |
+ try { |
+ while (mKeepRunning.get()) { |
+ accept(); |
+ } |
+ } finally { |
+ serverHasStopped(); |
+ } |
+ } |
+ |
+ private void serverHasStopped() { |
+ synchronized (mLock) { |
+ mRunning = false; |
+ mLock.notify(); |
+ } |
+ } |
+ |
+ /** Waits for the server to start. */ |
+ public void waitForServerToStart() { |
+ synchronized (mLock) { |
+ while (!mRunning) { |
+ try { |
+ mLock.wait(); |
+ } catch (InterruptedException e) { |
+ Log.e(TAG, "Interrupted while waiting for server to stop: " + e.toString()); |
+ } |
+ } |
+ } |
+ } |
- while (mKeepRunning.get()) { |
- accept(); |
+ private void serverHasStarted() { |
+ synchronized (mLock) { |
+ mRunning = true; |
+ mLock.notify(); |
} |
} |