Replace wait/notify with CyclicBarrier
There was a tiny chance of the notify being executed before the other
thread calls wait. Using CyclicBarrier solves this issue and the code is
also a bit easier to read.
Change-Id: I4384dfea911ebc52bcbc3c25049b40fcb4a34fde
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
index 7e13e37..bd25a1c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CacheEvictionIT.java
@@ -22,6 +22,7 @@
import static com.github.tomakehurst.wiremock.client.WireMock.verify;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
+import com.google.common.base.Throwables;
import com.google.gerrit.acceptance.GerritConfig;
import com.google.gerrit.acceptance.GerritConfigs;
import com.google.gerrit.acceptance.NoHttpd;
@@ -36,6 +37,8 @@
import org.junit.Rule;
import org.junit.Test;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;
@NoHttpd
@@ -51,12 +54,15 @@
public void flushAndSendPost() throws Exception {
final String flushRequest =
"/plugins/high-availability/cache/" + Constants.PROJECT_LIST;
+ final CyclicBarrier checkPoint = new CyclicBarrier(2);
wireMockRule.addMockServiceRequestListener(new RequestListener() {
@Override
public void requestReceived(Request request, Response response) {
if (request.getAbsoluteUrl().contains(flushRequest)) {
- synchronized (flushRequest) {
- flushRequest.notify();
+ try {
+ checkPoint.await();
+ } catch (InterruptedException | BrokenBarrierException e) {
+ Throwables.propagateIfPossible(e);
}
}
}
@@ -66,9 +72,7 @@
adminSshSession
.exec("gerrit flush-caches --cache " + Constants.PROJECT_LIST);
- synchronized (flushRequest) {
- flushRequest.wait(TimeUnit.SECONDS.toMillis(5));
- }
+ checkPoint.await(5, TimeUnit.SECONDS);
verify(postRequestedFor(urlEqualTo(flushRequest)));
}
}