From f22fa9594d536cb53f83ed8e508c03d4278778b0 Mon Sep 17 00:00:00 2001 From: "bodong.ybd" Date: Tue, 8 Sep 2020 10:45:03 +0800 Subject: [PATCH 1/2] Tests: Some fixes for macOS 1) cur_test: when restart_server, "no such variable" error occurs ./runtest --single integration/rdb test {client freed during loading} SET ::cur_test restart_server kill_server test "Check for memory leaks (pid $pid)" SET ::cur_test UNSET ::cur_test UNSET ::cur_test // This global variable has been unset. 2) `ps --ppid` not available on macOS platform, can be replaced with `pgrep -P pid`. --- tests/support/test.tcl | 1 - tests/support/util.tcl | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/support/test.tcl b/tests/support/test.tcl index f5b4c8bef..54d323fa2 100644 --- a/tests/support/test.tcl +++ b/tests/support/test.tcl @@ -190,5 +190,4 @@ proc test {name code {okpattern undefined} {options undefined}} { send_data_packet $::test_server_fd err "Detected a memory leak in test '$name': $output" } } - unset ::cur_test } diff --git a/tests/support/util.tcl b/tests/support/util.tcl index ed4ff713a..b9a65358f 100644 --- a/tests/support/util.tcl +++ b/tests/support/util.tcl @@ -508,8 +508,13 @@ proc populate {num prefix size} { proc get_child_pid {idx} { set pid [srv $idx pid] - set fd [open "|ps --ppid $pid -o pid" "r"] - set child_pid [string trim [lindex [split [read $fd] \n] 1]] + if {[string match {*Darwin*} [exec uname -a]]} { + set fd [open "|pgrep -P $pid" "r"] + set child_pid [string trim [lindex [split [read $fd] \n] 0]] + } else { + set fd [open "|ps --ppid $pid -o pid" "r"] + set child_pid [string trim [lindex [split [read $fd] \n] 1]] + } close $fd return $child_pid From 0a1e7341935dbca4bae582de1a4a26d5ed4c652d Mon Sep 17 00:00:00 2001 From: Oran Agra Date: Tue, 8 Sep 2020 14:12:03 +0300 Subject: [PATCH 2/2] handle cur_test for nested tests if there are nested tests and nested servers, we need to restore the previous value of cur_test when a test exist. example: ``` test{test 1} { start_server { test{test 1.1 - master only} { } start_server { test{test 1.2 - with replication} { } } } } ``` when `test 1.1 - master only exists`, we're still inside `test 1` --- tests/support/test.tcl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/support/test.tcl b/tests/support/test.tcl index 54d323fa2..55937b8f4 100644 --- a/tests/support/test.tcl +++ b/tests/support/test.tcl @@ -4,6 +4,7 @@ set ::num_failed 0 set ::num_skipped 0 set ::num_aborted 0 set ::tests_failed {} +set ::cur_test "" proc fail {msg} { error "assertion:$msg" @@ -136,6 +137,7 @@ proc test {name code {okpattern undefined} {options undefined}} { # set a cur_test global to be logged into new servers that are spown # and log the test name in all existing servers + set prev_test $::cur_test set ::cur_test "$name in $::curfile" if {!$::external} { foreach srv $::servers { @@ -190,4 +192,5 @@ proc test {name code {okpattern undefined} {options undefined}} { send_data_packet $::test_server_fd err "Detected a memory leak in test '$name': $output" } } + set ::cur_test $prev_test }