package odb_test import ( "encoding/json" "strings" "testing" "time" "git.wecise.com/wecise/odbserver/odb/test" ) func TestUpdateTagDir(t *testing.T) { g := test.TestG() var err error if _, _, err = g.Query("delete from /matrix/tagdir where domain = 'test' and creater = 'test' with version"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) if err = g.UpdateTagDir("test", "test", "fruit"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) if err = g.UpdateTagDir("test", "test", "fruit/apple"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) if err = g.UpdateTagDir("test", "test", "fruit/pear"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) if err = g.UpdateTagDir("test", "test", "fruit/pear/yellow"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) if err = g.UpdateTagDir("test", "test", "fruit/pear/green"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) if err = g.UpdateTagDir("test", "test", "vegetables/tomato"); err != nil { t.Fatal(err) } time.Sleep(1 * time.Second) // test duplicate if err = g.UpdateTagDir("test", "test", "fruit/apple/green"); err == nil { t.Fatal("Test duplicate fail") } else { if !strings.Contains(err.Error(), "already in path") { t.Error("Did not check for duplicates") } else { t.Log("Check duplicate tag success.") } } time.Sleep(1 * time.Second) data, _, err := g.Query("select name from /matrix/tagdir where domain = 'test' and creater = 'test' limit -1") if err != nil { t.Fatal(err) } if len(data) != 7 { t.Errorf("Expected to be '7' but get is '%d'", len(data)) } } func TestGetTagDir(t *testing.T) { g, err := getTestGutil() if err != nil { t.Fatal(err) } defer g.Close() node, err := g.GetTagDir("test", "test", "") if err != nil { t.Fatal(err) } b, _ := json.MarshalIndent(node, "", " ") t.Log(string(b)) } func TestMoveTagDir(t *testing.T) { g := test.TestG() if err := g.MoveTagDir("test", "test", "fruit/pear", "vegetables/tomato"); err != nil { t.Fatal(err) } data, _, err := g.Query("select name from /matrix/tagdir where domain = 'test' and creater = 'test' and path = 'vegetables/tomato/pear' refresh") if err != nil { t.Fatal(err) } if len(data) != 1 { t.Errorf("Expected to be '1' but get is '%d'", len(data)) } data, _, err = g.Query("select name from /matrix/tagdir where domain = 'test' and creater = 'test' and path like 'vegetables/tomato/pear/*' refresh") if err != nil { t.Fatal(err) } if len(data) != 2 { t.Errorf("Expected to be '2' but get is '%d'", len(data)) } data, _, err = g.Query("select name from /matrix/tagdir where domain = 'test' and creater = 'test' and (path like 'fruit/pear/*' or path = 'fruit/pear') refresh") if err != nil { t.Fatal(err) } if len(data) != 0 { t.Errorf("Expected to be '0' but get is '%d'", len(data)) } } func TestDeleteTagDir(t *testing.T) { g, err := getTestGutil() if err != nil { t.Fatal(err) } if err = g.DeleteTagDir("test", "test", "fruit"); err != nil { t.Fatal(err) } data, _, err := g.Query("select name from /matrix/tagdir where domain = 'test' and creater = 'test' and path like 'fruit*' refresh") if err != nil { t.Fatal(err) } if len(data) != 0 { t.Errorf("Expected to be '0' but get is '%d'", len(data)) } } func TestRenameTagDir(t *testing.T) { g := test.TestG() if err := g.RenameTagDir("test", "test", "vegetables/tomato/pear", "vegetables/tomato/good"); err != nil { t.Fatal(err) } data, _, err := g.Query("select name, path from /matrix/tagdir where domain = 'test' and creater = 'test' and path like 'vegetables/tomato/*' refresh") if err != nil { t.Fatal(err) } if len(data) != 3 { t.Errorf("Expected to be '3' but get is '%d'", len(data)) } else { for _, d := range data { if !strings.HasPrefix(d["path"].(string), "vegetables/tomato/good") { t.Errorf("Rename tagdir excpected to be 'vegetables/tomato/good' but get is '%s'", d["path"].(string)) } } } } func TestGutil_AddTags(t *testing.T) { g, err := getTestGutil() if err != nil { t.Fatal(err) } if _, _, err = g.Query(`delete from /matrix/tagdir where domain = 'test' with version`); err != nil { t.Fatal(err) } if _, _, err = g.Query(`create class if not exists /testtagdir () with key=manu`); err != nil { t.Fatal(err) } if _, _, err = g.Query(`delete from /testtagdir with version`); err != nil { t.Fatal(err) } ids := []interface{}{"testid1", "testid2"} for _, id := range ids { if _, _, err = g.Query(`insert into /testtagdir (id) values ('` + id.(string) + `')`); err != nil { t.Fatal(err) } } if _, _, err = g.Query(`refresh`); err != nil { t.Fatal(err) } tags := []string{"testTag1", "testTag2"} if err = g.AddTags("test", "test", ids, tags); err != nil { t.Fatal(err) } if _, _, err = g.Query(`refresh`); err != nil { t.Fatal(err) } for _, tag := range tags { ret, _, err := g.Query(`select id from /testtagdir where tags = '` + tag + `'`) if err != nil { t.Fatal(err) } if len(ret) != 2 { t.Errorf("Except result size is 2, bug get size is %d", len(ret)) } } } func TestGutil_DeleteTags(t *testing.T) { g := test.TestG() ids := []interface{}{"testid1", "testid2"} tags := []string{"testTag1", "testTag2"} if err := g.DeleteTags(ids, tags); err != nil { t.Fatal(err) } if _, _, err := g.Query(`refresh`); err != nil { t.Fatal(err) } for _, tag := range tags { ret, _, err := g.Query(`select id from /testtagdir where tags = '` + tag + `'`) if err != nil { t.Fatal(err) } if len(ret) != 0 { t.Errorf("Except result size is 0, bug get size is %d", len(ret)) } } } func TestGutil_GetTags(t *testing.T) { g := test.TestG() start := time.Now() tags, err := g.GetTags("test", "test", "", "pear", "vegetables") if err != nil { t.Fatal(err) } t.Log(time.Now().Sub(start).String()) for _, tag := range tags { t.Log(tag) } if len(tags) != 5 { t.Errorf("Except result size is 5, bug get size is %d", len(tags)) } }