Add gzip support

Change-Id: I91895689a2204d43672b5638a9a293807b437a59
diff --git a/service_test.go b/service_test.go
index 34e58b2..65fb8c5 100644
--- a/service_test.go
+++ b/service_test.go
@@ -1,6 +1,8 @@
 package main
 
 import (
+	"compress/gzip"
+	"io"
 	"net/http"
 	"net/http/httptest"
 	"os"
@@ -13,7 +15,7 @@
 
 	dir := t.TempDir()
 
-	initDB(dir)
+	InitDB(dir)
 	defer closeDB()
 	router := setupRouter()
 
@@ -25,7 +27,7 @@
 	assert.Equal(t, http.StatusNotFound, w.Code)
 	assert.Equal(t, "No entry found", w.Body.String())
 
-	assert.Nil(t, add("s11", "s12", "s13", "sueddeutsche", "http://example.org"))
+	assert.Nil(t, add(db, "s11", "s12", "s13", "sueddeutsche", "http://example.org"))
 
 	w = httptest.NewRecorder()
 	req, _ = http.NewRequest(http.MethodGet, "/s11/s12/s13", nil)
@@ -102,5 +104,55 @@
 	assert.Contains(t, w.Header().Get("Content-Type"), "application/json")
 	assert.Contains(t, w.Body.String(), "permissions")
 	assert.Contains(t, w.Body.String(), "/plugin/fun")
+}
+
+func TestIndexer(t *testing.T) {
+
+	dir := t.TempDir()
+
+	dbx := initDB(dir)
+	defer dbx.Close()
+
+	// Test index plain
+	file, err := os.Open("testdata/sz_mapping_example1.csv")
+	assert.Nil(t, err)
+	defer file.Close()
+	indexDB(file, dbx)
+
+	// Test index gzip
+	file, err = os.Open("testdata/sz_mapping_example2.csv.gz")
+	assert.Nil(t, err)
+	defer file.Close()
+	var gzipr io.Reader
+	gzipr, err = gzip.NewReader(file)
+	assert.Nil(t, err)
+	indexDB(gzipr, dbx)
+
+	txn := dbx.NewTransaction(true)
+	defer txn.Discard()
+
+	item, err := txn.Get([]byte("U92/JAN/00001"))
+	assert.Nil(t, err)
+	err = item.Value(func(val []byte) error {
+		assert.Equal(t, string(val), "Süddeutsche Zeitung,https://archiv.szarchiv.de/Portal/restricted/Start.act?articleId=A800000")
+		return nil
+	})
+	assert.Nil(t, err)
+
+	item, err = txn.Get([]byte("U92/JAN/00003"))
+	assert.Nil(t, err)
+	err = item.Value(func(val []byte) error {
+		assert.Equal(t, string(val), "Süddeutsche Zeitung,https://archiv.szarchiv.de/Portal/restricted/Start.act?articleId=A800010")
+		return nil
+	})
+	assert.Nil(t, err)
+
+	item, err = txn.Get([]byte("U92/FEB/00003"))
+	assert.Nil(t, err)
+	err = item.Value(func(val []byte) error {
+		assert.Equal(t, string(val), "Süddeutsche Zeitung,https://archiv.szarchiv.de/Portal/restricted/Start.act?articleId=A806912")
+		return nil
+	})
+	assert.Nil(t, err)
 
 }