From 8da9a835c12a1b2e69aa13b3e94cfb0bb3e6aa7e Mon Sep 17 00:00:00 2001 From: finley Date: Sat, 5 Jul 2025 20:37:25 +0800 Subject: [PATCH] test and protect edge case --- database/slowlog.go | 3 +++ database/slowlog_test.go | 26 +++++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/database/slowlog.go b/database/slowlog.go index 3e7e1c9..62f858a 100644 --- a/database/slowlog.go +++ b/database/slowlog.go @@ -42,6 +42,9 @@ func NewSlowLogger(maxEntries int, threshold int64) *SlowLogger { } func (sl *SlowLogger) Record(start time.Time, args [][]byte, client string) { + if sl == nil || len(sl.entries) == 0 { + return + } duration := time.Since(start) micros := duration.Microseconds() diff --git a/database/slowlog_test.go b/database/slowlog_test.go index 87d60a6..8de54c9 100644 --- a/database/slowlog_test.go +++ b/database/slowlog_test.go @@ -12,18 +12,26 @@ import ( func TestSlowLogger_Record(t *testing.T) { logger := NewSlowLogger(5, 1000) - start := time.Now() - time.Sleep(2 * time.Millisecond) - - logger.Record(start, utils.ToCmdLine("GET", "key1"), "127.0.0.1:12345") - - if logger.Len() != 1 { - t.Errorf("Expected 1 entry, got %d", logger.Len()) + start := time.Now().Add(-time.Minute) + for i := 0; i < 10; i++ { + logger.Record(start, utils.ToCmdLine("GET", strconv.Itoa(i)), "127.0.0.1:12345") } + if logger.Len() != 5 { + t.Errorf("Expected 1 entry, got %d", logger.Len()) + } + for i, e := range logger.entries { + actual := string(e.Command[1]) + expect := strconv.Itoa(i+5) + if actual != expect { + t.Errorf("Expected %s, got %s", expect, actual) + } + } + + logger2 := NewSlowLogger(5, 1000) start = time.Now() - logger.Record(start, utils.ToCmdLine("SET", "key2"), "127.0.0.1:12346") - if logger.Len() != 1 { + logger2.Record(start, utils.ToCmdLine("SET", "key2"), "127.0.0.1:12346") + if logger2.Len() != 0 { t.Errorf("Below threshold query should not be recorded, got %d entries", logger.Len()) } }