Skip to main content
Glama

LCBro

by lcbro
DOCKER_TESTING.md•9.71 kB
# Docker Testing Guide This guide explains how to set up and run tests using Docker for the Low Cost Browsing MCP Server. ## Overview The Docker testing environment provides: - **Isolated Testing**: Tests run in clean, reproducible containers - **Multiple Browsers**: Chromium, Firefox, and WebKit pre-installed - **CI/CD Ready**: Optimized for continuous integration pipelines - **Cross-Platform**: Works on Linux, macOS, and Windows - **Parallel Testing**: Run tests across different browsers simultaneously ## Quick Start ### 1. Setup Environment ```bash # Make setup script executable chmod +x scripts/docker-setup.sh # Run automated setup ./scripts/docker-setup.sh # Or with LLM providers ./scripts/docker-setup.sh --start-with-llm ``` ### 2. Run Tests ```bash # Using Make (recommended) make test # Unit tests make test-e2e # E2E tests make test-coverage # Tests with coverage make test-browsers # All browsers # Using Docker directly docker run --rm lc-browser-mcp:test-latest unit docker run --rm lc-browser-mcp:test-latest e2e ``` ## Docker Images ### Available Images | Image | Target | Purpose | Size | |-------|--------|---------|------| | `lc-browser-mcp:dev-latest` | development | Development with hot reload | ~2GB | | `lc-browser-mcp:test-latest` | testing | Testing with all browsers | ~1.5GB | | `lc-browser-mcp:latest` | production | Production runtime | ~200MB | ### Build Images ```bash # Build all images make build-all # Build specific images make build-dev # Development image make build-test # Testing image make build-prod # Production image ``` ## Testing Commands ### Make Commands ```bash # Basic testing make test # Run unit tests make test-e2e # Run E2E tests make test-coverage # Run with coverage report make test-all # Run all tests # Browser-specific testing make test-chromium # Test on Chromium only make test-firefox # Test on Firefox only make test-webkit # Test on WebKit only make test-browsers # Test on all browsers # Development make dev # Start development environment make dev-shell # Open development shell make dev-logs # View development logs # Cleanup make clean # Remove containers make clean-images # Remove images make clean-all # Remove everything ``` ### Docker Compose Commands ```bash # Development docker compose up app-dev # Start development docker compose logs -f app-dev # View logs # Testing docker compose --profile testing up app-test # Run tests docker compose --profile browsers up # Test all browsers # With LLM providers docker compose --profile llm up ollama # Start Ollama docker compose --profile llm up jan-ai # Start JAN AI # Reports server docker compose --profile reports up test-reports # Serve reports at :8080 ``` ### Direct Docker Commands ```bash # Unit tests docker run --rm \ -v $(pwd)/coverage:/app/coverage \ lc-browser-mcp:test-latest unit # E2E tests docker run --rm \ -v $(pwd)/test-results:/app/test-results \ -v $(pwd)/playwright-report:/app/playwright-report \ --shm-size=1gb \ lc-browser-mcp:test-latest e2e # Coverage tests docker run --rm \ -v $(pwd)/coverage:/app/coverage \ lc-browser-mcp:test-latest coverage # Browser-specific tests docker run --rm \ -e PLAYWRIGHT_PROJECT=chromium \ -v $(pwd)/test-results:/app/test-results \ --shm-size=1gb \ lc-browser-mcp:test-latest e2e ``` ## CI/CD Integration ### Using the CI Script ```bash # Run all CI tests ./scripts/ci-test.sh # Run specific test types ./scripts/ci-test.sh --unit-only ./scripts/ci-test.sh --e2e-only ./scripts/ci-test.sh --browsers-only # With custom settings ./scripts/ci-test.sh --timeout 900 --threshold 85 ``` ### GitHub Actions Example ```yaml name: Docker Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run CI Tests run: ./scripts/ci-test.sh - name: Upload Coverage uses: codecov/codecov-action@v3 with: file: ./coverage/lcov.info - name: Upload Test Results uses: actions/upload-artifact@v3 if: always() with: name: test-results path: | coverage/ test-results/ playwright-report/ ``` ### GitLab CI Example ```yaml test: image: docker:latest services: - docker:dind script: - chmod +x scripts/ci-test.sh - ./scripts/ci-test.sh artifacts: reports: junit: test-results/junit.xml coverage_report: coverage_format: cobertura path: coverage/cobertura-coverage.xml paths: - coverage/ - test-results/ - playwright-report/ expire_in: 1 week ``` ## Configuration ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `NODE_ENV` | test | Environment mode | | `CI` | false | CI environment flag | | `DISPLAY` | :99 | X11 display for browsers | | `PLAYWRIGHT_BROWSERS_PATH` | /ms-playwright | Browser installation path | | `PLAYWRIGHT_PROJECT` | all | Specific browser to test | ### Docker Compose Profiles | Profile | Services | Purpose | |---------|----------|---------| | default | app-dev | Development | | testing | app-test | Testing | | browsers | test-* | Browser-specific testing | | llm | ollama, jan-ai | LLM providers | | reports | test-reports | Report server | | production | app-prod | Production | ### Volume Mounts ```yaml volumes: - ./coverage:/app/coverage # Test coverage - ./test-results:/app/test-results # E2E results - ./playwright-report:/app/playwright-report # E2E reports - ./logs:/app/logs # Application logs ``` ## Browser Testing ### Supported Browsers - **Chromium**: Latest stable version - **Firefox**: Latest stable version - **WebKit**: Latest stable version ### Browser-Specific Options ```bash # Test specific browser PLAYWRIGHT_PROJECT=chromium make test-e2e PLAYWRIGHT_PROJECT=firefox make test-e2e PLAYWRIGHT_PROJECT=webkit make test-e2e # Browser launch options (in playwright.config.ts) launchOptions: { args: [ '--no-sandbox', # Required for Docker '--disable-setuid-sandbox', # Security for containers '--disable-dev-shm-usage', # Shared memory '--disable-gpu', # GPU acceleration '--no-first-run', # Skip first run '--no-zygote', # Process model '--single-process' # Single process mode ] } ``` ## Troubleshooting ### Common Issues 1. **Browser Launch Failures** ```bash # Increase shared memory docker run --shm-size=1gb ... # Check browser installation docker run --rm lc-browser-mcp:test-latest npx playwright install --dry-run ``` 2. **Permission Errors** ```bash # Fix permissions chmod -R 755 coverage test-results playwright-report ``` 3. **Network Issues** ```bash # Use host network docker run --network=host ... ``` 4. **Out of Memory** ```bash # Increase Docker memory limit # Docker Desktop: Settings > Resources > Memory ``` ### Debug Mode ```bash # Enable debug logging docker run --rm \ -e DEBUG=* \ -e PLAYWRIGHT_DEBUG=1 \ lc-browser-mcp:test-latest e2e # Interactive debugging make dev-shell npx playwright test --debug ``` ### Performance Optimization ```bash # Parallel browser testing docker compose --profile browsers up # Use test cache docker run --rm \ -v playwright-cache:/ms-playwright \ lc-browser-mcp:test-latest e2e # Resource limits docker run --rm \ --memory=2g \ --cpus="2.0" \ lc-browser-mcp:test-latest e2e ``` ## Reports and Artifacts ### Coverage Reports - **Location**: `./coverage/lcov-report/index.html` - **Format**: HTML, LCOV, JSON - **Threshold**: 80% by default ### E2E Test Reports - **Location**: `./playwright-report/index.html` - **Videos**: `./test-results/videos/` - **Screenshots**: `./test-results/screenshots/` - **Traces**: `./test-results/traces/` ### CI Reports - **JUnit XML**: `./test-results/junit.xml` - **JSON Results**: `./test-results/results.json` - **Summary**: `./reports/test-summary.md` ### Viewing Reports ```bash # Open coverage report make docs-coverage # Open test report make docs-tests # Serve reports via HTTP docker compose --profile reports up test-reports # View at http://localhost:8080 ``` ## Best Practices ### Performance - Use `--shm-size=1gb` for browser tests - Limit parallel workers in CI: `workers: 1` - Use browser-specific projects for targeted testing ### Reliability - Set appropriate timeouts: `timeout: 30000` - Enable retries in CI: `retries: 2` - Use `--no-sandbox` in containers ### Security - Run containers as non-root user - Use minimal base images - Scan images for vulnerabilities ### Monitoring - Enable health checks - Collect logs and metrics - Monitor resource usage ## Examples ### Complete Test Suite ```bash # Full CI pipeline ./scripts/docker-setup.sh make ci-test make docs-coverage ``` ### Development Workflow ```bash # Start development make dev # Run tests during development make test-quick # Debug specific test make dev-shell npx playwright test specific-test.spec.ts --debug ``` ### Production Validation ```bash # Build production image make build-prod # Test production image docker run --rm \ -p 3000:3000 \ lc-browser-mcp:latest # Health check curl http://localhost:3000/health ```

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lcbro/lcbro-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server