-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmethods_test.go
More file actions
98 lines (85 loc) · 2.4 KB
/
methods_test.go
File metadata and controls
98 lines (85 loc) · 2.4 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package kvdb
import (
"bytes"
"errors"
"fmt"
"strings"
"testing"
)
type failStore struct{}
func (f *failStore) GetFile(filePath string) ([]byte, error) { return nil, nil }
func (f *failStore) SetFile(filePath string, data []byte) error { return errors.New("disk full") }
func (f *failStore) AddToFile(filePath string, data []byte) error {
return errors.New("disk full")
}
func TestGet(t *testing.T) {
store := newMockStore()
db, _ := New("test.db", nil, store)
db.Set("foo", "bar")
t.Run("gets an existing key", func(t *testing.T) {
val, err := db.Get("foo")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if val != "bar" {
t.Errorf("expected value 'bar', got '%s'", val)
}
})
t.Run("returns an error for a non-existent key", func(t *testing.T) {
_, err := db.Get("baz")
if err == nil {
t.Fatal("expected an error, got nil")
}
})
}
func TestSet(t *testing.T) {
store := newMockStore()
db, _ := New("test.db", nil, store)
t.Run("sets a new key-value pair", func(t *testing.T) {
err := db.Set("foo", "bar")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
val, _ := db.Get("foo")
if val != "bar" {
t.Errorf("expected value 'bar', got '%s'", val)
}
})
t.Run("updates an existing key", func(t *testing.T) {
err := db.Set("foo", "baz")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
val, _ := db.Get("foo")
if val != "baz" {
t.Errorf("expected value 'baz', got '%s'", val)
}
})
}
func TestLogger(t *testing.T) {
store := newMockStore()
var buf bytes.Buffer
logger := func(args ...any) { fmt.Fprintln(&buf, args...) }
db, _ := New("test.db", logger, store)
// Successful operations should not log
db.Set("foo", "bar")
if buf.Len() != 0 {
t.Errorf("expected no logs for successful operations, got '%s'", buf.String())
}
// Now simulate a failing store to ensure errors are logged
fs := &failStore{}
var buf2 bytes.Buffer
logger2 := func(args ...any) { fmt.Fprintln(&buf2, args...) }
db2, _ := New("test.db", logger2, fs)
// test failing append (insert)
_ = db2.Set("a", "b")
if !strings.Contains(buf2.String(), "error appending") {
t.Errorf("expected error log for failing append, got '%s'", buf2.String())
}
// test failing persist (update)
buf2.Reset()
_ = db2.Set("a", "c")
if !strings.Contains(buf2.String(), "error persisting") {
t.Errorf("expected error log for failing persist, got '%s'", buf2.String())
}
}