summaryrefslogtreecommitdiff
path: root/kv_test.go
blob: 0e22ad9c5ca671e45ef2492f6198181ebde8bbba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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)
	}
}