Improve thread-safetyness of event stream tests
Change-Id: I0f116a3255616a0dfe7c152e80f4386684c03f6e
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
index fcd3ef8..4e574d8 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
@@ -47,6 +47,7 @@
import java.util.concurrent.TimeUnit;
import javax.ws.rs.client.WebTarget;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ConcurrentLinkedQueue;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
@@ -789,9 +790,7 @@
@Test
public void testExportWsProgressError () throws InterruptedException {
- // TODO:
- // Make this threadsafe
- final LinkedList<String> events = new LinkedList<>();
+ final ConcurrentLinkedQueue<String> events = new ConcurrentLinkedQueue<>();
// final int eventCount = 3;
// Expect messages:
@@ -820,10 +819,10 @@
Thread.sleep(2000);
// Check error
- assertEquals(events.getFirst(), "Process:init");
- assertEquals(events.get(1), "Error:HTTP 400 Bad Request");
- assertEquals(events.getLast(), "Process:done");
- assertEquals(events.size(), 3);
+ assertEquals(events.poll(), "Process:init");
+ assertEquals(events.poll(), "Error:HTTP 400 Bad Request");
+ assertEquals(events.poll(), "Process:done");
+ assertTrue(events.isEmpty());
eventSource.close();
};
@@ -864,8 +863,8 @@
// https://github.com/jersey/jersey/blob/master/examples/
// server-sent-events-jersey/src/test/java/org/glassfish/
// jersey/examples/sse/jersey/ServerSentEventsTest.java
+ final ConcurrentLinkedQueue<String> events = new ConcurrentLinkedQueue<>();
- final LinkedList<String> events = new LinkedList<>();
// Create SSE client
Client client = ClientBuilder
@@ -891,17 +890,22 @@
Thread.sleep(3000);
// Check error
- assertEquals(events.getFirst(), "Process:init");
- assertEquals(events.get(1), "Progress:0");
- assertEquals(events.get(2), "Progress:56");
- assertTrue(events.get(3).startsWith("Relocate:"));
- assertTrue(events.get(3).contains(";"));
- assertEquals(events.getLast(), "Process:done");
- assertEquals(events.size(), 5);
+ assertEquals(events.poll(), "Process:init");
+ assertTrue(events.contains("Progress:0"));
+ assertTrue(events.contains("Progress:56"));
+ events.poll();
+ events.poll();
+ assertTrue(events.peek().startsWith("Relocate:"));
+ assertTrue(events.peek().contains(";"));
+
+ String rel = events.poll();
+
+ assertEquals(events.poll(), "Process:done");
+ assertTrue(events.isEmpty());
eventSource.close();
// Now fetch the file!
- String[] splits = events.get(3).substring(9).split(";");
+ String[] splits = rel.substring(9).split(";");
String fileLoc = splits[0];
String filename = splits[1];
Response response = target("/export/" + fileLoc).queryParam("fname", filename).request().get();