mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-22 04:16:38 +00:00
chore: harden hotpath profiling artifact collection (#5848)
Co-authored-by: heihutu <heihutu@gmail.com>
This commit is contained in:
+80
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
tmp_dir=$(mktemp -d)
|
||||
trap 'rm -rf "$tmp_dir"' EXIT
|
||||
|
||||
mock_bin="$tmp_dir/bin"
|
||||
mkdir -p "$mock_bin"
|
||||
|
||||
cat >"$mock_bin/ssh" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
printf 'ssh:%s\n' "$*" >>"$CALL_LOG"
|
||||
echo "profile.json.gz 128 bytes"
|
||||
echo "profile.syms.json 64 bytes"
|
||||
EOF
|
||||
|
||||
cat >"$mock_bin/scp" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
if read -r consumed; then
|
||||
printf 'scp-consumed-stdin:%s\n' "$consumed" >>"$CALL_LOG"
|
||||
exit 23
|
||||
fi
|
||||
printf 'scp:%s\n' "$*" >>"$CALL_LOG"
|
||||
dest="${@: -1}"
|
||||
mkdir -p "$dest"
|
||||
touch "$dest/copied-profile.json.gz"
|
||||
EOF
|
||||
|
||||
chmod +x "$mock_bin/ssh" "$mock_bin/scp"
|
||||
|
||||
mapping="$tmp_dir/nodes.txt"
|
||||
cat >"$mapping" <<'EOF'
|
||||
vm004 /data/rustfs/hotpath/put-1m
|
||||
vm005 /data/rustfs/hotpath/get-1m
|
||||
EOF
|
||||
|
||||
export CALL_LOG="$tmp_dir/calls.log"
|
||||
output=$("$repo_root/scripts/collect_remote_samply_artifacts.sh" \
|
||||
--mapping "$mapping" \
|
||||
--out-dir "$tmp_dir/out" \
|
||||
--ssh-bin "$mock_bin/ssh" \
|
||||
--scp-bin "$mock_bin/scp")
|
||||
|
||||
[[ "$output" == "collected_nodes=2" ]]
|
||||
[[ -f "$tmp_dir/out/vm004/copied-profile.json.gz" ]]
|
||||
[[ -f "$tmp_dir/out/vm005/copied-profile.json.gz" ]]
|
||||
[[ "$(grep -c '^scp:' "$CALL_LOG")" -eq 2 ]]
|
||||
if grep -q '^scp-consumed-stdin:' "$CALL_LOG"; then
|
||||
echo "scp consumed the mapping loop stdin" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
bad_mapping="$tmp_dir/bad-nodes.txt"
|
||||
printf 'vm004 /\n' >"$bad_mapping"
|
||||
if "$repo_root/scripts/collect_remote_samply_artifacts.sh" \
|
||||
--mapping "$bad_mapping" \
|
||||
--out-dir "$tmp_dir/bad-out" \
|
||||
--ssh-bin "$mock_bin/ssh" \
|
||||
--scp-bin "$mock_bin/scp" >"$tmp_dir/bad.stdout" 2>"$tmp_dir/bad.stderr"; then
|
||||
echo "unsafe remote directory was accepted" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -q 'path contains unsafe characters' "$tmp_dir/bad.stderr"
|
||||
|
||||
unsafe_mapping="$tmp_dir/unsafe-nodes.txt"
|
||||
printf 'vm004 /data/rustfs/hotpath/put;rm\n' >"$unsafe_mapping"
|
||||
if "$repo_root/scripts/collect_remote_samply_artifacts.sh" \
|
||||
--mapping "$unsafe_mapping" \
|
||||
--out-dir "$tmp_dir/unsafe-out" \
|
||||
--ssh-bin "$mock_bin/ssh" \
|
||||
--scp-bin "$mock_bin/scp" >"$tmp_dir/unsafe.stdout" 2>"$tmp_dir/unsafe.stderr"; then
|
||||
echo "unsafe remote path was accepted" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -q 'path contains unsafe characters' "$tmp_dir/unsafe.stderr"
|
||||
|
||||
echo "test_collect_remote_samply_artifacts: ok"
|
||||
Reference in New Issue
Block a user