diff options
Diffstat (limited to 'net/test/android')
-rw-r--r-- | net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java | 44 |
1 files changed, 41 insertions, 3 deletions
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 a9ca6bd..c54de3d 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,54 @@ package org.chromium.net.test; +import org.chromium.base.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 = Log.makeTag("net.test"); + 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(); + } + } - while (mKeepRunning.get()) { - accept(); + /** 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); + } + } + } + } + + private void serverHasStarted() { + synchronized (mLock) { + mRunning = true; + mLock.notifyAll(); } } @@ -34,4 +65,11 @@ public abstract class BaseTestServer implements Runnable { public void stop() { mKeepRunning.set(false); } + + private void serverHasStopped() { + synchronized (mLock) { + mRunning = false; + mLock.notifyAll(); + } + } } |