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  }