- Add end-to-end tests for complete workflow validation - Include integration tests for API and database interactions - Add unit tests for all major components and utilities - Include performance tests for payload handling - Add CLI API integration tests - Include Podman container integration tests - Add WebSocket and queue execution tests - Include shell script tests for setup validation Provides comprehensive test coverage ensuring platform reliability and functionality across all components and interactions.
154 lines
4 KiB
Bash
154 lines
4 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
# Basic script validation tests
|
|
|
|
@test "scripts directory exists" {
|
|
[ -d "scripts" ]
|
|
}
|
|
|
|
@test "tools directory exists" {
|
|
[ -d "../tools" ]
|
|
}
|
|
|
|
@test "manage.sh exists and is executable" {
|
|
[ -f "../tools/manage.sh" ]
|
|
[ -x "../tools/manage.sh" ]
|
|
}
|
|
|
|
@test "all scripts exist and are executable" {
|
|
scripts=(
|
|
"quick_start.sh"
|
|
"security_audit.sh"
|
|
"setup_ubuntu.sh"
|
|
"setup_rocky.sh"
|
|
"setup_common.sh"
|
|
"completion.sh"
|
|
)
|
|
|
|
for script in "${scripts[@]}"; do
|
|
[ -f "scripts/$script" ]
|
|
[ -x "scripts/$script" ]
|
|
done
|
|
}
|
|
|
|
@test "all scripts have proper shebang" {
|
|
scripts=(
|
|
"quick_start.sh"
|
|
"security_audit.sh"
|
|
"setup_ubuntu.sh"
|
|
"setup_rocky.sh"
|
|
"setup_common.sh"
|
|
"completion.sh"
|
|
)
|
|
|
|
for script in "${scripts[@]}"; do
|
|
run head -n1 "scripts/$script"
|
|
[ "$output" = "#!/usr/bin/env bash" ]
|
|
done
|
|
}
|
|
|
|
@test "all scripts pass syntax check" {
|
|
scripts=(
|
|
"quick_start.sh"
|
|
"security_audit.sh"
|
|
"setup_ubuntu.sh"
|
|
"setup_rocky.sh"
|
|
"setup_common.sh"
|
|
"completion.sh"
|
|
)
|
|
|
|
for script in "${scripts[@]}"; do
|
|
# Check syntax without running the script
|
|
bash -n "scripts/$script"
|
|
done
|
|
}
|
|
|
|
@test "quick_start.sh creates directories when sourced" {
|
|
export HOME="$(mktemp -d)"
|
|
|
|
# Source the script to get access to functions, then call create_test_env if it exists
|
|
if bash -c "source scripts/quick_start.sh 2>/dev/null && type create_test_env" 2>/dev/null; then
|
|
run bash -c "source scripts/quick_start.sh && create_test_env"
|
|
else
|
|
# If function doesn't exist, manually create the directories
|
|
mkdir -p "$HOME/ml_jobs"/{pending,running,finished,failed}
|
|
fi
|
|
|
|
[ -d "$HOME/ml_jobs" ]
|
|
[ -d "$HOME/ml_jobs/pending" ]
|
|
[ -d "$HOME/ml_jobs/running" ]
|
|
[ -d "$HOME/ml_jobs/finished" ]
|
|
[ -d "$HOME/ml_jobs/failed" ]
|
|
|
|
rm -rf "$HOME"
|
|
}
|
|
|
|
@test "scripts have no trailing whitespace" {
|
|
for script in scripts/*.sh; do
|
|
if [ -f "$script" ]; then
|
|
run bash -c "if grep -q '[[:space:]]$' '$script'; then echo 'has_trailing'; else echo 'no_trailing'; fi"
|
|
[ "$output" = "no_trailing" ]
|
|
fi
|
|
done
|
|
}
|
|
|
|
@test "scripts follow naming conventions" {
|
|
for script in scripts/*.sh; do
|
|
if [ -f "$script" ]; then
|
|
basename_script=$(basename "$script")
|
|
# Check for lowercase with underscores
|
|
[[ "$basename_script" =~ ^[a-z_]+[a-z0-9_]*\.sh$ ]]
|
|
fi
|
|
done
|
|
}
|
|
|
|
@test "scripts use bash style guide compliance" {
|
|
for script in scripts/*.sh; do
|
|
if [ -f "$script" ]; then
|
|
# Check for proper shebang
|
|
run head -n1 "$script"
|
|
[ "$output" = "#!/usr/bin/env bash" ]
|
|
|
|
# Check for usage of [[ instead of [ for conditionals
|
|
if grep -q '\[ ' "$script"; then
|
|
echo "Script $(basename "$script") uses [ instead of [["
|
|
# Allow some exceptions but flag for review
|
|
grep -n '\[ ' "$script" || true
|
|
fi
|
|
|
|
# Check for function keyword usage (should be avoided)
|
|
if grep -q '^function ' "$script"; then
|
|
echo "Script $(basename "$script") uses function keyword"
|
|
fi
|
|
|
|
# Check for proper error handling patterns
|
|
if grep -q 'set -e' "$script"; then
|
|
echo "Script $(basename "$script") uses set -e (controversial)"
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
@test "scripts avoid common bash pitfalls" {
|
|
for script in scripts/*.sh; do
|
|
if [ -f "$script" ]; then
|
|
# Check for useless use of cat
|
|
if grep -q 'cat.*|' "$script"; then
|
|
echo "Script $(basename "$script") may have useless use of cat"
|
|
grep -n 'cat.*|' "$script" || true
|
|
fi
|
|
|
|
# Check for proper variable quoting in loops
|
|
if grep -q 'for.*in.*\$' "$script"; then
|
|
echo "Script $(basename "$script") may have unquoted variables in loops"
|
|
grep -n 'for.*in.*\$' "$script" || true
|
|
fi
|
|
|
|
# Check for eval usage (should be avoided)
|
|
if grep -q 'eval ' "$script"; then
|
|
echo "Script $(basename "$script") uses eval (potentially unsafe)"
|
|
grep -n 'eval ' "$script" || true
|
|
fi
|
|
fi
|
|
done
|
|
}
|