From 96dc69baff652eb2aeec6f4ed2439ea9e99f72e5 Mon Sep 17 00:00:00 2001 From: Z-G-H1 <1582696958@qq.com> Date: Wed, 26 Nov 2025 15:18:38 +0800 Subject: [PATCH] add auto test case --- tests/integration/network_stability_test.go | 57 +++++++++++++++++++++ tests/integration/server_test.go | 47 +++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 tests/integration/network_stability_test.go diff --git a/tests/integration/network_stability_test.go b/tests/integration/network_stability_test.go new file mode 100644 index 0000000000..0d9731c44c --- /dev/null +++ b/tests/integration/network_stability_test.go @@ -0,0 +1,57 @@ +package pika_integration + +import ( + "net" + . "github.com/bsm/ginkgo/v2" + . "github.com/bsm/gomega" +) + +var _ = Describe("Telnet", func() { + Describe("core dump fix", func() { + It("should handle empty commands without crashing (telnet core dump fix)", func() { + conn, err := net.Dial("tcp", SINGLEADDR) + Expect(err).NotTo(HaveOccurred()) + defer conn.Close() + + _, err = conn.Write([]byte("\n")) + Expect(err).NotTo(HaveOccurred()) + + _, err = conn.Write([]byte("*1\r\n$4\r\nPING\r\n")) + Expect(err).NotTo(HaveOccurred()) + + buf := make([]byte, 1024) + n, err := conn.Read(buf) + Expect(err).NotTo(HaveOccurred()) + response := string(buf[:n]) + Expect(response).To(ContainSubstring("+PONG")) + + _, err = conn.Write([]byte("*2\r\n$4\r\nECHO\r\n$4\r\nTEST\r\n")) + Expect(err).NotTo(HaveOccurred()) + + n, err = conn.Read(buf) + Expect(err).NotTo(HaveOccurred()) + response = string(buf[:n]) + Expect(response).To(ContainSubstring("$4\r\nTEST")) + }) + + It("should handle multiple empty commands without crashing", func() { + conn, err := net.Dial("tcp", SINGLEADDR) + Expect(err).NotTo(HaveOccurred()) + defer conn.Close() + + for i := 0; i < 5; i++ { + _, err = conn.Write([]byte("\r\n")) + Expect(err).NotTo(HaveOccurred()) + } + + _, err = conn.Write([]byte("*1\r\n$4\r\nPING\r\n")) + Expect(err).NotTo(HaveOccurred()) + + buf := make([]byte, 1024) + n, err := conn.Read(buf) + Expect(err).NotTo(HaveOccurred()) + response := string(buf[:n]) + Expect(response).To(ContainSubstring("+PONG")) + }) + }) +}) \ No newline at end of file diff --git a/tests/integration/server_test.go b/tests/integration/server_test.go index 09d11ff639..b19183fbbb 100644 --- a/tests/integration/server_test.go +++ b/tests/integration/server_test.go @@ -434,6 +434,31 @@ var _ = Describe("Server", func() { Expect(configRewrite.Err()).NotTo(HaveOccurred()) Expect(configRewrite.Val()).To(Equal("OK")) }) + + // Test for cache-value-item-max-size & max-key-size-in-cache + It("should handle cache size configurations correctly", func() { + configGet := client.ConfigGet(ctx, "cache-value-item-max-size") + Expect(configGet.Err()).NotTo(HaveOccurred()) + Expect(configGet.Val()).To(HaveKey("cache-value-item-max-size")) + + configGet2 := client.ConfigGet(ctx, "max-key-size-in-cache") + Expect(configGet2.Err()).NotTo(HaveOccurred()) + Expect(configGet2.Val()).To(HaveKey("max-key-size-in-cache")) + + configSet1 := client.ConfigSet(ctx, "cache-value-item-max-size", "1024") + Expect(configSet1.Err()).NotTo(HaveOccurred()) + Expect(configSet1.Val()).To(Equal("OK")) + + configSet2 := client.ConfigSet(ctx, "max-key-size-in-cache", "1048576") + Expect(configSet2.Err()).NotTo(HaveOccurred()) + Expect(configSet2.Val()).To(Equal("OK")) + + configGet3 := client.ConfigGet(ctx, "cache-value-item-max-size") + Expect(configGet3.Val()["cache-value-item-max-size"]).To(Equal("1024")) + + configGet4 := client.ConfigGet(ctx, "max-key-size-in-cache") + Expect(configGet4.Val()["max-key-size-in-cache"]).To(Equal("1048576")) + }) //It("should DBSize", func() { // Expect(client.Set(ctx, "key", "value", 0).Val()).To(Equal("OK")) // Expect(client.Do(ctx, "info", "keyspace", "1").Err()).NotTo(HaveOccurred()) @@ -794,5 +819,27 @@ var _ = Describe("Server", func() { Expect(client.Get(ctx, "foo").Err()).To(MatchError(redis.Nil)) Expect(client.Get(ctx, "key1").Err()).To(MatchError(redis.Nil)) }) + + //fix: added the correct loading of admin-cmd-list in the configuration file + It("should load admin-cmd-list from config correctly", func() { + configGet := client.ConfigGet(ctx, "admin-cmd-list") + Expect(configGet.Err()).NotTo(HaveOccurred()) + Expect(configGet.Val()).To(HaveLen(1)) + + adminCmdList, ok := configGet.Val()["admin-cmd-list"] + Expect(ok).To(BeTrue()) + + Expect(adminCmdList).To(ContainSubstring("auth")) + Expect(adminCmdList).To(ContainSubstring("config")) + Expect(adminCmdList).To(ContainSubstring("info")) + Expect(adminCmdList).To(ContainSubstring("ping")) + Expect(adminCmdList).To(ContainSubstring("monitor")) + }) + + // fix add auth command to admin-thread-pool + It("should process auth command in admin thread pool", func() { + auth := client.Do(ctx, "auth", "wrongpassword") + Expect(auth.Err()).To(HaveOccurred()) + }) }) })