mirror of
https://gh.wpcy.net/https://github.com/kejilion/sh.git
synced 2026-04-24 00:12:26 +08:00
77 lines
2.3 KiB
Bash
Executable file
77 lines
2.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
repo_root=$(cd "$(dirname "$0")/.." && pwd)
|
|
script="$repo_root/kejilion.sh"
|
|
|
|
workdir=$(mktemp -d)
|
|
trap 'rm -rf "$workdir"' EXIT
|
|
export HOME="$workdir/home"
|
|
mkdir -p "$HOME/.openclaw"
|
|
|
|
python_extract() {
|
|
python3 - "$script" <<'PY'
|
|
import re, sys
|
|
text = open(sys.argv[1], encoding='utf-8').read()
|
|
patterns = [
|
|
r'openclaw_get_config_file\(\) \{.*?\n\t\t\}',
|
|
r'openclaw_memory_config_file\(\) \{.*?\n\t\}',
|
|
r'openclaw_permission_config_file\(\) \{.*?\n\t\}',
|
|
]
|
|
for pat in patterns:
|
|
m = re.search(pat, text, re.S)
|
|
if not m:
|
|
raise SystemExit(f'missing pattern: {pat}')
|
|
print(m.group(0))
|
|
print()
|
|
PY
|
|
}
|
|
|
|
snippet="$workdir/snippet.sh"
|
|
{
|
|
echo '#!/usr/bin/env bash'
|
|
echo 'set -euo pipefail'
|
|
python_extract
|
|
cat <<'SH'
|
|
main() {
|
|
echo "CFG=$(openclaw_get_config_file)"
|
|
echo "MEM=$(openclaw_memory_config_file)"
|
|
echo "PERM=$(openclaw_permission_config_file)"
|
|
}
|
|
main "$@"
|
|
SH
|
|
} > "$snippet"
|
|
chmod +x "$snippet"
|
|
|
|
assert_eq() {
|
|
local got="$1" expected="$2" msg="$3"
|
|
if [ "$got" != "$expected" ]; then
|
|
echo "ASSERT FAIL: $msg"
|
|
echo "got: $got"
|
|
echo "exp: $expected"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
user_cfg="$HOME/.openclaw/openclaw.json"
|
|
root_cfg="$workdir/root/.openclaw/openclaw.json"
|
|
mkdir -p "$(dirname "$root_cfg")"
|
|
|
|
out=$("$snippet")
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '1p')" "CFG=$user_cfg" 'default config path should be user path'
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '2p')" "MEM=$user_cfg" 'memory config path should follow helper'
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '3p')" "PERM=$user_cfg" 'permission config path should follow helper'
|
|
|
|
printf '{}\n' > "$root_cfg"
|
|
rm -f "$user_cfg"
|
|
out=$("$snippet")
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '1p')" "CFG=$user_cfg" 'non-root should not silently fallback to root config'
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '2p')" "MEM=$user_cfg" 'memory config should stay in user path for non-root'
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '3p')" "PERM=$user_cfg" 'permission config should stay in user path for non-root'
|
|
|
|
mkdir -p "$(dirname "$user_cfg")"
|
|
printf '{"user":true}\n' > "$user_cfg"
|
|
out=$("$snippet")
|
|
assert_eq "$(printf '%s\n' "$out" | sed -n '1p')" "CFG=$user_cfg" 'user config should take precedence'
|
|
|
|
echo 'PASS: openclaw config path resolution smoke'
|