-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_test.go
More file actions
89 lines (78 loc) · 2.46 KB
/
Copy pathmain_test.go
File metadata and controls
89 lines (78 loc) · 2.46 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
// main_test.go — tests for cache-cli (run() driven against miniredis: set/get/del flow, keys -json prefix scan, unknown-command/usage exit codes, -ns namespace isolation).
package main
import (
"bytes"
"strings"
"testing"
"github.com/alicebob/miniredis/v2"
)
func mini(t *testing.T) string {
t.Helper()
mr, err := miniredis.Run()
if err != nil {
t.Fatal(err)
}
t.Cleanup(mr.Close)
return mr.Addr()
}
func exec(t *testing.T, addr string, args ...string) (int, string, string) {
t.Helper()
var out, errb bytes.Buffer
full := append([]string{"-addr", addr}, args...)
code := run(full, &out, &errb)
return code, out.String(), errb.String()
}
func TestSetGetDelFlow(t *testing.T) {
addr := mini(t)
if code, _, e := exec(t, addr, "set", "k", "hello"); code != 0 {
t.Fatalf("set exit %d: %s", code, e)
}
code, out, _ := exec(t, addr, "get", "k")
if code != 0 || strings.TrimSpace(out) != "hello" {
t.Fatalf("get got code=%d out=%q", code, out)
}
if code, _, _ := exec(t, addr, "del", "k"); code != 0 {
t.Fatal("del should succeed")
}
// Missing key → exit 1.
if code, _, _ := exec(t, addr, "get", "k"); code != 1 {
t.Fatalf("get missing should exit 1, got %d", code)
}
}
func TestKeysJSON(t *testing.T) {
addr := mini(t)
_, _, _ = exec(t, addr, "set", "user:1", "a")
_, _, _ = exec(t, addr, "set", "user:2", "b")
_, _, _ = exec(t, addr, "set", "post:1", "c")
code, out, _ := exec(t, addr, "-json", "keys", "user:")
if code != 0 {
t.Fatalf("keys exit %d", code)
}
if !strings.Contains(out, "user:1") || !strings.Contains(out, "user:2") ||
strings.Contains(out, "post:1") {
t.Fatalf("prefix scan wrong: %s", out)
}
}
func TestUnknownCommandAndUsage(t *testing.T) {
addr := mini(t)
if code, _, _ := exec(t, addr, "bogus"); code != 2 {
t.Fatalf("unknown command should exit 2, got %d", code)
}
code, out, _ := exec(t, addr, "help")
if code != 0 || !strings.Contains(out, "USAGE:") {
t.Fatalf("help should print usage and exit 0 (code=%d)", code)
}
}
func TestNamespaceFlag(t *testing.T) {
addr := mini(t)
if code, _, _ := exec(t, addr, "-ns", "svc", "set", "k", "v"); code != 0 {
t.Fatal("namespaced set failed")
}
// Same key without the namespace must miss.
if code, _, _ := exec(t, addr, "get", "k"); code != 1 {
t.Fatalf("unnamespaced get should miss, got %d", code)
}
if code, out, _ := exec(t, addr, "-ns", "svc", "get", "k"); code != 0 || strings.TrimSpace(out) != "v" {
t.Fatalf("namespaced get failed: code=%d out=%q", code, out)
}
}