This is an automated email from the ASF dual-hosted git repository.
hulk pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new cddbccd6b fix(test): flaky test case in KMETADTA command (#3150)
cddbccd6b is described below
commit cddbccd6b118f8287dbfa57ed317e36251f4a330
Author: hulk <[email protected]>
AuthorDate: Sat Aug 30 16:14:54 2025 +0800
fix(test): flaky test case in KMETADTA command (#3150)
The root cause is generating random strings in a short time
and using them to create fields for Hash/Set/ZSet.
To fix this issue, just avoid using random strings if unnecessary
which will also make the code more concise.
```
--- FAIL: TestKMetadata (1.04s)
--- FAIL: TestKMetadata/Test_KMetadata_for_set_type (0.00s)
kmetadata_test.go:170:
Error Trace:
/__w/kvrocks/kvrocks/tests/gocase/unit/kmetadata/kmetadata_test.go:170
Error: Not equal:
expected: 4
actual : 3
Test: TestKMetadata/Test_KMetadata_for_set_type
FAIL
```
---
.github/workflows/kvrocks.yaml | 2 +-
tests/gocase/unit/kmetadata/kmetadata_test.go | 148 ++++++++++----------------
2 files changed, 55 insertions(+), 95 deletions(-)
diff --git a/.github/workflows/kvrocks.yaml b/.github/workflows/kvrocks.yaml
index 5b83f4308..5e7cd6e91 100644
--- a/.github/workflows/kvrocks.yaml
+++ b/.github/workflows/kvrocks.yaml
@@ -522,7 +522,7 @@ jobs:
- name: Setup openSUSE
if: ${{ startsWith(matrix.image, 'opensuse') }}
run: |
- zypper install -y gcc11 gcc11-c++ make wget git autoconf automake
python3 python3-pip curl tar gzip cmake go
+ zypper install -y gcc11 gcc11-c++ make wget git autoconf automake
python3 python3-pip curl tar gzip cmake go which
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-11 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-11 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
diff --git a/tests/gocase/unit/kmetadata/kmetadata_test.go
b/tests/gocase/unit/kmetadata/kmetadata_test.go
index adfabc132..87e5bdfdf 100644
--- a/tests/gocase/unit/kmetadata/kmetadata_test.go
+++ b/tests/gocase/unit/kmetadata/kmetadata_test.go
@@ -25,7 +25,6 @@ import (
"testing"
"github.com/redis/go-redis/v9"
- "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/apache/kvrocks/tests/gocase/util"
@@ -111,138 +110,99 @@ var testKMetadata = func(t *testing.T, configs
util.KvrocksServerConfigs) {
defer func() { require.NoError(t, rdb.Close()) }()
t.Run("Test KMetadata for String type", func(t *testing.T) {
- key := "__avoid_collisions__" + "_KMetadataString_" +
util.RandString(1, 10, util.Alpha)
- val := "__avoid_collisions__" + "_KMetadataString_" +
util.RandString(1, 10, util.Alpha)
- rdb.Set(ctx, key, val, 0)
+ key := "string_" + util.RandString(1, 10, util.Alpha)
+ val := util.RandString(1, 10, util.Alpha)
+ require.NoError(t, rdb.Set(ctx, key, val, 0).Err())
+ // Test KMetadata for string type
r := rdb.Do(ctx, "kmetadata", key)
result, err := r.Result()
- if err != nil {
- t.Fatalf("Command failed: %v", err)
- }
+ require.NoError(t, err)
+
metaResponse, err := ExtractKMetadataResponse(result)
- if err != nil {
- t.Fatalf("Failed to extract response: %v", err)
- }
- assert.Equal(t, "string", metaResponse.ktype)
- assert.Equal(t, int64(0), metaResponse.version)
- assert.Equal(t, int64(0), metaResponse.size)
+ require.NoError(t, err)
+ require.Equal(t, "string", metaResponse.ktype)
+ require.Equal(t, int64(0), metaResponse.version)
+ require.Equal(t, int64(0), metaResponse.size)
})
t.Run("Test KMetadata for hash type", func(t *testing.T) {
- key := "__avoid_collisions__" + "_kMetadataHash_" +
util.RandString(1, 10, util.Alpha)
- f1 := "__avoid_collisions__" + "_kMetadataHash_" +
util.RandString(1, 10, util.Alpha)
- v1 := "__avoid_collisions__" + "_kMetadataHash_" +
util.RandString(1, 10, util.Alpha)
- f2 := "__avoid_collisions__" + "_kMetadataHash_" +
util.RandString(1, 10, util.Alpha)
- v2 := "__avoid_collisions__" + "_kMetadataHash_" +
util.RandString(1, 10, util.Alpha)
- rdb.HSet(ctx, key, f1, v1, f2, v2)
+ key := "hash_" + util.RandString(1, 10, util.Alpha)
+ require.NoError(t, rdb.HSet(ctx, key, "f0", "v0", "f1",
"v1").Err())
r := rdb.Do(ctx, "kmetadata", key)
result, err := r.Result()
- if err != nil {
- t.Fatalf("Command failed: %v", err)
- }
+ require.NoError(t, err)
+
metaResponse, err := ExtractKMetadataResponse(result)
- if err != nil {
- t.Fatalf("Failed to extract response: %v", err)
- }
- assert.Equal(t, "hash", metaResponse.ktype)
- assert.NotEqual(t, int64(0), metaResponse.version)
- assert.Equal(t, int64(2), metaResponse.size)
+ require.NoError(t, err)
+ require.Equal(t, "hash", metaResponse.ktype)
+ require.NotEqual(t, int64(0), metaResponse.version)
+ require.Equal(t, int64(2), metaResponse.size)
})
t.Run("Test KMetadata for set type", func(t *testing.T) {
- setName := "__avoid_collisions__" + "_kMetadataSet_" +
util.RandString(1, 10, util.Alpha)
- item1 := "__avoid_collisions__" + "_kMetadataSet_" +
util.RandString(1, 10, util.Alpha)
- item2 := "__avoid_collisions__" + "_kMetadataSet_" +
util.RandString(1, 10, util.Alpha)
- item3 := "__avoid_collisions__" + "_kMetadataSet_" +
util.RandString(1, 10, util.Alpha)
- item4 := "__avoid_collisions__" + "_kMetadataSet_" +
util.RandString(1, 10, util.Alpha)
- rdb.SAdd(ctx, setName, item1, item2, item3, item4)
+ setName := "set_" + util.RandString(1, 10, util.Alpha)
+ require.NoError(t, rdb.SAdd(ctx, setName, "e0", "e1", "e2",
"e3").Err())
r := rdb.Do(ctx, "kmetadata", setName)
result, err := r.Result()
- if err != nil {
- t.Fatalf("Command failed: %v", err)
- }
+ require.NoError(t, err)
+
metaResponse, err := ExtractKMetadataResponse(result)
- if err != nil {
- t.Fatalf("Failed to extract response: %v", err)
- }
- assert.Equal(t, "set", metaResponse.ktype)
- assert.NotEqual(t, int64(0), metaResponse.version)
- assert.Equal(t, int64(4), metaResponse.size)
+ require.NoError(t, err)
+ require.Equal(t, "set", metaResponse.ktype)
+ require.NotEqual(t, int64(0), metaResponse.version)
+ require.Equal(t, int64(4), metaResponse.size)
})
t.Run("Test KMetadata for zset type", func(t *testing.T) {
- zsetName := "__avoid_collisions__" + "_kMetadataZSet_" +
util.RandString(1, 10, util.Alpha)
+ zsetName := "zset_" + util.RandString(1, 10, util.Alpha)
members := []redis.Z{
- {
- Score: 1.0,
- Member: "__avoid_collisions__" +
"_kMetadataZSet_" + util.RandString(1, 10, util.Alpha),
- },
- {
- Score: 2.0,
- Member: "__avoid_collisions__" +
"_kMetadataZSet_" + util.RandString(1, 10, util.Alpha),
- },
- {
- Score: 3.0,
- Member: "__avoid_collisions__" +
"_kMetadataZSet_" + util.RandString(1, 10, util.Alpha),
- },
+ {Score: 1.0, Member: "m0"},
+ {Score: 2.0, Member: "m1"},
+ {Score: 3.0, Member: "m2"},
}
rdb.ZAdd(ctx, zsetName, members...)
r := rdb.Do(ctx, "kmetadata", zsetName)
result, err := r.Result()
- if err != nil {
- t.Fatalf("Command failed: %v", err)
- }
+ require.NoError(t, err)
+
metaResponse, err := ExtractKMetadataResponse(result)
- if err != nil {
- t.Fatalf("Failed to extract response: %v", err)
- }
- assert.Equal(t, "zset", metaResponse.ktype)
- assert.NotEqual(t, int64(0), metaResponse.version)
- assert.Equal(t, int64(3), metaResponse.size)
+ require.NoError(t, err)
+ require.Equal(t, "zset", metaResponse.ktype)
+ require.NotEqual(t, int64(0), metaResponse.version)
+ require.Equal(t, int64(3), metaResponse.size)
})
t.Run("Test KMetadata for Bitmap type", func(t *testing.T) {
- bitMapKey := "__avoid_collisions__" + "_kMetadataBitMap_" +
util.RandString(1, 10, util.Alpha)
- rdb.SetBit(ctx, bitMapKey, 0, 1)
+ bitMapKey := "bitmap_" + util.RandString(1, 10, util.Alpha)
+ require.NoError(t, rdb.SetBit(ctx, bitMapKey, 0, 1).Err())
r := rdb.Do(ctx, "kmetadata", bitMapKey)
result, err := r.Result()
- if err != nil {
- t.Fatalf("Command failed: %v", err)
- }
+ require.NoError(t, err)
+
metaResponse, err := ExtractKMetadataResponse(result)
- if err != nil {
- t.Fatalf("Failed to extract response: %v", err)
- }
- assert.Equal(t, "bitmap", metaResponse.ktype)
- assert.NotEqual(t, int64(0), metaResponse.version)
- assert.Equal(t, int64(1), metaResponse.size)
+ require.NoError(t, err)
+ require.Equal(t, "bitmap", metaResponse.ktype)
+ require.NotEqual(t, int64(0), metaResponse.version)
+ require.Equal(t, int64(1), metaResponse.size)
})
t.Run("Test KMetadata for List type", func(t *testing.T) {
- listKey := "__avoid_collisions__" + "_kMetadataList_" +
util.RandString(1, 10, util.Alpha)
- item1 := "__avoid_collisions__" + "_kMetadataList_" +
util.RandString(1, 10, util.Alpha)
- item2 := "__avoid_collisions__" + "_kMetadataList_" +
util.RandString(1, 10, util.Alpha)
- rdb.RPush(ctx, listKey, item1, item2)
+ listKey := "list_" + util.RandString(1, 10, util.Alpha)
+ require.NoError(t, rdb.RPush(ctx, listKey, "a", "b").Err())
r := rdb.Do(ctx, "kmetadata", listKey)
result, err := r.Result()
- if err != nil {
- t.Fatalf("Command failed: %v", err)
- }
+ require.NoError(t, err)
+
metaResponse, err := ExtractKMetadataResponse(result)
- if err != nil {
- t.Fatalf("Failed to extract response: %v", err)
- }
- assert.Equal(t, "list", metaResponse.ktype)
- assert.NotEqual(t, int64(0), metaResponse.version)
- assert.Equal(t, int64(2), metaResponse.size)
+ require.NoError(t, err)
+ require.Equal(t, "list", metaResponse.ktype)
+ require.NotEqual(t, int64(0), metaResponse.version)
+ require.Equal(t, int64(2), metaResponse.size)
})
t.Run("Test Key not present", func(t *testing.T) {
- notFoundKey := "__avoid_collisions__" + "_kMetadataNotFound_" +
util.RandString(1, 10, util.Alpha)
+ notFoundKey := "not_found_" + util.RandString(1, 10, util.Alpha)
r := rdb.Do(ctx, "kmetadata", notFoundKey)
- val := r.Val()
- assert.Equal(t, nil, val)
- assert.Error(t, r.Err())
+ require.NotNil(t, r.Err())
})
-
}