mirror of
				https://github.com/redis/go-redis.git
				synced 2025-11-04 02:33:24 +03:00 
			
		
		
		
	* introduce github workflow for ci similar to the one in redis-py use prerelease for 8.0-M4 * Enable osscluster tests in CI * Add redis major version env Enable filtering test per redis major version Fix test for FT.SEARCH WITHSCORE, the default scorer has changed. fix Makefile syntax remove filter from github action fix makefile use the container name in Makefile * remove 1.20 from doctests * self review, cleanup, add comments * add comments, reorder prints, add default value for REDIS_MAJOR_VERSION
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package redis_test
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	. "github.com/bsm/ginkgo/v2"
 | 
						|
	. "github.com/bsm/gomega"
 | 
						|
 | 
						|
	"github.com/redis/go-redis/v9"
 | 
						|
)
 | 
						|
 | 
						|
// This test is for manual use and is not part of the CI of Go-Redis.
 | 
						|
var _ = Describe("Monitor command", Label("monitor"), func() {
 | 
						|
	ctx := context.TODO()
 | 
						|
	var client *redis.Client
 | 
						|
 | 
						|
	BeforeEach(func() {
 | 
						|
		if os.Getenv("RUN_MONITOR_TEST") != "true" {
 | 
						|
			Skip("Skipping Monitor command test. Set RUN_MONITOR_TEST=true to run it.")
 | 
						|
		}
 | 
						|
		client = redis.NewClient(&redis.Options{Addr: redisPort})
 | 
						|
		Expect(client.FlushDB(ctx).Err()).NotTo(HaveOccurred())
 | 
						|
 | 
						|
	})
 | 
						|
 | 
						|
	AfterEach(func() {
 | 
						|
		Expect(client.Close()).NotTo(HaveOccurred())
 | 
						|
	})
 | 
						|
 | 
						|
	It("should monitor", Label("monitor"), func() {
 | 
						|
		ress := make(chan string)
 | 
						|
		client1 := redis.NewClient(&redis.Options{Addr: redisPort})
 | 
						|
		mn := client1.Monitor(ctx, ress)
 | 
						|
		mn.Start()
 | 
						|
		// Wait for the Redis server to be in monitoring mode.
 | 
						|
		time.Sleep(100 * time.Millisecond)
 | 
						|
		client.Set(ctx, "foo", "bar", 0)
 | 
						|
		client.Set(ctx, "bar", "baz", 0)
 | 
						|
		client.Set(ctx, "bap", 8, 0)
 | 
						|
		client.Get(ctx, "bap")
 | 
						|
		lst := []string{}
 | 
						|
		for i := 0; i < 5; i++ {
 | 
						|
			s := <-ress
 | 
						|
			lst = append(lst, s)
 | 
						|
		}
 | 
						|
		mn.Stop()
 | 
						|
		Expect(lst[0]).To(ContainSubstring("OK"))
 | 
						|
		Expect(lst[1]).To(ContainSubstring(`"set" "foo" "bar"`))
 | 
						|
		Expect(lst[2]).To(ContainSubstring(`"set" "bar" "baz"`))
 | 
						|
		Expect(lst[3]).To(ContainSubstring(`"set" "bap" "8"`))
 | 
						|
	})
 | 
						|
})
 | 
						|
 | 
						|
func TestMonitorCommand(t *testing.T) {
 | 
						|
	if os.Getenv("RUN_MONITOR_TEST") != "true" {
 | 
						|
		t.Skip("Skipping Monitor command test. Set RUN_MONITOR_TEST=true to run it.")
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := context.TODO()
 | 
						|
	client := redis.NewClient(&redis.Options{Addr: redisPort})
 | 
						|
	if err := client.FlushDB(ctx).Err(); err != nil {
 | 
						|
		t.Fatalf("FlushDB failed: %v", err)
 | 
						|
	}
 | 
						|
 | 
						|
	defer func() {
 | 
						|
		if err := client.Close(); err != nil {
 | 
						|
			t.Fatalf("Close failed: %v", err)
 | 
						|
		}
 | 
						|
	}()
 | 
						|
 | 
						|
	ress := make(chan string, 10)                               // Buffer to prevent blocking
 | 
						|
	client1 := redis.NewClient(&redis.Options{Addr: redisPort}) // Adjust the Addr field as necessary
 | 
						|
	mn := client1.Monitor(ctx, ress)
 | 
						|
	mn.Start()
 | 
						|
	// Wait for the Redis server to be in monitoring mode.
 | 
						|
	time.Sleep(100 * time.Millisecond)
 | 
						|
	client.Set(ctx, "foo", "bar", 0)
 | 
						|
	client.Set(ctx, "bar", "baz", 0)
 | 
						|
	client.Set(ctx, "bap", 8, 0)
 | 
						|
	client.Get(ctx, "bap")
 | 
						|
	mn.Stop()
 | 
						|
	var lst []string
 | 
						|
	for i := 0; i < 5; i++ {
 | 
						|
		s := <-ress
 | 
						|
		lst = append(lst, s)
 | 
						|
	}
 | 
						|
 | 
						|
	// Assertions
 | 
						|
	if !containsSubstring(lst[0], "OK") {
 | 
						|
		t.Errorf("Expected lst[0] to contain 'OK', got %s", lst[0])
 | 
						|
	}
 | 
						|
	if !containsSubstring(lst[1], `"set" "foo" "bar"`) {
 | 
						|
		t.Errorf(`Expected lst[1] to contain '"set" "foo" "bar"', got %s`, lst[1])
 | 
						|
	}
 | 
						|
	if !containsSubstring(lst[2], `"set" "bar" "baz"`) {
 | 
						|
		t.Errorf(`Expected lst[2] to contain '"set" "bar" "baz"', got %s`, lst[2])
 | 
						|
	}
 | 
						|
	if !containsSubstring(lst[3], `"set" "bap" "8"`) {
 | 
						|
		t.Errorf(`Expected lst[3] to contain '"set" "bap" "8"', got %s`, lst[3])
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func containsSubstring(s, substr string) bool {
 | 
						|
	return strings.Contains(s, substr)
 | 
						|
}
 |