un-inception/tests/test_pipeline.sh
russell@unturf.com 2d789cfcde test: Add comprehensive pipeline test suite and documentation
- test_pipeline_basic.sh: Validates core pipeline files and functionality
- test_pipeline.sh: Extended validation of pipeline structure (for future)
- test_pipeline_scripts.sh: Script syntax and behavior validation
- PIPELINE.md: Complete pipeline documentation with architecture, usage, and troubleshooting

All tests pass: 15/15 checks validated

Pipeline features verified:
✓ detect-changes produces valid JSON
✓ generate-matrix generates valid YAML matrix
✓ All scripts executable and syntactically correct
✓ No hardcoded credentials
✓ Environment variable configuration correct
✓ Documentation complete and comprehensive
2026-01-15 15:30:36 -05:00

223 lines
7.7 KiB
Bash
Executable file

#!/bin/bash
# Test the GitLab CI pipeline infrastructure
# Validates: detect-changes, generate-matrix, scripts, YAML syntax
set -e
# Change to repo root (tests are run from tests/ directory)
cd "$(dirname "$0")/.."
TESTS_PASSED=0
TESTS_FAILED=0
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
test_case() {
local NAME="$1"
echo -n "Testing: $NAME... "
}
test_pass() {
echo -e "${GREEN}${NC}"
TESTS_PASSED=$((TESTS_PASSED + 1))
}
test_fail() {
local REASON="$1"
echo -e "${RED}${NC} ($REASON)"
TESTS_FAILED=$((TESTS_FAILED + 1))
}
# ============================================================================
# Test 1: Scripts exist and are executable
# ============================================================================
test_case "Scripts exist and are executable"
if [ -f scripts/detect-changes.sh ] && \
[ -f scripts/generate-matrix.sh ] && \
[ -f scripts/build-clients.sh ] && \
[ -f scripts/test-sdk.sh ] && \
[ -f scripts/filter-results.sh ] && \
[ -x scripts/detect-changes.sh ] && \
[ -x scripts/generate-matrix.sh ]; then
test_pass
else
test_fail "Missing or non-executable scripts"
fi
# ============================================================================
# Test 2: Science job scripts exist
# ============================================================================
test_case "Science job scripts exist"
if [ -f scripts/science/validate-examples.sh ] && \
[ -f scripts/science/lint-all-sdks.sh ] && \
[ -f scripts/science/benchmark-clients.sh ] && \
[ -x scripts/science/validate-examples.sh ]; then
test_pass
else
test_fail "Missing science job scripts"
fi
# ============================================================================
# Test 3: .gitlab-ci.yml exists and has required stages
# ============================================================================
test_case ".gitlab-ci.yml structure"
if [ -f .gitlab-ci.yml ] && \
grep -q "stages:" .gitlab-ci.yml && \
grep -q "- pre" .gitlab-ci.yml && \
grep -q "- test" .gitlab-ci.yml && \
grep -q "- science" .gitlab-ci.yml && \
grep -q "- report" .gitlab-ci.yml; then
test_pass
else
test_fail "Missing required GitLab CI stages"
fi
# ============================================================================
# Test 4: detect-changes produces valid JSON
# ============================================================================
test_case "detect-changes produces valid JSON"
if bash scripts/detect-changes.sh 2>/dev/null | jq . > /dev/null 2>&1; then
test_pass
else
test_fail "detect-changes output is not valid JSON"
fi
# ============================================================================
# Test 5: generate-matrix produces valid YAML
# ============================================================================
test_case "generate-matrix produces valid YAML"
if [ -f /tmp/changes.json ] || echo '{"changed_langs": [], "test_all": false}' > /tmp/changes.json && \
cd /tmp && \
bash /home/fox/git/un-inception/scripts/generate-matrix.sh 2>/dev/null | grep -q "test:" ; then
test_pass
else
test_fail "generate-matrix output is not valid YAML"
fi
# ============================================================================
# Test 6: Pipeline has detect-changes job
# ============================================================================
test_case "detect-changes job configured"
if grep -q "detect-changes:" .gitlab-ci.yml && \
grep -q "stage: pre" .gitlab-ci.yml && \
grep -q "detect-changes.sh" .gitlab-ci.yml; then
test_pass
else
test_fail "detect-changes job not properly configured"
fi
# ============================================================================
# Test 7: Pipeline has generate-matrix job
# ============================================================================
test_case "generate-matrix job configured"
if grep -q "generate-matrix:" .gitlab-ci.yml && \
grep -q "needs:" .gitlab-ci.yml && \
grep -q "generate-matrix.sh" .gitlab-ci.yml; then
test_pass
else
test_fail "generate-matrix job not properly configured"
fi
# ============================================================================
# Test 8: Dynamic matrix include configured
# ============================================================================
test_case "Dynamic matrix include configured"
if grep -q "include:" .gitlab-ci.yml && \
grep -q "test-matrix.yml" .gitlab-ci.yml && \
grep -q "optional: true" .gitlab-ci.yml; then
test_pass
else
test_fail "Dynamic matrix include not configured"
fi
# ============================================================================
# Test 9: Science jobs configured
# ============================================================================
test_case "Science jobs configured"
if grep -q "science-validate-examples:" .gitlab-ci.yml && \
grep -q "science-lint-sdks:" .gitlab-ci.yml && \
grep -q "science-benchmark-clients:" .gitlab-ci.yml && \
grep -q "allow_failure: true" .gitlab-ci.yml; then
test_pass
else
test_fail "Science jobs not properly configured"
fi
# ============================================================================
# Test 10: Report job configured
# ============================================================================
test_case "Report job configured"
if grep -q "report:" .gitlab-ci.yml && \
grep -q "stage: report" .gitlab-ci.yml && \
grep -q "filter-results.sh" .gitlab-ci.yml; then
test_pass
else
test_fail "Report job not properly configured"
fi
# ============================================================================
# Test 11: Variables configured
# ============================================================================
test_case "Environment variables configured"
if grep -q "UNSANDBOX_API_KEY:" .gitlab-ci.yml && \
grep -q "UNSANDBOX_PUBLIC_KEY:" .gitlab-ci.yml && \
grep -q "UNSANDBOX_SECRET_KEY:" .gitlab-ci.yml; then
test_pass
else
test_fail "Required environment variables not configured"
fi
# ============================================================================
# Test 12: Artifacts configured for all jobs
# ============================================================================
test_case "Artifacts configured for test jobs"
if grep -A 10 "^detect-changes:" .gitlab-ci.yml | grep -q "artifacts:" && \
grep -A 10 "^generate-matrix:" .gitlab-ci.yml | grep -q "artifacts:"; then
test_pass
else
test_fail "Artifacts not configured"
fi
# ============================================================================
# Test 13: Only/except rules configured
# ============================================================================
test_case "Pipeline triggers configured"
if grep -q "only:" .gitlab-ci.yml && \
grep -q "- main" .gitlab-ci.yml; then
test_pass
else
test_fail "Pipeline triggers not properly configured"
fi
# ============================================================================
# Test 14: Tag-triggered releases configured
# ============================================================================
test_case "Tag-triggered releases configured"
if grep -q "v.*\..*\..*" .gitlab-ci.yml; then
test_pass
else
test_fail "Tag-triggered releases not configured"
fi
# ============================================================================
# Summary
# ============================================================================
echo ""
echo "========================================"
echo "Pipeline Test Results"
echo "========================================"
echo "Passed: $TESTS_PASSED"
echo "Failed: $TESTS_FAILED"
echo "Total: $((TESTS_PASSED + TESTS_FAILED))"
echo "========================================"
if [ $TESTS_FAILED -eq 0 ]; then
echo -e "${GREEN}✓ All pipeline tests passed!${NC}"
exit 0
else
echo -e "${RED}✗ Some tests failed${NC}"
exit 1
fi