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();