#!/bin/bash # Test Template for Docker-Based Skills # Use this template when testing skills that: # - Start Docker containers # - Build Docker images # - Manage Docker volumes/networks # - Require Docker daemon access set -euo pipefail # ============================================================================ # Configuration # ============================================================================ SKILL_NAME="${1:-example-docker-skill}" SKILL_PATH="$HOME/.claude/skills/$SKILL_NAME" TEST_ID="$(date +%s)" TEST_DIR="/tmp/skill-test-$TEST_ID" # ============================================================================ # Load Helper Library # ============================================================================ HELPER_LIB="$HOME/.claude/skills/skill-isolation-tester/lib/docker-helpers.sh" if [[ ! -f "$HELPER_LIB" ]]; then echo "ERROR: Helper library not found: $HELPER_LIB" exit 1 fi # shellcheck source=/dev/null source "$HELPER_LIB" # ============================================================================ # Setup Cleanup Trap # ============================================================================ export SKILL_TEST_TEMP_DIR="$TEST_DIR" export SKILL_TEST_KEEP_CONTAINER="false" export SKILL_TEST_REMOVE_IMAGES="true" trap cleanup_on_exit EXIT # ============================================================================ # Pre-flight Checks # ============================================================================ echo "=== Docker Skill Test: $SKILL_NAME ===" echo "Test ID: $TEST_ID" echo "" # Validate skill exists if [[ ! -d "$SKILL_PATH" ]]; then echo "ERROR: Skill not found: $SKILL_PATH" exit 1 fi # Validate Docker environment preflight_check_docker || exit 1 # ============================================================================ # Baseline Measurements (Before) # ============================================================================ echo "" echo "=== Taking Baseline Measurements ===" # Count Docker resources before test BEFORE_CONTAINERS=$(docker ps -a --format '{{.ID}}' | wc -l) BEFORE_IMAGES=$(docker images --format '{{.ID}}' | wc -l) BEFORE_VOLUMES=$(docker volume ls --format '{{.Name}}' | wc -l) BEFORE_NETWORKS=$(docker network ls --format '{{.ID}}' | wc -l) echo "Before test:" echo " Containers: $BEFORE_CONTAINERS" echo " Images: $BEFORE_IMAGES" echo " Volumes: $BEFORE_VOLUMES" echo " Networks: $BEFORE_NETWORKS" # ============================================================================ # Build Test Environment # ============================================================================ echo "" echo "=== Building Test Environment ===" mkdir -p "$TEST_DIR" # Create test Dockerfile cat > "$TEST_DIR/Dockerfile" <