mirror of
https://github.com/moons-14/dotfiles.git
synced 2026-10-07 06:24:09 +09:00
65 lines
2.1 KiB
Markdown
65 lines
2.1 KiB
Markdown
---
|
|
name: test-nixos-service
|
|
description: Add or extend a non-activating NixOS VM or container test for service startup, sockets, timers, permissions, firewall behavior, reboot state, and inter-service dependencies. Use when evaluation and a system build cannot prove the requested runtime behavior.
|
|
---
|
|
|
|
# Test NixOS Runtime Behavior
|
|
|
|
Prefer `pkgs.testers.runNixOSTest` for reusable NixOS behavior that can be
|
|
proved without the user's physical machine. Do not activate the host
|
|
configuration and do not substitute a live `nh os switch` for a deterministic
|
|
test.
|
|
|
|
## Define the observable contract
|
|
|
|
List the runtime facts that must hold, such as:
|
|
|
|
- a systemd unit reaches `active`;
|
|
- a socket or port is listening;
|
|
- a timer triggers its service;
|
|
- a user can or cannot read a file;
|
|
- a group membership grants access;
|
|
- a firewall permits one path and blocks another;
|
|
- state survives a reboot;
|
|
- one service waits for another dependency.
|
|
|
|
Exclude behavior that requires physical GPU, fingerprint, audio, display,
|
|
Secure Boot, TPM, private credentials, or an external provider unless the test
|
|
can model it explicitly.
|
|
|
|
## Implement the smallest useful machine
|
|
|
|
Create a test under `tests/` and expose it through `checks.<system>`. Import the
|
|
owning module or Registry selection instead of copying its implementation into
|
|
the test. Use only the packages, users, files, and network peers required by the
|
|
contract.
|
|
|
|
Typical shape:
|
|
|
|
```nix
|
|
pkgs.testers.runNixOSTest {
|
|
name = "service-name";
|
|
|
|
nodes.machine = {
|
|
# Enable the owning unit or import the module under test.
|
|
};
|
|
|
|
testScript = ''
|
|
machine.start()
|
|
machine.wait_for_unit("service-name.service")
|
|
machine.succeed("systemctl is-active service-name.service")
|
|
'';
|
|
}
|
|
```
|
|
|
|
Use `wait_for_unit`, `wait_for_open_port`, `succeed`, `fail`, and explicit
|
|
reboots to express outcomes. Avoid arbitrary sleeps when a readiness condition
|
|
exists.
|
|
|
|
## Validate and report
|
|
|
|
Run the targeted test through its flake check, then run the repository
|
|
validation app for the task paths. Report the test attribute and assertions
|
|
that passed. State clearly which hardware or external behavior remains outside
|
|
the VM/container model.
|