Files
attune/packs/core/test_core_pack.sh
2026-02-04 17:46:30 -06:00

194 lines
5.8 KiB
Bash
Executable File

#!/bin/bash
# Automated test script for Core Pack
# Tests all actions to ensure they work correctly
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ACTIONS_DIR="$SCRIPT_DIR/actions"
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Test counters
TESTS_RUN=0
TESTS_PASSED=0
TESTS_FAILED=0
# Function to print test result
test_result() {
TESTS_RUN=$((TESTS_RUN + 1))
if [ $? -eq 0 ]; then
echo -e "${GREEN}${NC} $1"
TESTS_PASSED=$((TESTS_PASSED + 1))
else
echo -e "${RED}${NC} $1"
TESTS_FAILED=$((TESTS_FAILED + 1))
fi
}
# Function to run a test
run_test() {
local test_name="$1"
shift
echo -n " Testing: $test_name... "
if "$@" > /dev/null 2>&1; then
echo -e "${GREEN}${NC}"
TESTS_PASSED=$((TESTS_PASSED + 1))
else
echo -e "${RED}${NC}"
TESTS_FAILED=$((TESTS_FAILED + 1))
fi
TESTS_RUN=$((TESTS_RUN + 1))
}
echo "========================================="
echo "Core Pack Test Suite"
echo "========================================="
echo ""
# Check if actions directory exists
if [ ! -d "$ACTIONS_DIR" ]; then
echo -e "${RED}ERROR:${NC} Actions directory not found at $ACTIONS_DIR"
exit 1
fi
# Check if scripts are executable
echo "→ Checking script permissions..."
for script in "$ACTIONS_DIR"/*.sh "$ACTIONS_DIR"/*.py; do
if [ -f "$script" ] && [ ! -x "$script" ]; then
echo -e "${YELLOW}WARNING:${NC} $script is not executable, fixing..."
chmod +x "$script"
fi
done
echo -e "${GREEN}${NC} All scripts have correct permissions"
echo ""
# Test core.echo
echo "→ Testing core.echo..."
export ATTUNE_ACTION_MESSAGE="Test message"
export ATTUNE_ACTION_UPPERCASE=false
run_test "basic echo" "$ACTIONS_DIR/echo.sh"
export ATTUNE_ACTION_MESSAGE="test uppercase"
export ATTUNE_ACTION_UPPERCASE=true
OUTPUT=$("$ACTIONS_DIR/echo.sh")
if [ "$OUTPUT" = "TEST UPPERCASE" ]; then
echo -e " Testing: uppercase conversion... ${GREEN}${NC}"
TESTS_PASSED=$((TESTS_PASSED + 1))
else
echo -e " Testing: uppercase conversion... ${RED}${NC} (expected 'TEST UPPERCASE', got '$OUTPUT')"
TESTS_FAILED=$((TESTS_FAILED + 1))
fi
TESTS_RUN=$((TESTS_RUN + 1))
unset ATTUNE_ACTION_MESSAGE ATTUNE_ACTION_UPPERCASE
echo ""
# Test core.sleep
echo "→ Testing core.sleep..."
export ATTUNE_ACTION_SECONDS=1
export ATTUNE_ACTION_MESSAGE="Sleeping..."
run_test "basic sleep (1 second)" "$ACTIONS_DIR/sleep.sh"
# Test invalid seconds
export ATTUNE_ACTION_SECONDS=-1
if "$ACTIONS_DIR/sleep.sh" > /dev/null 2>&1; then
echo -e " Testing: invalid seconds validation... ${RED}${NC} (should have failed)"
TESTS_FAILED=$((TESTS_FAILED + 1))
else
echo -e " Testing: invalid seconds validation... ${GREEN}${NC}"
TESTS_PASSED=$((TESTS_PASSED + 1))
fi
TESTS_RUN=$((TESTS_RUN + 1))
unset ATTUNE_ACTION_SECONDS ATTUNE_ACTION_MESSAGE
echo ""
# Test core.noop
echo "→ Testing core.noop..."
export ATTUNE_ACTION_MESSAGE="Test noop"
export ATTUNE_ACTION_EXIT_CODE=0
run_test "basic noop with exit 0" "$ACTIONS_DIR/noop.sh"
export ATTUNE_ACTION_EXIT_CODE=1
if "$ACTIONS_DIR/noop.sh" > /dev/null 2>&1; then
echo -e " Testing: custom exit code (1)... ${RED}${NC} (should have exited with 1)"
TESTS_FAILED=$((TESTS_FAILED + 1))
else
EXIT_CODE=$?
if [ $EXIT_CODE -eq 1 ]; then
echo -e " Testing: custom exit code (1)... ${GREEN}${NC}"
TESTS_PASSED=$((TESTS_PASSED + 1))
else
echo -e " Testing: custom exit code (1)... ${RED}${NC} (exit code was $EXIT_CODE, expected 1)"
TESTS_FAILED=$((TESTS_FAILED + 1))
fi
fi
TESTS_RUN=$((TESTS_RUN + 1))
unset ATTUNE_ACTION_MESSAGE ATTUNE_ACTION_EXIT_CODE
echo ""
# Test core.http_request (requires Python and requests library)
echo "→ Testing core.http_request..."
# Check if Python is available
if ! command -v python3 &> /dev/null; then
echo -e "${YELLOW}WARNING:${NC} Python 3 not found, skipping HTTP request tests"
else
# Check if requests library is installed
if python3 -c "import requests" 2>/dev/null; then
export ATTUNE_ACTION_URL="https://httpbin.org/get"
export ATTUNE_ACTION_METHOD="GET"
export ATTUNE_ACTION_TIMEOUT=10
run_test "basic GET request" python3 "$ACTIONS_DIR/http_request.py"
export ATTUNE_ACTION_URL="https://httpbin.org/post"
export ATTUNE_ACTION_METHOD="POST"
export ATTUNE_ACTION_JSON_BODY='{"test": "data"}'
run_test "POST with JSON body" python3 "$ACTIONS_DIR/http_request.py"
# Test missing required parameter
unset ATTUNE_ACTION_URL
if python3 "$ACTIONS_DIR/http_request.py" > /dev/null 2>&1; then
echo -e " Testing: missing URL validation... ${RED}${NC} (should have failed)"
TESTS_FAILED=$((TESTS_FAILED + 1))
else
echo -e " Testing: missing URL validation... ${GREEN}${NC}"
TESTS_PASSED=$((TESTS_PASSED + 1))
fi
TESTS_RUN=$((TESTS_RUN + 1))
unset ATTUNE_ACTION_URL ATTUNE_ACTION_METHOD ATTUNE_ACTION_JSON_BODY ATTUNE_ACTION_TIMEOUT
else
echo -e "${YELLOW}WARNING:${NC} Python requests library not found, skipping HTTP tests"
echo " Install with: pip install requests>=2.28.0"
fi
fi
echo ""
# Summary
echo "========================================="
echo "Test Results"
echo "========================================="
echo "Total tests run: $TESTS_RUN"
echo -e "Tests passed: ${GREEN}$TESTS_PASSED${NC}"
if [ $TESTS_FAILED -gt 0 ]; then
echo -e "Tests failed: ${RED}$TESTS_FAILED${NC}"
else
echo -e "Tests failed: ${GREEN}$TESTS_FAILED${NC}"
fi
echo ""
if [ $TESTS_FAILED -eq 0 ]; then
echo -e "${GREEN}✓ All tests passed!${NC}"
exit 0
else
echo -e "${RED}✗ Some tests failed${NC}"
exit 1
fi