mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-10-24 20:00:01 +00:00
94 lines
3.0 KiB
Bash
94 lines
3.0 KiB
Bash
#!/bin/sh
|
|
# Run with sh tests/clash_geodata.sh [path/to/clash_modify.sh].
|
|
set -e
|
|
script=${1:-$(dirname "$0")/../scripts/starts/clash_modify.sh}
|
|
. "$script"
|
|
test_dir=$(mktemp -d)
|
|
trap 'rm -rf "$test_dir"' EXIT HUP INT TERM
|
|
|
|
setup() {
|
|
CRASHDIR="$test_dir/$1"
|
|
TMPDIR="$CRASHDIR/tmp"
|
|
BINDIR="$CRASHDIR/bin"
|
|
mkdir -p "$CRASHDIR/yamls" "$TMPDIR" "$BINDIR"
|
|
core_config="$CRASHDIR/yamls/config.yaml"
|
|
dns_mod=redir_host
|
|
yaml_char='rules proxy-groups'
|
|
yaml_user= yaml_others= yaml_dns= yaml_hosts=
|
|
printf 'mode: Rule\n' >"$TMPDIR/set.yaml"
|
|
printf ' - GEOSITE,GOOGLE,DIRECT\n' >"$TMPDIR/rules.yaml"
|
|
: >"$TMPDIR/proxy-groups.yaml"
|
|
cat >"$core_config" <<'EOF'
|
|
geodata-mode: true
|
|
geodata-loader: memconservative
|
|
geosite-matcher: succinct
|
|
geo-auto-update: true
|
|
geo-update-interval: 24
|
|
geox-url:
|
|
geoip: https://example.invalid/geoip.dat
|
|
geosite: >-
|
|
https://example.invalid/geosite.dat
|
|
mmdb: https://example.invalid/Country.mmdb
|
|
rules:
|
|
- GEOSITE,GOOGLE,DIRECT
|
|
mixed-port: 1234
|
|
EOF
|
|
}
|
|
|
|
assert_line() {
|
|
grep -qFx -- "$1" "$TMPDIR/config.yaml" || {
|
|
echo "Missing expected line: $1" >&2
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
setup inherited
|
|
merger_yaml
|
|
assert_line 'geodata-mode: true'
|
|
assert_line 'geodata-loader: memconservative'
|
|
assert_line 'geosite-matcher: succinct'
|
|
assert_line 'geo-auto-update: true'
|
|
assert_line 'geo-update-interval: 24'
|
|
assert_line ' https://example.invalid/geosite.dat'
|
|
[ "$(grep -c '^rules:' "$TMPDIR/config.yaml")" = 1 ]
|
|
! grep -q '^mixed-port: 1234' "$TMPDIR/config.yaml"
|
|
finalize_clash_yaml
|
|
[ ! -e "$TMPDIR/geodata.yaml" ]
|
|
[ ! -e "$TMPDIR/geodata_base.yaml" ]
|
|
|
|
setup overrides
|
|
printf 'geodata-mode: false\n' >"$CRASHDIR/yamls/user.yaml"
|
|
printf 'geox-url: {geosite: https://override.invalid/geosite.dat}\n' >"$CRASHDIR/yamls/others.yaml"
|
|
merger_yaml
|
|
assert_line 'geodata-mode: false'
|
|
assert_line 'geox-url: {geosite: https://override.invalid/geosite.dat}'
|
|
[ "$(grep -c '^geodata-mode:' "$TMPDIR/config.yaml")" = 1 ]
|
|
[ "$(grep -c '^geox-url:' "$TMPDIR/config.yaml")" = 1 ]
|
|
! grep -q 'example.invalid' "$TMPDIR/config.yaml"
|
|
|
|
# A rejected custom configuration must fall back to the subscription settings.
|
|
printf '#!/bin/sh\nexit 1\n' >"$TMPDIR/CrashCore"
|
|
chmod +x "$TMPDIR/CrashCore"
|
|
logger() { :; }
|
|
set +e
|
|
test_yaml
|
|
set -e
|
|
assert_line 'geodata-mode: true'
|
|
assert_line ' https://example.invalid/geosite.dat'
|
|
[ "$(grep -c '^geox-url:' "$TMPDIR/config.yaml")" = 1 ]
|
|
! grep -q 'override.invalid' "$TMPDIR/config.yaml"
|
|
|
|
setup inline
|
|
printf 'geox-url: {geosite: https://inline.invalid/geosite.dat}\ngeo-auto-update: false\n---\nmixed-port: 1234\n' >"$core_config"
|
|
merger_yaml
|
|
assert_line 'geox-url: {geosite: https://inline.invalid/geosite.dat}'
|
|
assert_line 'geo-auto-update: false'
|
|
! grep -qE '^---|^mixed-port: 1234' "$TMPDIR/config.yaml"
|
|
|
|
setup absent
|
|
printf 'rules:\n - MATCH,DIRECT\n' >"$core_config"
|
|
merger_yaml
|
|
! grep -qE '^geo(data|site|x|-)' "$TMPDIR/config.yaml"
|
|
assert_line 'mode: Rule'
|
|
echo 'PASS: inherited geodata, overrides, fallback, inline maps, cleanup and absent settings'
|