Skip to main content

hop3-testing

Testing framework for Hop3 deployment validation.

Overview

hop3-testing provides utilities and fixtures for testing Hop3 deployments. It supports running tests against Docker containers or remote servers, with a catalog of test applications covering various languages and frameworks.

Features

  • Multiple targets: Test against Docker containers or remote SSH servers
  • App catalog: Pre-built test applications for various languages
  • Deployment sessions: Automated deploy/verify/cleanup workflow
  • pytest fixtures: Integration with pytest for E2E testing
  • Category filtering: Run tests by language or framework

Installation

pip install hop3-testing

Quick Start

# List available tests
hop3-test list

# Run system tests on Docker
hop3-test run --docker

# Test specific apps
hop3-test apps 010-flask-pip-wsgi

# Test against remote server
hop3-test apps --host server.example.com

# Run CI tests
hop3-test ci

Commands

Command Description
hop3-test run Deploy Hop3 and run the catalog (system is a deprecated alias)
hop3-test run --reuse Test against an existing deployment (skip deploy)
hop3-test list List available tests (--show NAME for one test's details)
hop3-test run --provider hetzner --images ... E2E across cloud OS images (Hetzner)
hop3-test upgrade-chain Install a baseline release on a fresh box, then upgrade in-place through a version chain
hop3-test why <run-id> Replay a saved diagnostic bundle for a failed run

Test profile (fast/CI/full) is selected with --mode on run, not a separate subcommand: hop3-test run --docker --mode ci.

Upgrade chain

hop3-test upgrade-chain validates that a running server survives a chain of in-place upgrades. Each hop is a git ref, installed by that version's own hop3-deploy-server (checked out into a worktree and run via uv run), on a fresh box; every hop after the first is an in-place update, and each is asserted to come back healthy with a readable schema.

# Fresh Docker container: 0.6.2 → current tree
hop3-test upgrade-chain --docker

# Fresh Hetzner VPS (needs HETZNER_API_TOKEN + HETZNER_SERVER_ID)
hop3-test upgrade-chain --provider hetzner --image ubuntu-24.04

# Custom chain (release tags + `local` for the current tree)
hop3-test upgrade-chain --docker --chain 0.6.2,local

Cheapest smoke — exercises the whole mechanism (fresh install → in-place upgrade → assertions) with no old-version/worktree variable:

hop3-test upgrade-chain --docker --chain local,local

--host <server> is accepted but warns: it targets an existing server, not the clean slate an upgrade chain assumes. 0.6.0 is not a viable baseline (its hop3-rootd can't start) and is excluded from the default chain.

Common Options

Option Description
-v, --verbose Verbose output
--fail-fast Stop on first failure
--keep Keep apps deployed after testing
--docker Use Docker target
--host HOST Remote server hostname

Architecture

hop3-testing/
├── src/hop3_testing/
│   ├── cli/              # CLI commands
│   │   └── commands/     # Click command implementations
│   ├── catalog/          # Test discovery
│   │   ├── scanner.py    # Discovers test.toml files
│   │   └── models.py     # TestDefinition, Category
│   ├── apps/
│   │   ├── catalog.py    # AppSource dataclass
│   │   └── deployment.py # DeploymentSession
│   ├── targets/
│   │   ├── base.py       # DeploymentTarget ABC
│   │   ├── docker.py     # DockerTarget
│   │   └── remote.py     # RemoteTarget
│   └── results/          # Result storage and reporting
└── tests/

Test Categories

Category Languages/Frameworks
python Flask, FastAPI, Django
nodejs Express, Fastify
ruby Sinatra, Rails
go Fiber, Gin
rust Actix-web, Axum
static HTML, Hugo, Jekyll

Cloud Runs & the Image Sweep

Run full E2E tests across cloud OS images with hop3-test run --provider hetzner --images .... Each image is a full hop3-test run --provider hetzner (provision a fresh box → deploy → test → persist), so a cloud run shares run's lexicon: positional app names, --from, --branch, --with. Requires HETZNER_API_TOKEN and HETZNER_SERVER_ID (a dedicated throwaway box).

# List available images
hop3-test run --list-images

# Single distribution (a sweep-of-one)
hop3-test run --provider hetzner --image ubuntu-24.04 apps/test-apps-procfile

# Across multiple distributions
hop3-test run --provider hetzner --images ubuntu-24.04,debian-13,fedora-42

# From PyPI instead of local code
hop3-test run --provider hetzner --from pypi --images all

Cloud Run Options (run --provider hetzner)

Option Description
--image IMAGE Single OS image — a sweep-of-one (e.g. ubuntu-24.04)
--images LIST Comma-separated images or all
--list-images List available OS images
--from {local,git,pypi} Install source (same as run; default: local)
--branch BRANCH Git branch (with --from git; default: devel)
--with FEATURES Extra server features (repeatable or comma-separated)
-x, --fail-fast Stop on the first failing image
--continue-on-failure Don't stop on first failure (multi-distro)

Development

# Run tests
uv run pytest tests/ -v

# Lint and format
uv run ruff check src/
uv run ruff format src/

Documentation

Related Packages

License

Apache-2.0 - Copyright (c) 2024-2026, Abilian SAS

Metadata

Release files for hop3-testing 0.7.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hop3-testing 0.7.3
File Size Uploaded
hop3_testing-0.7.3.tar.gz 192.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hop3-testing 0.7.3
File Interpreter ABI Platform
hop3_testing-0.7.3-py3-none-any.whl Python 3 none any Details

Total release size: 427.6 kB

Release files / hop3_testing-0.7.3.tar.gz

Download URL hop3_testing-0.7.3.tar.gz
Size 192.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1c542b570d371e53130590117887df4decf523ad34078fe486f11487a3b9b648
BLAKE2b-256 checksum
How to use checksums
c6e0243793df12c77eafdfdd8bc3a7d724a49c161ab637735c4523fa052aee51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / hop3_testing-0.7.3-py3-none-any.whl

Download URL hop3_testing-0.7.3-py3-none-any.whl
Size 234.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0234270ec1752b1cf4f28535faf6efd2d20fdae53d2721e0570bb27ea42d2908
BLAKE2b-256 checksum
How to use checksums
bc112dbe9056d7908ca7f8f0ddfc1fb4ef9c8bca99a403b7ee50374b69976374
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page