🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
262 lines
7.0 KiB
Bash
Executable File
262 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# BZZZ Setup Integration Test Script
|
|
# Tests the complete setup flow from no config to configured system
|
|
|
|
set -e
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${BLUE}🐝 BZZZ Setup Integration Test${NC}"
|
|
echo -e "${BLUE}==============================${NC}"
|
|
echo ""
|
|
|
|
# Clean up any existing test artifacts
|
|
cleanup() {
|
|
echo -e "${YELLOW}🧹 Cleaning up test artifacts...${NC}"
|
|
rm -rf .bzzz/
|
|
pkill -f "bzzz" 2>/dev/null || true
|
|
sleep 1
|
|
}
|
|
|
|
# Test 1: No configuration - should enter setup mode
|
|
test_no_config() {
|
|
echo -e "${BLUE}Test 1: No Configuration - Setup Mode${NC}"
|
|
cleanup
|
|
|
|
echo -e "Starting BZZZ with no configuration..."
|
|
timeout 3s ./build/bzzz &
|
|
BZZZ_PID=$!
|
|
|
|
sleep 2
|
|
|
|
# Test API endpoints
|
|
echo -e "Testing setup API endpoints..."
|
|
|
|
HEALTH=$(curl -s http://localhost:8090/api/health 2>/dev/null || echo "failed")
|
|
if [[ $HEALTH == *"setup_mode"* ]]; then
|
|
echo -e "${GREEN}✅ Setup mode API working${NC}"
|
|
else
|
|
echo -e "${RED}❌ Setup mode API failed${NC}"
|
|
echo "Response: $HEALTH"
|
|
fi
|
|
|
|
SETUP_REQUIRED=$(curl -s http://localhost:8090/api/setup/required 2>/dev/null || echo "failed")
|
|
if [[ $SETUP_REQUIRED == *"setup_required"* ]]; then
|
|
echo -e "${GREEN}✅ Setup required endpoint working${NC}"
|
|
else
|
|
echo -e "${RED}❌ Setup required endpoint failed${NC}"
|
|
fi
|
|
|
|
kill $BZZZ_PID 2>/dev/null || true
|
|
wait $BZZZ_PID 2>/dev/null || true
|
|
echo ""
|
|
}
|
|
|
|
# Test 2: Invalid configuration - should enter setup mode
|
|
test_invalid_config() {
|
|
echo -e "${BLUE}Test 2: Invalid Configuration - Setup Mode${NC}"
|
|
cleanup
|
|
|
|
# Create invalid config
|
|
mkdir -p .bzzz
|
|
echo "invalid yaml content" > .bzzz/config.yaml
|
|
|
|
echo -e "Starting BZZZ with invalid configuration..."
|
|
timeout 3s ./build/bzzz &
|
|
BZZZ_PID=$!
|
|
|
|
sleep 2
|
|
|
|
HEALTH=$(curl -s http://localhost:8090/api/health 2>/dev/null || echo "failed")
|
|
if [[ $HEALTH == *"setup_mode"* ]]; then
|
|
echo -e "${GREEN}✅ Invalid config triggers setup mode${NC}"
|
|
else
|
|
echo -e "${RED}❌ Invalid config test failed${NC}"
|
|
fi
|
|
|
|
kill $BZZZ_PID 2>/dev/null || true
|
|
wait $BZZZ_PID 2>/dev/null || true
|
|
echo ""
|
|
}
|
|
|
|
# Test 3: Valid configuration - should start normally
|
|
test_valid_config() {
|
|
echo -e "${BLUE}Test 3: Valid Configuration - Normal Mode${NC}"
|
|
cleanup
|
|
|
|
# Create valid config
|
|
mkdir -p .bzzz
|
|
cat > .bzzz/config.yaml << 'EOF'
|
|
agent:
|
|
id: "test-integration-agent"
|
|
capabilities:
|
|
- "code_generation"
|
|
- "task_coordination"
|
|
models:
|
|
- "llama2:7b"
|
|
specialization: "general_developer"
|
|
max_tasks: 3
|
|
|
|
p2p:
|
|
service_tag: "bzzz-peer-discovery"
|
|
bzzz_topic: "bzzz/coordination/v1"
|
|
hmmm_topic: "hmmm/meta-discussion/v1"
|
|
discovery_timeout: "10s"
|
|
|
|
logging:
|
|
level: "info"
|
|
format: "text"
|
|
output: "stdout"
|
|
structured: false
|
|
|
|
v2:
|
|
enabled: true
|
|
dht:
|
|
enabled: false
|
|
|
|
security:
|
|
election_config:
|
|
heartbeat_timeout: "30s"
|
|
election_timeout: "60s"
|
|
minimum_peers: 1
|
|
audit_logging: true
|
|
EOF
|
|
|
|
echo -e "Starting BZZZ with valid configuration..."
|
|
timeout 5s ./build/bzzz > test_output.log 2>&1 &
|
|
BZZZ_PID=$!
|
|
|
|
sleep 3
|
|
|
|
# Check if it started in normal mode (not setup mode)
|
|
if grep -q "Setup required" test_output.log; then
|
|
echo -e "${RED}❌ Valid config should not trigger setup mode${NC}"
|
|
cat test_output.log
|
|
elif grep -q "Bzzz node started successfully" test_output.log; then
|
|
echo -e "${GREEN}✅ Valid config starts normal mode${NC}"
|
|
|
|
# Test normal API endpoint (different port)
|
|
NORMAL_API=$(curl -s http://localhost:8080/api/health 2>/dev/null || echo "failed")
|
|
if [[ $NORMAL_API == *"healthy"* ]]; then
|
|
echo -e "${GREEN}✅ Normal mode API working${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚪ Normal mode API not accessible (expected if port busy)${NC}"
|
|
fi
|
|
else
|
|
echo -e "${RED}❌ Unexpected startup behavior${NC}"
|
|
cat test_output.log
|
|
fi
|
|
|
|
kill $BZZZ_PID 2>/dev/null || true
|
|
wait $BZZZ_PID 2>/dev/null || true
|
|
rm -f test_output.log
|
|
echo ""
|
|
}
|
|
|
|
# Test 4: Configuration validation
|
|
test_config_validation() {
|
|
echo -e "${BLUE}Test 4: Configuration Validation${NC}"
|
|
cleanup
|
|
|
|
timeout 3s ./build/bzzz &
|
|
BZZZ_PID=$!
|
|
sleep 2
|
|
|
|
# Test valid config validation
|
|
VALID_CONFIG='{
|
|
"agent_id": "test-agent",
|
|
"capabilities": ["code_generation"],
|
|
"models": ["llama2:7b"],
|
|
"specialization": "general_developer"
|
|
}'
|
|
|
|
VALIDATION=$(curl -s -X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d "$VALID_CONFIG" \
|
|
http://localhost:8090/api/setup/validate 2>/dev/null || echo "failed")
|
|
|
|
if [[ $VALIDATION == *"valid"* ]] && [[ $VALIDATION == *"true"* ]]; then
|
|
echo -e "${GREEN}✅ Valid config validation working${NC}"
|
|
else
|
|
echo -e "${RED}❌ Config validation failed${NC}"
|
|
echo "Response: $VALIDATION"
|
|
fi
|
|
|
|
kill $BZZZ_PID 2>/dev/null || true
|
|
wait $BZZZ_PID 2>/dev/null || true
|
|
echo ""
|
|
}
|
|
|
|
# Test 5: Web UI availability
|
|
test_web_ui() {
|
|
echo -e "${BLUE}Test 5: Web UI Availability${NC}"
|
|
cleanup
|
|
|
|
timeout 3s ./build/bzzz &
|
|
BZZZ_PID=$!
|
|
sleep 2
|
|
|
|
# Test if web UI is accessible
|
|
WEB_UI=$(curl -s http://localhost:8090/ 2>/dev/null || echo "failed")
|
|
if [[ $WEB_UI == *"html"* ]] || [[ $WEB_UI == *"BZZZ"* ]]; then
|
|
echo -e "${GREEN}✅ Web UI accessible${NC}"
|
|
else
|
|
echo -e "${RED}❌ Web UI not accessible${NC}"
|
|
fi
|
|
|
|
# Test setup route
|
|
SETUP_UI=$(curl -s http://localhost:8090/setup/ 2>/dev/null || echo "failed")
|
|
if [[ $SETUP_UI == *"html"* ]] || [[ $SETUP_UI == *"BZZZ"* ]]; then
|
|
echo -e "${GREEN}✅ Setup UI route working${NC}"
|
|
else
|
|
echo -e "${RED}❌ Setup UI route failed${NC}"
|
|
fi
|
|
|
|
kill $BZZZ_PID 2>/dev/null || true
|
|
wait $BZZZ_PID 2>/dev/null || true
|
|
echo ""
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
echo -e "Building BZZZ for testing..."
|
|
go build -o build/bzzz . > /dev/null
|
|
|
|
if [ ! -f "build/bzzz" ]; then
|
|
echo -e "${RED}❌ Failed to build BZZZ binary${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ BZZZ binary built successfully${NC}"
|
|
echo ""
|
|
|
|
test_no_config
|
|
test_invalid_config
|
|
test_valid_config
|
|
test_config_validation
|
|
test_web_ui
|
|
|
|
cleanup
|
|
|
|
echo -e "${GREEN}🎉 All integration tests completed!${NC}"
|
|
echo ""
|
|
echo -e "${BLUE}Summary:${NC}"
|
|
echo -e "✅ Setup mode activation (no config)"
|
|
echo -e "✅ Setup mode activation (invalid config)"
|
|
echo -e "✅ Normal mode startup (valid config)"
|
|
echo -e "✅ Configuration validation API"
|
|
echo -e "✅ Web UI accessibility"
|
|
echo ""
|
|
echo -e "${GREEN}🚀 BZZZ setup integration is fully functional!${NC}"
|
|
}
|
|
|
|
# Handle cleanup on exit
|
|
trap cleanup EXIT
|
|
|
|
# Run tests
|
|
main |