package kv import ( "os" "strings" "testing" ) type row struct { key string val string valid bool } func testRow(key string, val string) row { return row{key, val, !strings.ContainsRune(key, os.PathSeparator)} } func TestOne(t *testing.T) { db, err := NewDatabse("testdb") if err != nil { t.Errorf("NewDatabase: %s", err) } table := []row{ testRow("k1", "v1"), testRow("k2", "v2"), testRow("k3/k3", "v3"), testRow("!@#\\(&", "v4"), testRow("k5\\\\k5", "v5"), testRow("k6**6", "v6"), testRow("k7\\**7", "v7"), } for _, r := range table { err = db.Set(r.key, []byte(r.val)) if err != nil { if r.valid { t.Errorf("db.Set(%+v) expected success, got error: %s", r, err) } continue } if !r.valid { t.Errorf("db.Set(%+v) expected error, got success", r) continue } val, err := db.Get(r.key) if err != nil { t.Errorf("db.Get(%+v) expected success, got error: %s", r, err) continue } if string(val) != r.val { t.Errorf("db.Get(%+v) expected val %+v, got %+v", r, r.val, string(val)) } err = db.Remove(r.key) if err != nil { t.Errorf("db.Remove(%+v) expected success, got error: %s", r, err) continue } } k := "non existstent key" _, err = db.Get(k) if err == nil || err != ErrNoSuchKey { t.Errorf("db.Get(%s) expected error (%s), got (%s):", k, ErrNoSuchKey, err) } err = db.Remove(k) if err == nil || err != ErrNoSuchKey { t.Errorf("db.Remove(%s) expected error (%s), got (%s):", k, ErrNoSuchKey, err) } }