diff options
Diffstat (limited to 'kv_test.go')
-rw-r--r-- | kv_test.go | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/kv_test.go b/kv_test.go new file mode 100644 index 0000000..0e22ad9 --- /dev/null +++ b/kv_test.go @@ -0,0 +1,74 @@ +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) + } +} |