1 package redis_test
2
3 import (
4 "context"
5 "os"
6 "strings"
7 "testing"
8 "time"
9
10 . "github.com/bsm/ginkgo/v2"
11 . "github.com/bsm/gomega"
12
13 "github.com/redis/go-redis/v9"
14 )
15
16
17 var _ = Describe("Monitor command", Label("monitor"), func() {
18 ctx := context.TODO()
19 var client *redis.Client
20
21 BeforeEach(func() {
22 if os.Getenv("RUN_MONITOR_TEST") != "true" {
23 Skip("Skipping Monitor command test. Set RUN_MONITOR_TEST=true to run it.")
24 }
25 client = redis.NewClient(&redis.Options{Addr: redisPort})
26 Expect(client.FlushDB(ctx).Err()).NotTo(HaveOccurred())
27
28 })
29
30 AfterEach(func() {
31 Expect(client.Close()).NotTo(HaveOccurred())
32 })
33
34 It("should monitor", Label("monitor"), func() {
35 ress := make(chan string)
36 client1 := redis.NewClient(&redis.Options{Addr: redisPort})
37 mn := client1.Monitor(ctx, ress)
38 mn.Start()
39
40 time.Sleep(100 * time.Millisecond)
41 client.Set(ctx, "foo", "bar", 0)
42 client.Set(ctx, "bar", "baz", 0)
43 client.Set(ctx, "bap", 8, 0)
44 client.Get(ctx, "bap")
45 lst := []string{}
46 for i := 0; i < 5; i++ {
47 s := <-ress
48 lst = append(lst, s)
49 }
50 mn.Stop()
51 Expect(lst[0]).To(ContainSubstring("OK"))
52 Expect(lst[1]).To(ContainSubstring(`"set" "foo" "bar"`))
53 Expect(lst[2]).To(ContainSubstring(`"set" "bar" "baz"`))
54 Expect(lst[3]).To(ContainSubstring(`"set" "bap" "8"`))
55 })
56 })
57
58 func TestMonitorCommand(t *testing.T) {
59 if os.Getenv("RUN_MONITOR_TEST") != "true" {
60 t.Skip("Skipping Monitor command test. Set RUN_MONITOR_TEST=true to run it.")
61 }
62
63 ctx := context.TODO()
64 client := redis.NewClient(&redis.Options{Addr: redisPort})
65 if err := client.FlushDB(ctx).Err(); err != nil {
66 t.Fatalf("FlushDB failed: %v", err)
67 }
68
69 defer func() {
70 if err := client.Close(); err != nil {
71 t.Fatalf("Close failed: %v", err)
72 }
73 }()
74
75 ress := make(chan string, 10)
76 client1 := redis.NewClient(&redis.Options{Addr: redisPort})
77 mn := client1.Monitor(ctx, ress)
78 mn.Start()
79
80 time.Sleep(100 * time.Millisecond)
81 client.Set(ctx, "foo", "bar", 0)
82 client.Set(ctx, "bar", "baz", 0)
83 client.Set(ctx, "bap", 8, 0)
84 client.Get(ctx, "bap")
85 mn.Stop()
86 var lst []string
87 for i := 0; i < 5; i++ {
88 s := <-ress
89 lst = append(lst, s)
90 }
91
92
93 if !containsSubstring(lst[0], "OK") {
94 t.Errorf("Expected lst[0] to contain 'OK', got %s", lst[0])
95 }
96 if !containsSubstring(lst[1], `"set" "foo" "bar"`) {
97 t.Errorf(`Expected lst[1] to contain '"set" "foo" "bar"', got %s`, lst[1])
98 }
99 if !containsSubstring(lst[2], `"set" "bar" "baz"`) {
100 t.Errorf(`Expected lst[2] to contain '"set" "bar" "baz"', got %s`, lst[2])
101 }
102 if !containsSubstring(lst[3], `"set" "bap" "8"`) {
103 t.Errorf(`Expected lst[3] to contain '"set" "bap" "8"', got %s`, lst[3])
104 }
105 }
106
107 func containsSubstring(s, substr string) bool {
108 return strings.Contains(s, substr)
109 }
110
View as plain text