148 lines
3.9 KiB
Bash
Executable File
148 lines
3.9 KiB
Bash
Executable File
#!/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."
|