...

Source file src/github.com/redis/go-redis/v9/monitor_test.go

Documentation: github.com/redis/go-redis/v9

     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  // This test is for manual use and is not part of the CI of Go-Redis.
    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  		// Wait for the Redis server to be in monitoring mode.
    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)                               // Buffer to prevent blocking
    76  	client1 := redis.NewClient(&redis.Options{Addr: redisPort}) // Adjust the Addr field as necessary
    77  	mn := client1.Monitor(ctx, ress)
    78  	mn.Start()
    79  	// Wait for the Redis server to be in monitoring mode.
    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  	// Assertions
    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