func TestClosedIndex(t *testing.T) { index, err := New("", NewIndexMapping()) if err != nil { t.Fatal(err) } err = index.Close() if err != nil { t.Fatal(err) } err = index.Index("test", "test") if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } err = index.Delete("test") if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } b := index.NewBatch() err = index.Batch(b) if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } _, err = index.Document("test") if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } _, err = index.DocCount() if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } _, err = index.Search(NewSearchRequest(NewTermQuery("test"))) if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } _, err = index.Fields() if err != ErrorIndexClosed { t.Errorf("expected error index closed, got %v", err) } }
func TestDocumentFieldArrayPositions(t *testing.T) { defer func() { err := os.RemoveAll("testidx") if err != nil { t.Fatal(err) } }() index, err := New("testidx", NewIndexMapping()) if err != nil { t.Fatal(err) } // index a document with an array of strings err = index.Index("k", struct { Messages []string }{ Messages: []string{ "first", "second", "third", "last", }, }) if err != nil { t.Fatal(err) } // load the document doc, err := index.Document("k") if err != nil { t.Fatal(err) } for _, f := range doc.Fields { if reflect.DeepEqual(f.Value(), []byte("first")) { ap := f.ArrayPositions() if len(ap) < 1 { t.Errorf("expected an array position, got none") continue } if ap[0] != 0 { t.Errorf("expected 'first' in array position 0, got %d", ap[0]) } } if reflect.DeepEqual(f.Value(), []byte("second")) { ap := f.ArrayPositions() if len(ap) < 1 { t.Errorf("expected an array position, got none") continue } if ap[0] != 1 { t.Errorf("expected 'second' in array position 1, got %d", ap[0]) } } if reflect.DeepEqual(f.Value(), []byte("third")) { ap := f.ArrayPositions() if len(ap) < 1 { t.Errorf("expected an array position, got none") continue } if ap[0] != 2 { t.Errorf("expected 'third' in array position 2, got %d", ap[0]) } } if reflect.DeepEqual(f.Value(), []byte("last")) { ap := f.ArrayPositions() if len(ap) < 1 { t.Errorf("expected an array position, got none") continue } if ap[0] != 3 { t.Errorf("expected 'last' in array position 3, got %d", ap[0]) } } } // now index a document in the same field with a single string err = index.Index("k2", struct { Messages string }{ Messages: "only", }) if err != nil { t.Fatal(err) } // load the document doc, err = index.Document("k2") if err != nil { t.Fatal(err) } for _, f := range doc.Fields { if reflect.DeepEqual(f.Value(), []byte("only")) { ap := f.ArrayPositions() if len(ap) != 0 { t.Errorf("expected no array positions, got %d", len(ap)) continue } } } err = index.Close() if err != nil { t.Fatal(err) } }
func TestCrud(t *testing.T) { defer func() { err := os.RemoveAll("testidx") if err != nil { t.Fatal(err) } }() index, err := New("testidx", NewIndexMapping()) if err != nil { t.Fatal(err) } doca := map[string]interface{}{ "name": "marty", "desc": "gophercon india", } err = index.Index("a", doca) if err != nil { t.Error(err) } docy := map[string]interface{}{ "name": "jasper", "desc": "clojure", } err = index.Index("y", docy) if err != nil { t.Error(err) } err = index.Delete("y") if err != nil { t.Error(err) } docx := map[string]interface{}{ "name": "rose", "desc": "googler", } err = index.Index("x", docx) if err != nil { t.Error(err) } err = index.SetInternal([]byte("status"), []byte("pending")) if err != nil { t.Error(err) } docb := map[string]interface{}{ "name": "steve", "desc": "cbft master", } batch := index.NewBatch() err = batch.Index("b", docb) if err != nil { t.Error(err) } batch.Delete("x") batch.SetInternal([]byte("batchi"), []byte("batchv")) batch.DeleteInternal([]byte("status")) err = index.Batch(batch) if err != nil { t.Error(err) } val, err := index.GetInternal([]byte("batchi")) if err != nil { t.Error(err) } if string(val) != "batchv" { t.Errorf("expected 'batchv', got '%s'", val) } val, err = index.GetInternal([]byte("status")) if err != nil { t.Error(err) } if val != nil { t.Errorf("expected nil, got '%s'", val) } err = index.SetInternal([]byte("seqno"), []byte("7")) if err != nil { t.Error(err) } err = index.SetInternal([]byte("status"), []byte("ready")) if err != nil { t.Error(err) } err = index.DeleteInternal([]byte("status")) if err != nil { t.Error(err) } val, err = index.GetInternal([]byte("status")) if err != nil { t.Error(err) } if val != nil { t.Errorf("expected nil, got '%s'", val) } val, err = index.GetInternal([]byte("seqno")) if err != nil { t.Error(err) } if string(val) != "7" { t.Errorf("expected '7', got '%s'", val) } // close the index, open it again, and try some more things err = index.Close() if err != nil { t.Fatal(err) } index, err = Open("testidx") if err != nil { t.Fatal(err) } defer func() { err := index.Close() if err != nil { t.Fatal(err) } }() count, err := index.DocCount() if err != nil { t.Fatal(err) } if count != 2 { t.Errorf("expected doc count 2, got %d", count) } doc, err := index.Document("a") if err != nil { t.Fatal(err) } if doc == nil { t.Errorf("expected doc not nil, got nil") } foundNameField := false for _, field := range doc.Fields { if field.Name() == "name" && string(field.Value()) == "marty" { foundNameField = true } } if !foundNameField { t.Errorf("expected to find field named 'name' with value 'marty'") } fields, err := index.Fields() if err != nil { t.Fatal(err) } expectedFields := map[string]bool{ "_all": false, "name": false, "desc": false, } if len(fields) != len(expectedFields) { t.Fatalf("expected %d fields got %d", len(expectedFields), len(fields)) } for _, f := range fields { expectedFields[f] = true } for ef, efp := range expectedFields { if !efp { t.Errorf("field %s is missing", ef) } } }