From 441b21b234f53ddc27893794e9905d8f26cd1b20 Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Wed, 10 Jul 2024 18:38:50 -0400 Subject: [PATCH 1/8] stdstream support --- test/stdstream.sh | 19 +++++++++++++++++++ try | 8 ++++++++ 2 files changed, 27 insertions(+) create mode 100755 test/stdstream.sh diff --git a/test/stdstream.sh b/test/stdstream.sh new file mode 100755 index 00000000..cede241c --- /dev/null +++ b/test/stdstream.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +TRY_TOP="${TRY_TOP:-$(git rev-parse --show-toplevel --show-superproject-working-tree 2>/dev/null || echo "${0%/*}")}" +TRY="$TRY_TOP/try" + +cmdfile="$(mktemp)" + +cat > "$cmdfile" <<"EOF" +file /dev/stdin +file /dev/stdout +file /dev/stderr +EOF + +chmod +x "$cmdfile" + +result=$("$TRY" "$cmdfile") +expected=$(sh "$cmdfile") + +[ "$result" = "$expected" ] || exit 1 diff --git a/try b/try index fcf02f78..8fa6adf7 100755 --- a/try +++ b/try @@ -249,6 +249,10 @@ unshare --root="$SANDBOX_DIR/temproot" /bin/sh "$chroot_executable" exitcode="$?" # unmount the devices +rm "$sandbox_dir/temproot/dev/stdin" +rm "$sandbox_dir/temproot/dev/stdout" +rm "$sandbox_dir/temproot/dev/stderr" + unmount_devices "$SANDBOX_DIR" exit $exitcode @@ -262,6 +266,10 @@ unset START_DIR SANDBOX_DIR UNION_HELPER DIRS_AND_MOUNTS TRY_EXIT_STATUS unset script_to_execute chroot_executable try_mount_log mount -t proc proc /proc && +cd /dev && +ln -s /proc/self/fd/0 stdin && +ln -s /proc/self/fd/1 stdout && +ln -s /proc/self/fd/2 stderr && cd "$START_DIR" && . "$script_to_execute" EOF From c16e7e1b58650773db7eddad60c9d461920a0a14 Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Fri, 19 Jul 2024 14:23:33 -0400 Subject: [PATCH 2/8] name /dev/stdstream files directly --- try | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/try b/try index 8fa6adf7..792ca187 100755 --- a/try +++ b/try @@ -266,10 +266,9 @@ unset START_DIR SANDBOX_DIR UNION_HELPER DIRS_AND_MOUNTS TRY_EXIT_STATUS unset script_to_execute chroot_executable try_mount_log mount -t proc proc /proc && -cd /dev && -ln -s /proc/self/fd/0 stdin && -ln -s /proc/self/fd/1 stdout && -ln -s /proc/self/fd/2 stderr && +ln -s /proc/self/fd/0 /dev/stdin && +ln -s /proc/self/fd/1 /dev/stdout && +ln -s /proc/self/fd/2 /dev/stderr && cd "$START_DIR" && . "$script_to_execute" EOF From b02f867d043875c166bf26729f050e4c0f76ba1f Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Fri, 19 Jul 2024 14:23:40 -0400 Subject: [PATCH 3/8] remove quotes in heredoc --- test/stdstream.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/stdstream.sh b/test/stdstream.sh index cede241c..b66a1ca1 100755 --- a/test/stdstream.sh +++ b/test/stdstream.sh @@ -5,7 +5,7 @@ TRY="$TRY_TOP/try" cmdfile="$(mktemp)" -cat > "$cmdfile" <<"EOF" +cat > "$cmdfile" < Date: Mon, 5 Aug 2024 17:22:10 -0400 Subject: [PATCH 4/8] improve stdstream test --- test/stdstream.sh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/test/stdstream.sh b/test/stdstream.sh index b66a1ca1..9b2e1d34 100755 --- a/test/stdstream.sh +++ b/test/stdstream.sh @@ -5,15 +5,23 @@ TRY="$TRY_TOP/try" cmdfile="$(mktemp)" -cat > "$cmdfile" < "$cmdfile" <<'EOF' +read x < /dev/stdin +echo $((x * 2)) > /dev/stdout +echo $((x * 3)) > /dev/stderr + EOF chmod +x "$cmdfile" -result=$("$TRY" "$cmdfile") -expected=$(sh "$cmdfile") +# test stdout +result=$(echo 5 | "$TRY" "$cmdfile" 2>/dev/null) +expected=$(echo 5 | sh "$cmdfile" 2>/dev/null) [ "$result" = "$expected" ] || exit 1 + +# test stdout + stderr +result=$(echo 5 | "$TRY" "$cmdfile" 2>&1) + +# using grep because stdout also includes try err/warns +echo $result | grep 15 > /dev/null From fb8f29b11c333dff592fe86487be01b247f35e0a Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Mon, 5 Aug 2024 17:25:43 -0400 Subject: [PATCH 5/8] shellcheck --- test/stdstream.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/stdstream.sh b/test/stdstream.sh index 9b2e1d34..87ad2cac 100755 --- a/test/stdstream.sh +++ b/test/stdstream.sh @@ -24,4 +24,4 @@ expected=$(echo 5 | sh "$cmdfile" 2>/dev/null) result=$(echo 5 | "$TRY" "$cmdfile" 2>&1) # using grep because stdout also includes try err/warns -echo $result | grep 15 > /dev/null +echo "$result" | grep 15 > /dev/null From 8601a70c956a2abc73aaabdbf6945714c2fa0e48 Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Thu, 5 Sep 2024 23:57:57 -0400 Subject: [PATCH 6/8] use files --- test/stdstream.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/test/stdstream.sh b/test/stdstream.sh index 87ad2cac..8e70f74f 100755 --- a/test/stdstream.sh +++ b/test/stdstream.sh @@ -14,14 +14,15 @@ EOF chmod +x "$cmdfile" -# test stdout -result=$(echo 5 | "$TRY" "$cmdfile" 2>/dev/null) -expected=$(echo 5 | sh "$cmdfile" 2>/dev/null) - -[ "$result" = "$expected" ] || exit 1 +try_stdout=$(mktemp) +try_stderr=$(mktemp) +sh_stdout=$(mktemp) +sh_stderr=$(mktemp) -# test stdout + stderr -result=$(echo 5 | "$TRY" "$cmdfile" 2>&1) +# test stdout +echo 5 | "$TRY" "$cmdfile" >$try_stdout 2>$try_stderr +echo 5 | sh "$cmdfile" >$sh_stdout 2>$sh_stderr -# using grep because stdout also includes try err/warns -echo "$result" | grep 15 > /dev/null +diff $try_stdout $sh_stdout || exit 1 +diff $try_stderr $sh_stderr || exit 1 +rm $try_stdout $try_stderr $sh_stdout $sh_stderr From be0d6aa0afe13428adac9898b04af483c339fe92 Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Fri, 6 Sep 2024 00:40:44 -0400 Subject: [PATCH 7/8] shellcheck and use grep instead of diff --- test/stdstream.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test/stdstream.sh b/test/stdstream.sh index 8e70f74f..4878feed 100755 --- a/test/stdstream.sh +++ b/test/stdstream.sh @@ -20,9 +20,13 @@ sh_stdout=$(mktemp) sh_stderr=$(mktemp) # test stdout -echo 5 | "$TRY" "$cmdfile" >$try_stdout 2>$try_stderr -echo 5 | sh "$cmdfile" >$sh_stdout 2>$sh_stderr +echo 5 | "$TRY" "$cmdfile" >"$try_stdout" 2>"$try_stderr" +echo 5 | sh "$cmdfile" >"$sh_stdout" 2>"$sh_stderr" -diff $try_stdout $sh_stdout || exit 1 -diff $try_stderr $sh_stderr || exit 1 -rm $try_stdout $try_stderr $sh_stdout $sh_stderr +diff "$try_stdout" "$sh_stdout" || exit 1 + +# using grep because there's try errors printed +grep -q 15 "$try_stderr" +grep -q 15 "$sh_stderr" + +rm "$try_stdout" "$try_stderr" "$sh_stdout" "$sh_stderr" From af57a02810bdac02c4f7299994600b2f581165a7 Mon Sep 17 00:00:00 2001 From: Ezri Zhu Date: Tue, 17 Sep 2024 21:37:13 -0400 Subject: [PATCH 8/8] fd test --- test/stdstream.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/stdstream.sh b/test/stdstream.sh index 4878feed..e7a3e22c 100755 --- a/test/stdstream.sh +++ b/test/stdstream.sh @@ -30,3 +30,22 @@ grep -q 15 "$try_stderr" grep -q 15 "$sh_stderr" rm "$try_stdout" "$try_stderr" "$sh_stdout" "$sh_stderr" + +cat > "$cmdfile" <<'EOF' +read x <&0 +echo $((x * 2)) >&1 +echo $((x * 3)) >&2 + +EOF + +# test stdout +echo 5 | "$TRY" "$cmdfile" >"$try_stdout" 2>"$try_stderr" +echo 5 | sh "$cmdfile" >"$sh_stdout" 2>"$sh_stderr" + +diff "$try_stdout" "$sh_stdout" || exit 1 + +# using grep because there's try errors printed +grep -q 15 "$try_stderr" +grep -q 15 "$sh_stderr" + +rm "$try_stdout" "$try_stderr" "$sh_stdout" "$sh_stderr"