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 a7dbd746 chore(tests): refactor and enhance test cases to prevent 
flaky test failure (#2544)
a7dbd746 is described below

commit a7dbd74664496c188c3c5b6b0c17b4c6018a0700
Author: hulk <[email protected]>
AuthorDate: Fri Sep 20 21:02:19 2024 +0800

    chore(tests): refactor and enhance test cases to prevent flaky test failure 
(#2544)
---
 tests/gocase/unit/log/logclean_test.go         | 63 +++++++++++++-------------
 utils/kvrocks2redis/tests/check_consistency.py | 13 ++++--
 2 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/tests/gocase/unit/log/logclean_test.go 
b/tests/gocase/unit/log/logclean_test.go
index df3dbc36..b3d6ac80 100644
--- a/tests/gocase/unit/log/logclean_test.go
+++ b/tests/gocase/unit/log/logclean_test.go
@@ -29,40 +29,39 @@ import (
 )
 
 func TestLogClean(t *testing.T) {
-       err := os.Mkdir("/tmp/kvrocks/logfile", os.ModePerm)
-       if err != nil {
-               return
-       }
-       srv1 := util.StartServer(t, map[string]string{
-               "log-dir":            "/tmp/kvrocks/logfile",
-               "log-retention-days": "0",
-       })
-       srv1.Close()
-       files1, _ := os.ReadDir("/tmp/kvrocks/logfile")
-       time.Sleep(2000 * time.Millisecond)
-       srv2 := util.StartServer(t, map[string]string{
-               "log-dir":            "/tmp/kvrocks/logfile",
+       logDir := "/tmp/kvrocks/logfile"
+       require.NoError(t, os.RemoveAll(logDir))
+       require.NoError(t, os.MkdirAll(logDir, os.ModePerm))
+
+       srv := util.StartServer(t, map[string]string{
+               "log-dir":            logDir,
                "log-retention-days": "0",
        })
-       srv2.Close()
-       files2, _ := os.ReadDir("/tmp/kvrocks/logfile")
-       islogclear := false
-       for _, f1 := range files1 {
-               ishave := false
-               for _, f2 := range files2 {
-                       if f1.Name() == f2.Name() {
-                               ishave = true
-                               break
-                       }
-               }
-               if !ishave {
-                       islogclear = true
-                       break
-               }
-       }
-       require.Equal(t, true, islogclear)
-       err = os.RemoveAll("/tmp/kvrocks/logfile")
-       if err != nil {
+       defer srv.Close()
+
+       files1, err := os.ReadDir(logDir)
+       require.NoError(t, err)
+       if len(files1) == 0 {
                return
        }
+       require.Eventually(t, func() bool {
+               srv.Restart()
+
+               files2, err := os.ReadDir(logDir)
+               require.NoError(t, err)
+               for _, f1 := range files1 {
+                       fileExists := false
+                       for _, f2 := range files2 {
+                               if f1.Name() == f2.Name() {
+                                       fileExists = true
+                                       break
+                               }
+                       }
+                       // If the file does not exist, it means the file has 
been cleaned
+                       if !fileExists {
+                               return true
+                       }
+               }
+               return false
+       }, 10*time.Second, 200*time.Millisecond)
 }
diff --git a/utils/kvrocks2redis/tests/check_consistency.py 
b/utils/kvrocks2redis/tests/check_consistency.py
index 72477978..71b8b6b7 100644
--- a/utils/kvrocks2redis/tests/check_consistency.py
+++ b/utils/kvrocks2redis/tests/check_consistency.py
@@ -110,12 +110,17 @@ class RedisComparator:
             time.sleep(0.02)
             keys = [key, incr_key, hash_key, set_key, zset_key]
             for key in keys:
-                data_type = self.src_cli.type(key)
-                src_data, dst_data = self._compare_data([key], data_type)
-                if src_data != dst_data:
+                attempts = 0
+                while attempts <= 3:
+                    data_type = self.src_cli.type(key)
+                    src_data, dst_data = self._compare_data([key], data_type)
+                    if src_data == dst_data:
+                        break
+                    attempts += 1
+                    time.sleep(0.1)
+                else:
                     raise AssertionError(f"Data mismatch for key '{key}': 
source data: '{src_data}' destination data: '{dst_data}'")
 
-
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Redis Comparator')
     parser.add_argument('--src_host', type=str, default='127.0.0.1', 
help='Source Redis host')

Reply via email to