light-heart-labs--ods
144 行
5.0 KiB
Bash
可执行文件
144 行
5.0 KiB
Bash
可执行文件
#!/bin/bash
|
|
# test-preset-diff.sh
|
|
# Tests preset diff command
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ODS_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
ODS_CLI="$ODS_DIR/ods-cli"
|
|
|
|
# Test counters
|
|
PASS=0
|
|
FAIL=0
|
|
|
|
# Test helper functions
|
|
pass() { echo "✓ $1"; PASS=$((PASS + 1)); }
|
|
fail() { echo "✗ $1"; FAIL=$((FAIL + 1)); }
|
|
|
|
# Setup test environment
|
|
setup() {
|
|
export ODS_HOME="$ODS_DIR"
|
|
export INSTALL_DIR="$ODS_DIR"
|
|
export SCRIPT_DIR="$ODS_DIR"
|
|
# PRESETS_DIR is set by ods-cli to ${INSTALL_DIR}/presets
|
|
mkdir -p "$ODS_DIR/presets"
|
|
touch "$ODS_DIR/docker-compose.base.yml" 2>/dev/null || true
|
|
}
|
|
|
|
# Cleanup
|
|
cleanup() {
|
|
rm -rf "$ODS_DIR/presets/test-preset-"* 2>/dev/null || true
|
|
# Don't remove docker-compose.base.yml if it existed before tests
|
|
}
|
|
|
|
# Test 1: Diff command requires two arguments
|
|
test_diff_requires_args() {
|
|
local output
|
|
output=$("$ODS_CLI" preset diff 2>&1 || true)
|
|
if echo "$output" | grep -q "Usage:"; then
|
|
pass "Diff requires two arguments"
|
|
else
|
|
fail "Diff should require two arguments"
|
|
fi
|
|
}
|
|
|
|
# Test 2: Diff fails if preset doesn't exist
|
|
test_diff_nonexistent_preset() {
|
|
local output
|
|
output=$("$ODS_CLI" preset diff nonexistent1 nonexistent2 2>&1 || true)
|
|
if echo "$output" | grep -q "not found"; then
|
|
pass "Diff fails for nonexistent presets"
|
|
else
|
|
fail "Diff should fail for nonexistent presets"
|
|
fi
|
|
}
|
|
|
|
# Test 3: Diff shows no differences for identical presets
|
|
test_diff_identical() {
|
|
local presets_dir="$ODS_DIR/presets"
|
|
mkdir -p "$presets_dir/test-preset-a" "$presets_dir/test-preset-b"
|
|
echo "TIER=3" > "$presets_dir/test-preset-a/env"
|
|
echo "TIER=3" > "$presets_dir/test-preset-b/env"
|
|
echo "enabled:llama-server" > "$presets_dir/test-preset-a/extensions.list"
|
|
echo "enabled:llama-server" > "$presets_dir/test-preset-b/extensions.list"
|
|
|
|
local output
|
|
output=$("$ODS_CLI" preset diff test-preset-a test-preset-b 2>&1 || true)
|
|
if echo "$output" | grep -q "no differences"; then
|
|
pass "Diff shows no differences for identical presets"
|
|
else
|
|
fail "Diff should show no differences for identical presets"
|
|
fi
|
|
}
|
|
|
|
# Test 4: Diff detects environment variable changes
|
|
test_diff_env_changes() {
|
|
local presets_dir="$ODS_DIR/presets"
|
|
mkdir -p "$presets_dir/test-preset-c" "$presets_dir/test-preset-d"
|
|
echo "TIER=3" > "$presets_dir/test-preset-c/env"
|
|
echo "TIER=4" > "$presets_dir/test-preset-d/env"
|
|
|
|
local output
|
|
output=$("$ODS_CLI" preset diff test-preset-c test-preset-d 2>&1 || true)
|
|
if echo "$output" | grep -q "TIER"; then
|
|
pass "Diff detects environment variable changes"
|
|
else
|
|
fail "Diff should detect environment variable changes"
|
|
fi
|
|
}
|
|
|
|
# Test 5: Diff detects service state changes
|
|
test_diff_service_changes() {
|
|
local presets_dir="$ODS_DIR/presets"
|
|
mkdir -p "$presets_dir/test-preset-e" "$presets_dir/test-preset-f"
|
|
echo "enabled:llama-server" > "$presets_dir/test-preset-e/extensions.list"
|
|
echo "disabled:llama-server" > "$presets_dir/test-preset-f/extensions.list"
|
|
|
|
local output
|
|
output=$("$ODS_CLI" preset diff test-preset-e test-preset-f 2>&1 || true)
|
|
if echo "$output" | grep -q "llama-server"; then
|
|
pass "Diff detects service state changes"
|
|
else
|
|
fail "Diff should detect service state changes"
|
|
fi
|
|
}
|
|
|
|
# Test 6: Diff masks sensitive values
|
|
test_diff_masks_secrets() {
|
|
local presets_dir="$ODS_DIR/presets"
|
|
mkdir -p "$presets_dir/test-preset-g" "$presets_dir/test-preset-h"
|
|
echo "API_KEY=secret123" > "$presets_dir/test-preset-g/env"
|
|
echo "API_KEY=secret456" > "$presets_dir/test-preset-h/env"
|
|
echo "enabled:llama-server" > "$presets_dir/test-preset-g/extensions.list"
|
|
echo "enabled:llama-server" > "$presets_dir/test-preset-h/extensions.list"
|
|
|
|
local output
|
|
output=$("$ODS_CLI" preset diff test-preset-g test-preset-h 2>&1 || true)
|
|
if echo "$output" | grep -q "API_KEY" && echo "$output" | grep -q "\*\*\*"; then
|
|
pass "Diff masks sensitive values"
|
|
else
|
|
fail "Diff should mask sensitive values"
|
|
fi
|
|
}
|
|
|
|
# Run tests
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "Preset Diff Tests"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
setup
|
|
test_diff_requires_args
|
|
test_diff_nonexistent_preset
|
|
test_diff_identical
|
|
test_diff_env_changes
|
|
test_diff_service_changes
|
|
test_diff_masks_secrets
|
|
cleanup
|
|
|
|
# Summary
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "Test Results: $PASS passed, $FAIL failed"
|
|
[[ $FAIL -eq 0 ]] && exit 0 || exit 1
|