Add fingerprint method to KrillIndex (closes #62)

Change-Id: Ic9ded4e07587edfe5edde931b928c40673af0e83
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestIndexRevision.java b/src/test/java/de/ids_mannheim/korap/index/TestIndexRevision.java
new file mode 100644
index 0000000..2128d4f
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/index/TestIndexRevision.java
@@ -0,0 +1,103 @@
+package de.ids_mannheim.korap.index;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotEquals;
+
+import java.io.IOException;
+
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.spans.SpanQuery;
+import org.apache.lucene.search.spans.SpanTermQuery;
+import org.junit.Test;
+import org.junit.Ignore;
+
+import de.ids_mannheim.korap.Krill;
+import de.ids_mannheim.korap.KrillIndex;
+import de.ids_mannheim.korap.KrillMeta;
+import de.ids_mannheim.korap.response.Result;
+import de.ids_mannheim.korap.util.StatusCodes;
+
+import java.nio.file.Paths;
+import org.apache.lucene.store.MMapDirectory;
+
+public class TestIndexRevision {
+
+    @Test
+    public void testIndexRevisionAdd () throws IOException {
+        KrillIndex ki = new KrillIndex();
+
+        assertEquals(ki.getFingerprint(),"null");
+        
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+        ki.commit();
+
+        String x1 = ki.getFingerprint();
+        assertEquals(x1,"ibtSULzKIMrfGAtES3GXRA==");
+
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"), true);
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00003.json.gz"), true);
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00004.json.gz"), true);
+        ki.commit();
+
+        String x2 = ki.getFingerprint();
+        assertEquals(x2,"0UIQZpZVfiGDD2leAq6YQA==");
+
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00006.json.gz"), true);
+        ki.commit();
+
+        String x3 = ki.getFingerprint();
+        assertEquals(x3,"fS3GqnKynhPQ5wFyC9/XWw==");
+
+
+        // Check if the same changes will have the same effect
+        KrillIndex ki2 = new KrillIndex();
+
+        assertEquals(ki2.getFingerprint(),"null");
+        
+        ki2.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+        ki2.commit();
+
+        assertEquals(ki2.getFingerprint(), x1);
+
+        ki2.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"), true);
+        ki2.addDoc(getClass().getResourceAsStream("/wiki/00003.json.gz"), true);
+        ki2.addDoc(getClass().getResourceAsStream("/wiki/00004.json.gz"), true);
+        ki2.commit();
+
+        assertEquals(ki2.getFingerprint(), x2);
+
+        ki2.addDoc(getClass().getResourceAsStream("/wiki/00006.json.gz"), true);
+        ki2.commit();
+
+        assertEquals(ki2.getFingerprint(), x3);
+    };
+
+    @Test
+    public void testIndexRevisionDel () throws IOException {
+        KrillIndex ki = new KrillIndex();
+
+        assertEquals(ki.getFingerprint(),"null");
+        
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+        ki.commit();
+
+        String x1 = ki.getFingerprint();
+        assertEquals(x1,"ibtSULzKIMrfGAtES3GXRA==");
+
+        assertTrue(ki.delDocs("title", "A"));
+        ki.commit();
+
+        String x2 = ki.getFingerprint();
+        assertNotEquals(x1, x2);
+
+    };
+
+    @Ignore
+    public void testIndexRevisionSample () throws IOException {
+        KrillIndex ki = new KrillIndex(new MMapDirectory(
+                Paths.get(getClass().getResource("/sample-index").getFile())));
+
+        assertEquals(ki.getFingerprint(),"Wes8Bd4h1OypPqbWF5njeQ==");
+    };
+};