c99d074c5a
* Mount object stores and any rclone-supported remote filesystem into machines through the volume flag * Force multipart uploads for plain-http S3 endpoints so mount write-back works against local object stores * Fail machine start loudly when remote volumes cannot mount, refuse forking mounted goldens, and add the self-contained end-to-end suite * Accept remote volumes through the Smolfile and serve API surfaces, mount them on every API launch path, and warn when packing drops them * Mount remote volumes from the agent so a service image keeps its own entrypoint * Cover a service image keeping its entrypoint under a remote volume * Make remote-volume e2e checks robust to async vfs flush and busybox * Wait for mount and entrypoint to settle before asserting in remote-volume e2e * Drop a stray stdin or resize frame at the agent top level instead of failing the next request
smolvm Tests
Integration tests for smolvm. All tests invoke the smolvm binary directly
against real VMs — no mocking.
Runner: run_tests.sh
Single entry point for all test suites.
./tests/run_tests.sh # all 12 feature suites (~10 min)
SMOLVM_SKIP_SLOW=1 ./tests/run_tests.sh # skip tests with long sleeps (~5 min)
./tests/run_tests.sh bare network # specific groups only
Feature suites (run by default)
| Group | Suite file | Tests | Notes |
|---|---|---|---|
bare |
test_machine_bare.sh |
22 | Lifecycle, exec, shell, file I/O, observability |
db |
test_db.sh |
6 | DB state persistence, VM state transitions |
network |
test_network.sh |
17 | Network disable, DNS, egress, DNS filter, Smolfile allow_hosts |
volumes |
test_volumes.sh |
6 | virtiofs mounts, /workspace priority |
ports |
test_ports.sh |
2 | Port mapping, cross-VM conflict detection |
storage |
test_storage.sh |
12 | Overlay, image list, prune, storage resize |
resources |
test_resources.sh |
8 | CLI validation — no VMs required |
reliability |
test_reliability.sh |
5 | Concurrency, state probe, ls-does-not-kill-vm |
run |
test_machine_run.sh |
25 | Ephemeral machine run scenarios |
image |
test_machine_image.sh |
13 | Image-based VMs, exec-join, large stdout |
local-image |
test_machine_local_image.sh |
6 | Local images: save-archive (file/stdin), rootfs dir, stdin + Dockerfile guards (needs docker) |
packed |
test_machine_packed.sh |
2 | .smolmachine create and cp |
Extended suites (opt-in only)
These are not included in the default run. Pass the group name explicitly:
./tests/run_tests.sh cli
./tests/run_tests.sh api
./tests/run_tests.sh virtio-net
./tests/run_tests.sh smolfile
./tests/run_tests.sh pack
./tests/run_tests.sh pack-quick # pack tests, skip large image pulls
./tests/run_tests.sh gpu # requires GPU hardware
| Group | Suite file | Tests |
|---|---|---|
cli |
test_cli.sh |
10 |
api |
test_api.sh |
25 |
virtio-net |
test_virtio_net.sh |
6 |
smolfile |
test_smolfile.sh |
49 |
pack / pack-quick |
test_pack.sh |
39 |
gpu |
test_gpu.sh |
14 |
Environment variables
| Variable | Effect |
|---|---|
SMOLVM |
Override binary path |
SMOLVM_SKIP_SLOW=1 |
Skip tests with intentional sleeps ≥ 25 s (docker-in-vm, ls-probe loops, egress refresh) |
TEST_FILTER |
Only run tests whose display name contains this substring |
FAIL_FAST=1 |
Stop on first failure |
Unit tests
No VM required. Run via cargo:
cargo test
Benchmarks
./tests/bench_vm_startup.sh # VM cold/warm start time
./tests/run_tests.sh bench # same, via runner
Binary discovery
Tests find the smolvm binary in this order:
$SMOLVMenvironment variabletarget/release/smolvm(cargo build output)dist/smolvm-*-darwin-*/smolvmordist/smolvm-*-linux-*/smolvm