...
This commit is contained in:
147
scripts/test.sh
Executable file
147
scripts/test.sh
Executable file
@@ -0,0 +1,147 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set architecture to 64-bit to avoid 32-bit compilation issues
|
||||
export GOARCH=amd64
|
||||
|
||||
# Initialize debug flag to false
|
||||
DEBUG=false
|
||||
|
||||
# Check for --debug flag
|
||||
for arg in "$@"; do
|
||||
if [ "$arg" = "--debug" ]; then
|
||||
DEBUG=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Function to print debug messages
|
||||
debug_echo() {
|
||||
if [ "$DEBUG" = true ]; then
|
||||
echo "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Array of module paths to exclude from running tests
|
||||
# Paths are relative to the root of the repo
|
||||
EXCLUDED_MODULES=(
|
||||
# Uncomment modules you want to exclude
|
||||
# "pkg/doctree"
|
||||
# "pkg/sal/executor"
|
||||
# "pkg/handlerfactory"
|
||||
# "pkg/heroagent"
|
||||
# "pkg/heroscript"
|
||||
# "pkg/imapserver"
|
||||
# "pkg/mcp"
|
||||
# "pkg/openapi"
|
||||
# "pkg/ourdb"
|
||||
# "pkg/packagemanager"
|
||||
# "pkg/processmanager"
|
||||
# "pkg/radixtree"
|
||||
# "pkg/redisserver"
|
||||
# "pkg/smtpserver"
|
||||
# "pkg/system"
|
||||
# "pkg/telnetserver"
|
||||
# "pkg/tools"
|
||||
# "pkg/ui"
|
||||
# "pkg/vfs"
|
||||
# "pkg/lang"
|
||||
# "pkg/vm"
|
||||
# "pkg/webdavserver"
|
||||
# "pkg/wire"
|
||||
)
|
||||
|
||||
# Function to join array elements with a delimiter
|
||||
join_array() {
|
||||
local IFS="$1"
|
||||
shift
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
# Debug: Print the excluded modules
|
||||
debug_echo "Excluded modules:"
|
||||
debug_echo "Array size: ${#EXCLUDED_MODULES[@]}"
|
||||
if [ "$DEBUG" = true ]; then
|
||||
for module in "${EXCLUDED_MODULES[@]}"; do
|
||||
echo " $module"
|
||||
done
|
||||
fi
|
||||
|
||||
# Convert excluded modules into a grep -v pattern (e.g., "pkg/doctree\|pkg/sal/executor")
|
||||
EXCLUDE_PATTERN=$(join_array "|" "${EXCLUDED_MODULES[@]}")
|
||||
debug_echo "Exclude pattern: $EXCLUDE_PATTERN"
|
||||
|
||||
# Find all Go test files (*.go files containing "Test" in their name or content)
|
||||
ALL_TEST_FILES=$(find . -type f -name "*_test.go")
|
||||
debug_echo "All test files found:"
|
||||
if [ "$DEBUG" = true ]; then
|
||||
echo "$ALL_TEST_FILES"
|
||||
fi
|
||||
|
||||
# Exclude the modules specified in EXCLUDED_MODULES
|
||||
# Add word boundaries to ensure exact directory matching
|
||||
if [ ${#EXCLUDED_MODULES[@]} -eq 0 ]; then
|
||||
# If no modules are excluded, use all test files
|
||||
TEST_FILES="$ALL_TEST_FILES"
|
||||
debug_echo "No modules excluded, using all test files"
|
||||
else
|
||||
# Otherwise, exclude the specified modules
|
||||
TEST_FILES=$(echo "$ALL_TEST_FILES" | grep -v -E "($(join_array "|" "${EXCLUDED_MODULES[@]}"))(/|$)")
|
||||
debug_echo "Excluding specified modules"
|
||||
fi
|
||||
|
||||
# Check if there are any test files to run
|
||||
if [ -z "$TEST_FILES" ]; then
|
||||
echo "No test files found after excluding specified modules."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Initialize counters for test results
|
||||
TOTAL_TESTS=0
|
||||
PASSED_TESTS=0
|
||||
FAILED_TESTS=0
|
||||
|
||||
# Run go test on the remaining modules
|
||||
debug_echo "Running tests for the following files:"
|
||||
if [ "$DEBUG" = true ]; then
|
||||
echo "$TEST_FILES"
|
||||
fi
|
||||
echo "---------------------------------------"
|
||||
|
||||
# Convert test files to package paths and run go test
|
||||
for file in $TEST_FILES; do
|
||||
# Get the directory of the test file (package path)
|
||||
pkg=$(dirname "$file")
|
||||
if [ "$DEBUG" = true ]; then
|
||||
echo "Testing package: $pkg"
|
||||
fi
|
||||
|
||||
# Run the test and capture the output
|
||||
TEST_OUTPUT=$(go test -v "$pkg")
|
||||
TEST_RESULT=$?
|
||||
|
||||
# Display the test output
|
||||
echo "$TEST_OUTPUT"
|
||||
|
||||
# Count the number of tests run, passed, and failed
|
||||
TESTS_RUN=$(echo "$TEST_OUTPUT" | grep -c "=== RUN")
|
||||
TOTAL_TESTS=$((TOTAL_TESTS + TESTS_RUN))
|
||||
|
||||
if [ $TEST_RESULT -eq 0 ]; then
|
||||
# All tests passed
|
||||
PASSED_TESTS=$((PASSED_TESTS + TESTS_RUN))
|
||||
else
|
||||
# Count failed tests - use grep with a pattern that escapes the hyphens
|
||||
TESTS_FAILED=$(echo "$TEST_OUTPUT" | grep -c "\-\-\- FAIL")
|
||||
FAILED_TESTS=$((FAILED_TESTS + TESTS_FAILED))
|
||||
PASSED_TESTS=$((PASSED_TESTS + TESTS_RUN - TESTS_FAILED))
|
||||
fi
|
||||
done
|
||||
|
||||
echo "---------------------------------------"
|
||||
echo "TEST SUMMARY"
|
||||
echo "---------------------------------------"
|
||||
echo "Total Tests: $TOTAL_TESTS"
|
||||
echo "Passed Tests: $PASSED_TESTS"
|
||||
echo "Failed Tests: $FAILED_TESTS"
|
||||
echo "---------------------------------------"
|
||||
echo "All applicable tests completed."
|
||||
Reference in New Issue
Block a user