Files
Pulse/scripts/tests/integration
rcourtman 0fcfad3dc5 feat: add shared script library system and refactor docker-agent installer
Implements a comprehensive script improvement infrastructure to reduce code
duplication, improve maintainability, and enable easier testing of installer
scripts.

## New Infrastructure

### Shared Library System (scripts/lib/)
- common.sh: Core utilities (logging, sudo, dry-run, cleanup management)
- systemd.sh: Service management helpers with container-safe systemctl
- http.sh: HTTP/download helpers with curl/wget fallback and retry logic
- README.md: Complete API documentation for all library functions

### Bundler System
- scripts/bundle.sh: Concatenates library modules into single-file installers
- scripts/bundle.manifest: Defines bundling configuration for distributables
- Enables both modular development and curl|bash distribution

### Test Infrastructure
- scripts/tests/run.sh: Test harness for running all smoke tests
- scripts/tests/test-common-lib.sh: Common library validation (5 tests)
- scripts/tests/test-docker-agent-v2.sh: Installer smoke tests (4 tests)
- scripts/tests/integration/: Container-based integration tests (5 scenarios)
- All tests passing ✓

## Refactored Installer

### install-docker-agent-v2.sh
- Reduced from 1098 to 563 lines (48% code reduction)
- Uses shared libraries for all common operations
- NEW: --dry-run flag support
- Maintains 100% backward compatibility with original
- Fully tested with smoke and integration tests

### Key Improvements
- Sudo escalation: 100+ lines → 1 function call
- Download logic: 51 lines → 1 function call
- Service creation: 33 lines → 2 function calls
- Logging: Standardized across all operations
- Error handling: Improved with common library

## Documentation

### Rollout Strategy (docs/installer-v2-rollout.md)
- 3-phase rollout plan (Alpha → Beta → GA)
- Feature flag mechanism for gradual deployment
- Testing checklist and success metrics
- Rollback procedures and communication plan

### Developer Guides
- docs/script-library-guide.md: Complete library usage guide
- docs/CONTRIBUTING-SCRIPTS.md: Contribution workflow
- docs/installer-v2-quickref.md: Quick reference for operators

## Metrics

- Code reduction: 48% (1098 → 563 lines)
- Reusable functions: 0 → 30+
- Test coverage: 0 → 8 test scenarios
- Documentation: 0 → 5 comprehensive guides

## Testing

All tests passing:
- Smoke tests: 2/2 passed (8 test cases)
- Integration tests: 5/5 scenarios passed
- Bundled output: Syntax validated, dry-run tested

## Next Steps

This lays the foundation for migrating other installers (install.sh,
install-sensor-proxy.sh) to use the same pattern, reducing overall
maintenance burden and improving code quality across the project.
2025-10-20 15:13:38 +00:00
..

Integration Tests

The scripts in this directory exercise the Pulse installer scripts inside isolated environments (typically Linux containers). They are intended to catch regressions that unit-style smoke tests cannot detect (e.g., filesystem layout, systemd unit generation, binary placement).

Prerequisites

  • Docker or another container runtime supported by the test script. When Docker is unavailable the test will skip gracefully.
  • Internet access is not required; HTTP interactions are stubbed.

Running the Docker Agent Installer Test

scripts/tests/integration/test-docker-agent-install.sh

The script will:

  1. Launch an Ubuntu 22.04 container (when Docker is available).
  2. Inject lightweight stubs for systemctl, docker, curl, and wget.
  3. Execute the refactored installer through several scenarios (dry run, full install, missing Docker handling, multi-target configuration, uninstall).

The container is discarded automatically, and no files are written to the host outside of the repository.

Adding New Integration Tests

  1. Place new test scripts in this directory. They should follow the pattern of detecting required tooling, skipping when prerequisites are missing, and producing clear PASS/FAIL output.
  2. Prefer running inside an ephemeral container to avoid modifying the host system.
  3. Use repository-relative paths (/workspace inside the container) and avoid relying on network resources.
  4. Clean up all temporary files even when the test fails (use traps).

Reporting

Each integration script is self-contained and prints a concise summary at the end. CI jobs or developers can invoke them individually without modifying the top-level smoke test harness.