github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/logger/debugger_redis_test.go (about) 1 package logger 2 3 import ( 4 "strings" 5 "testing" 6 "time" 7 8 "github.com/redis/go-redis/v9" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestLogger_RedisDebugger(t *testing.T) { 14 if testing.Short() { 15 t.Skip("a redis is required for this test: test skipped due to the use of --short flag") 16 } 17 18 opt, err := redis.ParseURL("redis://localhost:6379/0") 19 require.NoError(t, err) 20 21 t.Run("Success simple instance", func(t *testing.T) { 22 dbg, err := NewRedisDebugger(redis.NewClient(opt)) 23 require.NoError(t, err) 24 defer dbg.Close() 25 26 domain := createValidName(t) 27 28 err = dbg.AddDomain(domain, time.Second) 29 require.NoError(t, err) 30 31 time.Sleep(30 * time.Millisecond) 32 33 expirationDate := dbg.ExpiresAt(domain) 34 assert.NotNil(t, expirationDate) 35 }) 36 37 t.Run("a new domain is propagated across instances", func(t *testing.T) { 38 dbg1, err := NewRedisDebugger(redis.NewClient(opt)) 39 require.NoError(t, err) 40 defer dbg1.Close() 41 42 dbg2, err := NewRedisDebugger(redis.NewClient(opt)) 43 require.NoError(t, err) 44 defer dbg2.Close() 45 46 domain := createValidName(t) 47 48 // The instance "dbg1" add the domain "foo" 49 err = dbg1.AddDomain(domain, time.Second) 50 require.NoError(t, err) 51 52 time.Sleep(30 * time.Millisecond) 53 54 // The instance "dbg2" also have the expiration 55 expirationDate := dbg2.ExpiresAt(domain) 56 assert.NotNil(t, expirationDate) 57 58 // Delete the key with "dbg2" 59 dbg2.RemoveDomain(domain) 60 61 time.Sleep(30 * time.Millisecond) 62 63 // The key doesn't exist for "dbg1" anymore 64 expirationDate = dbg1.ExpiresAt(domain) 65 assert.Nil(t, expirationDate) 66 }) 67 68 t.Run("Invalid domain name format", func(t *testing.T) { 69 dbg, err := NewRedisDebugger(redis.NewClient(opt)) 70 require.NoError(t, err) 71 72 err = dbg.AddDomain("foo/bar", time.Second) 73 assert.ErrorIs(t, err, ErrInvalidDomainFormat) 74 }) 75 } 76 77 func createValidName(t *testing.T) string { 78 return strings.ReplaceAll(t.Name(), "/", "_") 79 }