From 4ee7fae81c12f37037b8e865aca264f80ea487ff Mon Sep 17 00:00:00 2001 From: Vivek R Date: Thu, 30 May 2024 16:23:23 +0530 Subject: [PATCH] fix: Clear() should only clear the values and not session --- stores/memory/store.go | 2 +- stores/memory/store_test.go | 3 ++- stores/redis/store.go | 9 ++++++++- stores/redis/store_test.go | 11 +++++------ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/stores/memory/store.go b/stores/memory/store.go index 81ed9bd..f9e0f24 100644 --- a/stores/memory/store.go +++ b/stores/memory/store.go @@ -171,7 +171,7 @@ func (s *Store) Clear(id string) error { if !ok { return ErrInvalidSession } - delete(s.sessions, id) + s.sessions[id] = make(map[string]interface{}) return nil } diff --git a/stores/memory/store_test.go b/stores/memory/store_test.go index b4b1dbf..40c698b 100644 --- a/stores/memory/store_test.go +++ b/stores/memory/store_test.go @@ -197,7 +197,8 @@ func TestClear(t *testing.T) { err = str.Clear(id) assert.NoError(t, err) - assert.NotContains(t, str.sessions, id) + assert.Contains(t, str.sessions, id) + assert.Equal(t, len(str.sessions[id]), 0) } func TestInt(t *testing.T) { diff --git a/stores/redis/store.go b/stores/redis/store.go index 631d305..07133f1 100644 --- a/stores/redis/store.go +++ b/stores/redis/store.go @@ -190,7 +190,14 @@ func (s *Store) Delete(id string, key string) error { // Clear clears session in redis. func (s *Store) Clear(id string) error { - return s.client.Del(s.clientCtx, s.prefix+id).Err() + p := s.client.TxPipeline() + p.Del(s.clientCtx, s.prefix+id).Err() + p.HSet(s.clientCtx, s.prefix+id, defaultSessKey, "1") + if s.ttl > 0 { + p.Expire(s.clientCtx, s.prefix+id, s.ttl) + } + _, err := p.Exec(s.clientCtx) + return err } // Int converts interface to integer. diff --git a/stores/redis/store_test.go b/stores/redis/store_test.go index 4f91093..5fc70ec 100644 --- a/stores/redis/store_test.go +++ b/stores/redis/store_test.go @@ -275,17 +275,16 @@ func TestClear(t *testing.T) { err := client.HMSet(context.TODO(), str.prefix+key, defaultSessKey, "1", field1, value1, field2, value2).Err() assert.NoError(t, err) - // Check if its set - val, err := client.Exists(context.TODO(), str.prefix+key).Result() + err = str.Clear(key) assert.NoError(t, err) - assert.NotEqual(t, val, int64(0)) - err = str.Clear(key) + val, err := client.HExists(context.TODO(), str.prefix+key, defaultSessKey).Result() assert.NoError(t, err) + assert.True(t, val) - val, err = client.Exists(context.TODO(), str.prefix+key).Result() + val, err = client.HExists(context.TODO(), str.prefix+key, field1).Result() assert.NoError(t, err) - assert.Equal(t, val, int64(0)) + assert.False(t, val) } func TestInt(t *testing.T) {