Serve a temporary file after event relocation
Change-Id: I7b87d8e73dc62db8a74d13a31c78fe783365d12b
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/CsvExporterTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/CsvExporterTest.java
index 528c63f..4cacacc 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/CsvExporterTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/CsvExporterTest.java
@@ -17,6 +17,7 @@
public void testInit () throws IOException {
CsvExporter csv = new CsvExporter();
csv.init("{\"query\":\"cool\"}");
+ csv.finish();
Response resp = csv.serve().build();
String x = (String) resp.getEntity();
@@ -45,6 +46,7 @@
"<span class=\\\"context-right\\\"> Snippet"+
"<span class=\\\"more\\\"></span></span>\"}"+
"]}");
+ csv.finish();
Response resp = csv.serve().build();
String x = (String) resp.getEntity();
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java
index 4bea7db..79a443d 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java
@@ -20,7 +20,7 @@
public void testInit () throws IOException {
JsonExporter json = new JsonExporter();
json.init("{\"query\":\"cool\"}");
-
+ json.finish();
Response resp = json.serve().build();
String x = (String) resp.getEntity();
resp.close();
@@ -31,6 +31,7 @@
public void testInitFull () throws IOException {
JsonExporter json = new JsonExporter();
json.init("{\"meta\":\"ja\",\"collection\":\"hm\",\"query\":\"cool\",\"matches\":[\"first\",\"second\"]}");
+ json.finish();
Response resp = json.serve().build();
String x = (String) resp.getEntity();
@@ -43,6 +44,7 @@
JsonExporter json = new JsonExporter();
json.init("{\"meta\":\"ja\",\"collection\":\"hm\",\"query\":\"cool\",\"matches\":[\"first\",\"second\"]}");
json.appendMatches("{\"meta\":\"ja2\",\"collection\":\"hm2\",\"query\":\"cool2\",\"matches\":[\"third\",\"fourth\"]}");
+ json.finish();
Response resp = json.serve().build();
File x = (File) resp.getEntity();
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java
index 52a8f71..5acf32e 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java
@@ -27,7 +27,7 @@
assertNull(m.getQuery());
assertNull(m.getCollection());
};
-
+
@Test
public void testSampleInit () throws IOException {
MatchAggregator m = new MatchAggregator();
@@ -118,4 +118,11 @@
assertEquals(m.getSource(),"/path");
};
+ @Test
+ public void testFileHandling () throws IOException {
+ MatchAggregator m = new MatchAggregator();
+ assertEquals(m.getExportID(), "");
+ m.forceFile();
+ assertTrue(m.getExportID().contains("idsexp-"));
+ };
};
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
index a146845..311d479 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
@@ -17,6 +17,7 @@
public void testInit () throws IOException {
RtfExporter rtf = new RtfExporter();
rtf.init("{\"query\":\"cool\"}");
+ rtf.finish();
Response resp = rtf.serve().build();
String x = (String) resp.getEntity();
@@ -45,6 +46,7 @@
"<span class=\\\"context-right\\\"> Snippet"+
"<span class=\\\"more\\\"></span></span>\"}"+
"]}");
+ rtf.finish();
Response resp = rtf.serve().build();
String x = (String) resp.getEntity();
@@ -70,6 +72,7 @@
"\"textSigle\":\"RTF/G59/34284\","+
"\"snippet\":\"<span class=\\\"context-left\\\"></span><span class=\\\"match\\\"><mark>Und dafür musstest Du extra ne neue Socke erstellen? Wieso traust Du Dich nicht, mit Deinem Account aufzutreten? - -- ωωσσI - talk with me 09:17, 17. Dez. 2011 (CET) Der ist doch gesperrt. -- 09:21, 17. Dez. 2011 (CET) WWSS1, weil ich normalerweise mit IP schreibe und in dem Fall nicht möchte, dass</mark><span class=\\\"cutted\\\"></span></span><span class=\\\"context-right\\\"> meine IP öffentlich angezeigt wird. Über die IP kann man auf den Wohnort, den Provider und bei Aufenthalt am Arbeitsplatz auf den Arbeitgeber schließen, über Konto nicht. -- 09:24, 17. Dez. 2011 (CET) Bist Du denn nicht mehr selber Arbeitgeber? -- 09:31<span class=\\\"more\\\"></span></span>\"}"+
"]}");
+ rtf.finish();
Response resp = rtf.serve().build();
String x = (String) resp.getEntity();
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 6c51f5e..6bbcc00 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
@@ -785,11 +785,14 @@
@Test
public void testExportWsProgressError () throws InterruptedException {
+
+ // TODO:
+ // Make this threadsafe
final LinkedList<String> events = new LinkedList<>();
- final int eventCount = 3;
+ // final int eventCount = 3;
// Expect messages:
- final CountDownLatch latch = new CountDownLatch(eventCount);
+ // final CountDownLatch latch = new CountDownLatch(eventCount);
// Create SSE client
Client client = ClientBuilder
@@ -804,13 +807,13 @@
EventListener listener = inboundEvent -> {
events.add(inboundEvent.getName() + ":" + inboundEvent.readData(String.class));
- latch.countDown();
+ // latch.countDown();
};
eventSource.register(listener);
eventSource.open();
- latch.await(1000, TimeUnit.SECONDS);
+ // latch.await(1000, TimeUnit.SECONDS);
Thread.sleep(2000);
// Check error
@@ -888,12 +891,52 @@
assertEquals(events.getFirst(), "Process:init");
assertEquals(events.get(1), "Progress:0");
assertEquals(events.get(2), "Progress:56");
- assertEquals(events.get(3), "Relocate:...");
+ assertTrue(events.get(3).startsWith("Relocate:"));
assertEquals(events.getLast(), "Process:done");
assertEquals(events.size(), 5);
eventSource.close();
+
+ // Now fetch the file!
+ String fileLoc = events.get(3).substring(9);
+
+ String filename = "ExampleHui";
+ Response response = target("/export/" + fileLoc).queryParam("fname", filename).request().get();
+
+ String str = response.readEntity(String.class);
+
+ assertEquals("HTTP Code",
+ Status.OK.getStatusCode(), response.getStatus());
+ assertTrue(
+ "Request: Results should not be displayed inline, but saved and displayed locally",
+ response.getHeaderString(HttpHeaders.CONTENT_DISPOSITION)
+ .contains("attachment"));
+
+ assertTrue("Request: Filename should be set correctly: ",
+ response.getHeaderString(HttpHeaders.CONTENT_DISPOSITION)
+ .contains("filename=" + filename + ".rtf"));
+
+ // An RTF document should be returned
+ assertEquals("Request RTF: Http Content-Type should be: ",
+ "application/rtf",
+ response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+
+
+ assertTrue("Intro", str.contains("{\\rtf1\\ansi\\deff0"));
+ assertTrue("Outro", str.contains("{\\pard\\brdrb\\brdrs\\brdrw2\\brsp20\\par}"));
+ assertTrue("Content", str.contains("Benutzer Diskussion:Kriddl"));
};
+
+ @Test
+ public void testFileServingError () {
+ String fileLoc = "hjGHJghjgHJGhjghj";
+ Response response = target("/export/" + fileLoc).request().get();
+
+ assertEquals("HTTP Code",
+ Status.NOT_FOUND.getStatusCode(), response.getStatus());
+
+ };
+
@Test
public void testClientIP () {