mirror of
https://github.com/marcoallegretti/karapace.git
synced 2026-03-26 21:43:09 +00:00
78 lines
2.3 KiB
Markdown
78 lines
2.3 KiB
Markdown
|
|
# End-to-End Testing
|
||
|
|
|
||
|
|
Karapace includes end-to-end tests that exercise the real namespace backend with `unshare`, `fuse-overlayfs`, and actual container images.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
- Linux with user namespace support (`CONFIG_USER_NS=y`)
|
||
|
|
- `fuse-overlayfs` installed
|
||
|
|
- `curl` installed
|
||
|
|
- Network access (images are downloaded from `images.linuxcontainers.org`)
|
||
|
|
|
||
|
|
### Install on openSUSE Tumbleweed
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo zypper install fuse-overlayfs curl
|
||
|
|
```
|
||
|
|
|
||
|
|
### Install on Ubuntu/Debian
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo apt-get install fuse-overlayfs curl
|
||
|
|
```
|
||
|
|
|
||
|
|
### Install on Fedora
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo dnf install fuse-overlayfs curl
|
||
|
|
```
|
||
|
|
|
||
|
|
## Running E2E Tests
|
||
|
|
|
||
|
|
E2E tests are `#[ignore]` by default. Run them explicitly:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo test --test e2e -- --ignored --test-threads=1
|
||
|
|
```
|
||
|
|
|
||
|
|
The `--test-threads=1` flag is important: E2E tests mount overlays and download images, so parallel execution can cause resource conflicts.
|
||
|
|
|
||
|
|
## Test Descriptions
|
||
|
|
|
||
|
|
| Test | What it does |
|
||
|
|
|---|---|
|
||
|
|
| `e2e_build_minimal_namespace` | Build a minimal openSUSE Tumbleweed environment with no packages |
|
||
|
|
| `e2e_exec_in_namespace` | Build + exec `echo hello` inside the container |
|
||
|
|
| `e2e_destroy_cleans_up` | Build + destroy, verify env_dir is removed |
|
||
|
|
| `e2e_rebuild_determinism` | Build + rebuild, verify env_id is identical |
|
||
|
|
| `e2e_build_with_packages` | Build with `which` package, verify resolved versions in lock file |
|
||
|
|
|
||
|
|
## CI
|
||
|
|
|
||
|
|
The GitHub Actions CI workflow includes an E2E job that runs on `ubuntu-latest`:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
e2e:
|
||
|
|
name: E2E Tests
|
||
|
|
runs-on: ubuntu-latest
|
||
|
|
needs: [test]
|
||
|
|
steps:
|
||
|
|
- uses: actions/checkout@v4
|
||
|
|
- uses: dtolnay/rust-toolchain@stable
|
||
|
|
- uses: Swatinem/rust-cache@v2
|
||
|
|
- name: Install prerequisites
|
||
|
|
run: |
|
||
|
|
sudo apt-get update -qq
|
||
|
|
sudo apt-get install -y -qq fuse-overlayfs curl
|
||
|
|
sudo sysctl -w kernel.unprivileged_userns_clone=1 || true
|
||
|
|
- name: Run E2E tests
|
||
|
|
run: cargo test --test e2e -- --ignored --test-threads=1
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
- **"unshare: user namespaces not available"** — Enable with `sysctl kernel.unprivileged_userns_clone=1`
|
||
|
|
- **"fuse-overlayfs not found"** — Install the `fuse-overlayfs` package
|
||
|
|
- **"failed to download image"** — Check network connectivity and DNS
|
||
|
|
- **Stale mounts after failed test** — Run `fusermount3 -u /path/to/merged` or reboot
|