Mooncake Testing Architecture¶
π Other Docs: Index | Quick Reference | Testing Guide | Implementation
Overview Diagram¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Mooncake Test Infrastructure β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ
β LOCAL DEVELOPMENT β β CI/CD (GitHub) β
ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Makefile Commands β
β βββββββββββββ ββββββββββββ ββββββββββββββ ββββββββββββββββ β
β βmake test β βmake test-β βmake test- β βmake test-all-β β
β β β βquick β βdocker-all β βplatforms β β
β βββββββ¬ββββββ ββββββ¬ββββββ ββββββββ¬ββββββ ββββββββ¬ββββββββ β
ββββββββββΌββββββββββββββΌββββββββββββββββΌβββββββββββββββββΌββββββββββ
β β β β
βΌ βΌ βΌ βΌ
βββββββββββββββ ββββββββββββββββββββββββββββββββββββββββββββββββ
β Native β β Docker Test Matrix β
β Go Tests β ββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββββ€
β (10 sec) β β Ubuntu β Alpine β Debian β Fedora β
βββββββββββββββ β 22.04 β 3.19 β 12 β 39 β
β 20.04 β β β β
ββββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββββββ
β β β β
ββββββββββββ΄βββββββββββ΄βββββββββββ
β
ββββββββββββΌβββββββββββ
β test-runner.sh β
β ββββββββββββββββββ β
β β Smoke Tests β β
β β Integration β β
β ββββββββββββββββββ β
βββββββββββββββββββββββ
CI/CD Pipeline¶
GitHub Push
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GitHub Actions Workflow β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β JOB: unit-tests (Matrix: 4 platforms) β β
β β βββββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β
β β β ubuntu- β β macos- β β macos-13 β β windows- β β β
β β β latest β β latest β β (Intel) β β latest β β β
β β β (x86_64) β β (ARM) β β β β β β β
β β βββββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β JOB: docker-tests (Matrix: 5 distros) β β
β β ββββββββ ββββββββ ββββββββ ββββββββ ββββββββ β β
β β βUbuntuβ βUbuntuβ βAlpineβ βDebianβ βFedoraβ β β
β β β22.04 β β20.04 β β 3.19 β β 12 β β 39 β β β
β β ββββ¬ββββ ββββ¬ββββ ββββ¬ββββ ββββ¬ββββ ββββ¬ββββ β β
β β β β β β β β β
β β ββββββββββ΄βββββββββ΄βββββββββ΄βββββββββ β β
β β β β β
β β Smoke + Integration β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β JOB: integration-tests (Needs: unit-tests) β β
β β βββββββββββββββ ββββββββββββ ββββββββββββ β β
β β β ubuntu- β β macos- β β windows- β β β
β β β latest β β latest β β latest β β β
β β βββββββββββββββ ββββββββββββ ββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
Pass Pass Pass
Test Fixture Organization¶
testing/fixtures/
βββ configs/
β βββ smoke/ # Fast validation (<1 min total)
β β βββ 001-version-check.yml # Binary works
β β βββ 002-simple-file.yml # File operations
β β βββ 003-simple-shell.yml # Shell execution
β β βββ 004-simple-vars.yml # Variables
β β
β βββ integration/ # Full features (5-10 min total)
β βββ 010-file-operations.yml # Complete file workflow
β βββ 020-loops.yml # Loop iteration
β βββ 030-conditionals.yml # When conditions
β βββ 040-shell-commands.yml # Complex shell
β
βββ templates/
βββ test-template.j2 # Template rendering test
Docker Test Flow¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Docker Test Process β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Step 1: Build Binary
βββββββββββββββββββββββββββββββββββββββββββββββ
β env GOOS=linux GOARCH=amd64 \ β
β go build -o out/mooncake-linux-amd64 ./cmd β
ββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β
βΌ
Step 2: Build Docker Image
βββββββββββββββββββββββββββββββββββββββββββββββ
β docker build -f testing/docker/ubuntu. β
β Dockerfile -t mooncake-test-ubuntu . β
β β
β Dockerfile: β
β - FROM ubuntu:22.04 β
β - Install: curl, git, sudo β
β - COPY binary β /usr/local/bin/mooncake β
β - COPY test-runner.sh β /test-runner.sh β
β - COPY fixtures/ β /fixtures/ β
ββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β
βΌ
Step 3: Run Tests
βββββββββββββββββββββββββββββββββββββββββββββββ
β docker run --rm mooncake-test-ubuntu smoke β
β β
β Container executes: β
β /test-runner.sh smoke β
β β β
β For each test in /fixtures/configs/smoke/β
β mooncake run -c test.yml β
β Save results to /workspace/results/ β
βββββββββββββββββββββββββββββββββββββββββββββββ
Test Runner Logic¶
test-runner.sh
βββ Verify mooncake binary exists
βββ Parse TEST_SUITE parameter (smoke|integration|all)
β
βββ run_smoke_tests()
β βββ Find all *.yml in /fixtures/configs/smoke/
β βββ For each test:
β β βββ Run: mooncake run -c test.yml
β β βββ Capture output to results/
β β βββ Track pass/fail count
β β βββ Print β or β
β βββ Return status
β
βββ run_integration_tests()
β βββ Find all *.yml in /fixtures/configs/integration/
β βββ For each test:
β β βββ Run: mooncake run -c test.yml
β β βββ Capture output to results/
β β βββ Track pass/fail count
β β βββ Print β or β
β βββ Return status
β
βββ Exit with appropriate code
Script Orchestration¶
make test-all-platforms
βββ Run native Go tests
β βββ go test -v ./...
β
βββ Run Docker multi-distro tests
βββ scripts/test-docker-all.sh
βββ Build Linux binary once
βββ For each distro:
β βββ scripts/test-docker.sh <distro>
β β βββ Build Docker image
β β βββ Run container with test suite
β βββ Track pass/fail
βββ Print summary
Platform Coverage Matrix¶
βββββββββββββββββββ¬βββββββββ¬βββββββββ¬ββββββββββ¬βββββββββββββββ
β β Local β CI β Docker β Native β
βββββββββββββββββββΌβββββββββΌβββββββββΌββββββββββΌβββββββββββββββ€
β Ubuntu 22.04 β β β β β
β Ubuntu 20.04 β β β β β
β Alpine 3.19 β β β β β
β Debian 12 β β β β β
β Fedora 39 β β β β β
β macOS (ARM) β β β β β
β macOS (Intel) β β β β β
β Windows β β β β β
βββββββββββββββββββ΄βββββββββ΄βββββββββ΄ββββββββββ΄βββββββββββββββ
Legend:
= Tested
Local = Developer machine
CI = GitHub Actions
Docker = Container-based testing
Native = Direct OS execution
Test Types and Timing¶
ββββββββββββββββ¬ββββββββββββββ¬ββββββββββ¬βββββββββββββββββββββββ
β Test Type β Count β Time β Purpose β
ββββββββββββββββΌββββββββββββββΌββββββββββΌβββββββββββββββββββββββ€
β Unit β Per package β ~10s β Go code validation β
β Smoke β 4 tests β ~30s β Basic functionality β
β Integration β 4 tests β ~2-5m β Feature validation β
β Full Suite β All above β ~15m β Complete validation β
ββββββββββββββββ΄ββββββββββββββ΄ββββββββββ΄βββββββββββββββββββββββ
Smoke Tests:
- Binary execution β
- File operations β
- Shell commands β
- Variables β
Integration Tests:
- File workflow β
- Loops β
- Conditionals β
- Complex shell β
Directory Structure¶
mooncake/
β
βββ .github/workflows/
β βββ ci.yml βββββββββββββββββΊ CI/CD configuration
β
βββ testing/
β βββ docker/ ββββββββββββββββΊ Dockerfiles (5 distros)
β βββ common/
β β βββ test-runner.sh βββββΊ Test orchestration
β βββ fixtures/
β β βββ configs/
β β β βββ smoke/ βββββββββΊ 4 smoke tests
β β β βββ integration/ βββΊ 4 integration tests
β β βββ templates/ βββββββββΊ Test templates
β βββ results/ βββββββββββββββΊ Test outputs (gitignored)
β βββ README.md ββββββββββββββΊ Testing documentation
β
βββ scripts/
β βββ test-docker.sh βββββββββΊ Single distro test
β βββ test-docker-all.sh βββββΊ Multi-distro test
β βββ test-all-platforms.sh ββΊ Complete test suite
β βββ run-integration-tests.sh βΊ Integration runner
β
βββ Makefile βββββββββββββββββββΊ Test targets
βββ out/ βββββββββββββββββββββββΊ Compiled binaries
Data Flow¶
Developer
β
βββΊ Edit Code
β β
β βΌ
β make test βββββΊ go test ./... βββββΊ /
β
βββΊ make test-quick
β β
β βββΊ Build Linux binary
β βββΊ Build Docker image (Ubuntu)
β βββΊ Run smoke tests
β βββΊ /
β
βββΊ make test-all-platforms
β β
β βββΊ go test ./...
β βββΊ Build Linux binary
β βββΊ For each distro:
β β βββΊ Build image
β β βββΊ Run smoke + integration
β βββΊ / Summary
β
βββΊ git push
β
βΌ
GitHub Actions
β
βββΊ unit-tests (4 platforms)
βββΊ docker-tests (5 distros)
βββΊ integration-tests (3 platforms)
β
βΌ
/ Status
Success Metrics¶
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Testing Success Criteria β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β β‘ Fast Feedback β
β β’ Local smoke: < 2 minutes β
β β’ CI complete: < 10 minutes β
β β
β π Comprehensive Coverage β
β β’ 5 Linux distros tested β
β β’ macOS Intel + ARM β
β β’ Windows Server β
β β
β π¨βπ» Developer Experience β
β β’ Single command testing β
β β’ Clear documentation β
β β’ Easy to add tests β
β β
β Quality Assurance β
β β’ Unit tests: >60% coverage β
β β’ Smoke tests: 4 scenarios β
β β’ Integration: 4 workflows β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Future Architecture Enhancements¶
Potential Additions:
βββ ARM64 Linux Testing
β βββ Add arm64 Docker builds
β
βββ Performance Benchmarking
β βββ Benchmark suite
β βββ Historical tracking
β
βββ Test Result Dashboard
β βββ Web UI for results
β βββ Trend analysis
β
βββ Extended Platform Support
βββ FreeBSD
βββ OpenBSD
βββ Additional Linux distros
Key Design Decisions¶
- Docker for Linux - Portable, reproducible, multi-distro support
- Native for macOS - Simplest, fastest, no containerization overhead
- CI-only for Windows - Avoid VM complexity, sufficient for validation
- Two-tier tests - Smoke (fast feedback) + Integration (thorough)
- Parallel execution - Maximize throughput in CI
- Cached layers - Docker caching for faster rebuilds
- Gitignored results - Keep repo clean, results are ephemeral
- Shell scripts - Portable, easy to debug, no extra dependencies
For detailed usage instructions, see: guide.md
For quick reference, see: quick-reference.md