Skip to content

Commit a61d33b

Browse files
Z-G-H1YuCai18
authored andcommitted
test: add test for SPOP response format compatibility
1 parent 7e12e9a commit a61d33b

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package pika_integration
2+
3+
import (
4+
"net"
5+
. "github.com/bsm/ginkgo/v2"
6+
. "github.com/bsm/gomega"
7+
)
8+
9+
var _ = Describe("Telnet", func() {
10+
Describe("core dump fix", func() {
11+
It("should handle empty commands without crashing (telnet core dump fix)", func() {
12+
conn, err := net.Dial("tcp", SINGLEADDR)
13+
Expect(err).NotTo(HaveOccurred())
14+
defer conn.Close()
15+
16+
_, err = conn.Write([]byte("\n"))
17+
Expect(err).NotTo(HaveOccurred())
18+
19+
_, err = conn.Write([]byte("*1\r\n$4\r\nPING\r\n"))
20+
Expect(err).NotTo(HaveOccurred())
21+
22+
buf := make([]byte, 1024)
23+
n, err := conn.Read(buf)
24+
Expect(err).NotTo(HaveOccurred())
25+
response := string(buf[:n])
26+
Expect(response).To(ContainSubstring("+PONG"))
27+
28+
_, err = conn.Write([]byte("*2\r\n$4\r\nECHO\r\n$4\r\nTEST\r\n"))
29+
Expect(err).NotTo(HaveOccurred())
30+
31+
n, err = conn.Read(buf)
32+
Expect(err).NotTo(HaveOccurred())
33+
response = string(buf[:n])
34+
Expect(response).To(ContainSubstring("$4\r\nTEST"))
35+
})
36+
37+
It("should handle multiple empty commands without crashing", func() {
38+
conn, err := net.Dial("tcp", SINGLEADDR)
39+
Expect(err).NotTo(HaveOccurred())
40+
defer conn.Close()
41+
42+
for i := 0; i < 5; i++ {
43+
_, err = conn.Write([]byte("\r\n"))
44+
Expect(err).NotTo(HaveOccurred())
45+
}
46+
47+
_, err = conn.Write([]byte("*1\r\n$4\r\nPING\r\n"))
48+
Expect(err).NotTo(HaveOccurred())
49+
50+
buf := make([]byte, 1024)
51+
n, err := conn.Read(buf)
52+
Expect(err).NotTo(HaveOccurred())
53+
response := string(buf[:n])
54+
Expect(response).To(ContainSubstring("+PONG"))
55+
})
56+
})
57+
})

tests/unit/type/set.tcl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,31 @@ start_server {
310310
}
311311
}
312312

313+
test {SPOP response format for PHP Redis client compatibility} {
314+
r del myset
315+
r sadd myset "element1" "element2" "element3"
316+
set single_pop [r spop myset]
317+
assert {[lsearch {"element1" "element2" "element3"} $single_pop] >= 0}
318+
319+
r del myset
320+
r sadd myset "element1" "element2" "element3"
321+
set single_array_pop [r spop myset 1]
322+
assert_equal 1 [llength $single_array_pop]
323+
assert {[lsearch {"element1" "element2" "element3"} [lindex $single_array_pop 0]] >= 0}
324+
325+
r del myset
326+
r sadd myset "element1" "element2" "element3"
327+
set multi_pop [r spop myset 2]
328+
assert_equal 2 [llength $multi_pop]
329+
330+
r del emptyset
331+
set empty_pop [r spop emptyset]
332+
assert_equal {} $empty_pop
333+
334+
set empty_array_pop [r spop emptyset 1]
335+
assert_equal 0 [llength $empty_array_pop]
336+
}
337+
313338
test "SRANDMEMBER with <count> against non existing key" {
314339
r srandmember nonexisting_key 100
315340
} {}

0 commit comments

Comments
 (0)