From: Karel Zak Date: Fri, 22 Nov 2019 12:48:54 +0000 (+0100) Subject: tests: add script and scriptlive replay X-Git-Tag: v2.35-rc1~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85ecd3719b1e7b490dfedd8d145980b70177a6b2;p=thirdparty%2Futil-linux.git tests: add script and scriptlive replay Signed-off-by: Karel Zak --- diff --git a/tests/commands.sh b/tests/commands.sh index 9fcd488ce2..7b480dcc0b 100644 --- a/tests/commands.sh +++ b/tests/commands.sh @@ -92,6 +92,7 @@ TS_CMD_RUNUSER=${TS_CMD_RUNUSER-"${ts_commandsdir}runuser"} TS_CMD_REV=${TS_CMD_REV:-"${ts_commandsdir}rev"} TS_CMD_SCRIPT=${TS_CMD_SCRIPT-"${ts_commandsdir}script"} TS_CMD_SCRIPTREPLAY=${TS_CMD_SCRIPTREPLAY-"${ts_commandsdir}scriptreplay"} +TS_CMD_SCRIPTLIVE=${TS_CMD_SCRIPTLIVE-"${ts_commandsdir}scriptlive"} TS_CMD_SETARCH=${TS_CMD_SETARCH-"${ts_commandsdir}setarch"} TS_CMD_SETSID=${TS_CMD_SETSID-"${ts_commandsdir}setsid"} TS_CMD_SWAPLABEL=${TS_CMD_SWAPLABEL:-"${ts_commandsdir}swaplabel"} diff --git a/tests/expected/script/replay b/tests/expected/script/replay index b2aff5e263..e69de29bb2 100644 --- a/tests/expected/script/replay +++ b/tests/expected/script/replay @@ -1,9 +0,0 @@ -record script output with timing -Script started, output log file is 'typescript', timing file is 'timingfile'. -hello world -all done -Script done. -replay script output -hello world -all done - diff --git a/tests/expected/script/replay-basic b/tests/expected/script/replay-basic new file mode 100644 index 0000000000..0363253bff --- /dev/null +++ b/tests/expected/script/replay-basic @@ -0,0 +1,9 @@ +===recording +Script started, output log file is 'outlog', timing file is 'timingfile'. +hello world +all done +Script done. +===replaying +hello world +all done + diff --git a/tests/expected/script/replay-input b/tests/expected/script/replay-input new file mode 100644 index 0000000000..8da6ed2f08 --- /dev/null +++ b/tests/expected/script/replay-input @@ -0,0 +1,4 @@ +===recording +===replaying +echo "result is $(($NUMBER + 1))" + diff --git a/tests/expected/script/replay-live b/tests/expected/script/replay-live new file mode 100644 index 0000000000..9e15b1bd2a --- /dev/null +++ b/tests/expected/script/replay-live @@ -0,0 +1,7 @@ +>>> scriptlive: Starting your typescript execution by /bin/bash. +echo "result is $(($NUMBER + 1))" +$ echo "result is $(($NUMBER + 1))" +result is 124 +$ exit + +>>> scriptlive: done. diff --git a/tests/expected/script/replay-output b/tests/expected/script/replay-output new file mode 100644 index 0000000000..4aace293d7 --- /dev/null +++ b/tests/expected/script/replay-output @@ -0,0 +1,7 @@ +===recording +Script started, output log file is 'outlog', timing file is 'timingfile'. +result is 2 +Script done. +===replaying +result is 2 + diff --git a/tests/ts/script/replay b/tests/ts/script/replay index bd46b22fbd..fc8e80d849 100755 --- a/tests/ts/script/replay +++ b/tests/ts/script/replay @@ -20,19 +20,78 @@ ts_init "$*" ts_check_test_command "$TS_CMD_SCRIPT" ts_check_test_command "$TS_CMD_SCRIPTREPLAY" +ts_check_test_command "$TS_CMD_SCRIPTLIVE" -SCRIPT_FILE="$(mktemp "${TS_OUTDIR}/scXXXXXXXXXXXXX")" -TIMING_FILE="$(mktemp "${TS_OUTDIR}/tmXXXXXXXXXXXXX")" +LOG_OUT_FILE="${TS_OUTDIR}/${TS_TESTNAME}-logfile-out" +LOG_IN_FILE="${TS_OUTDIR}/${TS_TESTNAME}-logfile-in" +LOG_IO_FILE="${TS_OUTDIR}/${TS_TESTNAME}-logfile-io" +TIMING_FILE="${TS_OUTDIR}/${TS_TESTNAME}-logfile-tm" -echo "record script output with timing" >"$TS_OUTPUT" -"$TS_CMD_SCRIPT" -c "echo hello world; sleep 0.5; echo all done" \ - --timing="$TIMING_FILE" "$SCRIPT_FILE" >> $TS_OUTPUT 2>> $TS_ERRLOG +rm -f $TIMING_FILE $LOG_IN_FILE $LOG_OUT_FILE $LOG_IO_FILE -echo "replay script output" >>"$TS_OUTPUT" -"$TS_CMD_SCRIPTREPLAY" "$TIMING_FILE" "$SCRIPT_FILE" 1.5 >> $TS_OUTPUT 2>> $TS_ERRLOG -sed -i "s|$SCRIPT_FILE|typescript|g; s|$TIMING_FILE|timingfile|g" $TS_OUTPUT $TS_ERRLOG +# +# Old command line format +# +ts_init_subtest "basic" +echo "===recording" >"$TS_OUTPUT" +$TS_CMD_SCRIPT \ + --command "echo hello world; sleep 0.5; echo all done" \ + --timing="$TIMING_FILE" \ + "$LOG_OUT_FILE" >> $TS_OUTPUT 2>> $TS_ERRLOG + +echo "===replaying" >>"$TS_OUTPUT" +$TS_CMD_SCRIPTREPLAY "$TIMING_FILE" "$LOG_OUT_FILE" 1.5 >> $TS_OUTPUT 2>> $TS_ERRLOG + +sed -i "s|$TIMING_FILE|timingfile|g; s|$LOG_OUT_FILE|outlog|g" $TS_OUTPUT $TS_ERRLOG +ts_finalize_subtest + + +# +# New command line format +# +ts_init_subtest "output" +echo "===recording" >"$TS_OUTPUT" +NUMBER=1 $TS_CMD_SCRIPT \ + --command 'echo "result is $(($NUMBER + 1))"' \ + --log-out "$LOG_OUT_FILE" \ + --log-timing "$TIMING_FILE" >> $TS_OUTPUT 2>> $TS_ERRLOG + +echo "===replaying" >>"$TS_OUTPUT" +$TS_CMD_SCRIPTREPLAY \ + --log-out "$LOG_OUT_FILE" \ + --log-timing "$TIMING_FILE" >> $TS_OUTPUT 2>> $TS_ERRLOG -rm -f "$SCRIPT_FILE" "$TIMING_FILE" +sed -i "s|$TIMING_FILE|timingfile|g; s|$LOG_OUT_FILE|outlog|g" $TS_OUTPUT $TS_ERRLOG +ts_finalize_subtest + + +# +# Log input +# +ts_init_subtest "input" +echo "===recording" >"$TS_OUTPUT" +echo 'echo "result is $(($NUMBER + 1))"' | $TS_CMD_SCRIPT \ + --command 'sh' \ + --log-in "$LOG_IN_FILE" \ + --log-timing "$TIMING_FILE" >> /dev/null 2>> $TS_ERRLOG + +echo "===replaying" >>"$TS_OUTPUT" +$TS_CMD_SCRIPTREPLAY \ + --log-in "$LOG_IN_FILE" \ + --log-timing "$TIMING_FILE" >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + + +# +# Live replay +# +ts_init_subtest "live" +NUMBER=123 $TS_CMD_SCRIPTLIVE \ + --command 'sh --posix' \ + --log-in "$LOG_IN_FILE" \ + --log-timing "$TIMING_FILE" >> $TS_OUTPUT 2>> $TS_ERRLOG +sed -i 's/sh-[[:alnum:]\.]*//g' $TS_OUTPUT +ts_finalize_subtest ts_finalize