Add plan tests (#91)

This commit is contained in:
Ana Hobden 2022-12-05 09:47:13 -08:00 committed by GitHub
parent 4ce8d94ac7
commit 898d053c70
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 1925 additions and 0 deletions

View file

@ -57,3 +57,6 @@ typetag = "0.2.3"
dyn-clone = "1.0.9"
rand = "0.8.5"
semver = { version = "1.0.14", features = ["serde"] }
[dev-dependencies]
eyre = "0.6.8"

671
tests/fixtures/darwin/darwin-multi.json vendored Normal file
View file

@ -0,0 +1,671 @@
{
"version": "0.0.0-unreleased",
"actions": [
{
"action": {
"action": "create_apfs_volume",
"disk": "disk1",
"name": "Nix Store",
"case_sensitive": false,
"encrypt": true,
"create_or_append_synthetic_conf": {
"action": {
"path": "/etc/synthetic.conf",
"user": null,
"group": null,
"mode": 429,
"buf": "nix\n"
},
"state": "Uncompleted"
},
"create_synthetic_objects": {
"action": null,
"state": "Uncompleted"
},
"unmount_volume": {
"action": {
"disk": "disk1",
"name": "Nix Store"
},
"state": "Uncompleted"
},
"create_volume": {
"action": {
"disk": "disk1",
"name": "Nix Store",
"case_sensitive": false
},
"state": "Uncompleted"
},
"create_or_append_fstab": {
"action": {
"path": "/etc/fstab",
"user": null,
"group": null,
"mode": 429,
"buf": "NAME=\"Nix Store\" /nix apfs rw,noauto,nobrowse,suid,owners"
},
"state": "Uncompleted"
},
"encrypt_volume": {
"action": {
"disk": "disk1",
"name": "Nix Store"
},
"state": "Uncompleted"
},
"setup_volume_daemon": {
"action": {
"path": "/Library/LaunchDaemons/org.nixos.darwin-store.plist",
"user": null,
"group": null,
"mode": null,
"buf": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n<key>RunAtLoad</key>\n<true/>\n<key>Label</key>\n<string>org.nixos.darwin-store</string>\n<key>ProgramArguments</key>\n<array>\n<string>/bin/sh</string>\n\n<string>-c</string>\n\n<string>/usr/bin/security find-generic-password -s \"Nix Store\" -w | /usr/sbin/diskutil apfs unlockVolume \"Nix Store\" -mountpoint /nix -stdinpassphrase</string>\n</array>\n</dict>\n</plist>\n",
"force": false
},
"state": "Uncompleted"
},
"bootstrap_volume": {
"action": {
"path": "/Library/LaunchDaemons/org.nixos.darwin-store.plist"
},
"state": "Uncompleted"
},
"enable_ownership": {
"action": {
"path": "/nix"
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "provision_nix",
"fetch_nix": {
"action": {
"url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-darwin.tar.xz",
"dest": "/nix/temp-install-dir"
},
"state": "Uncompleted"
},
"create_users_and_group": {
"action": {
"daemon_user_count": 32,
"nix_build_group_name": "nixbld",
"nix_build_group_id": 3000,
"nix_build_user_prefix": "_nixbld",
"nix_build_user_id_base": 300,
"create_group": {
"action": {
"name": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
"create_users": [
{
"action": {
"name": "_nixbld0",
"uid": 300,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld1",
"uid": 301,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld2",
"uid": 302,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld3",
"uid": 303,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld4",
"uid": 304,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld5",
"uid": 305,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld6",
"uid": 306,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld7",
"uid": 307,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld8",
"uid": 308,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld9",
"uid": 309,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld10",
"uid": 310,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld11",
"uid": 311,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld12",
"uid": 312,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld13",
"uid": 313,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld14",
"uid": 314,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld15",
"uid": 315,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld16",
"uid": 316,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld17",
"uid": 317,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld18",
"uid": 318,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld19",
"uid": 319,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld20",
"uid": 320,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld21",
"uid": 321,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld22",
"uid": 322,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld23",
"uid": 323,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld24",
"uid": 324,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld25",
"uid": 325,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld26",
"uid": 326,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld27",
"uid": 327,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld28",
"uid": 328,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld29",
"uid": 329,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld30",
"uid": 330,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "_nixbld31",
"uid": 331,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"create_nix_tree": {
"action": {
"create_directories": [
{
"action": {
"path": "/nix/var",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log/nix/drvs",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/db",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/gcroots",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/gcroots/per-user",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/profiles",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/profiles/per-user",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/temproots",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/userpool",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/daemon-socket",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"move_unpacked_nix": {
"action": {
"src": "/nix/temp-install-dir"
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "configure_nix",
"setup_default_profile": {
"action": {
"channels": [
"nixpkgs"
]
},
"state": "Uncompleted"
},
"configure_shell_profile": {
"action": {
"create_or_append_files": [
{
"action": {
"path": "/etc/bashrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/zshrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"place_channel_configuration": {
"action": {
"channels": [
[
"nixpkgs",
"https://nixos.org/channels/nixpkgs-unstable"
]
],
"create_file": {
"action": {
"path": "/Users/ephemeraladmin/.nix-channels",
"user": null,
"group": null,
"mode": 436,
"buf": "https://nixos.org/channels/nixpkgs-unstable nixpkgs",
"force": false
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
"place_nix_configuration": {
"action": {
"create_directory": {
"action": {
"path": "/etc/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
"create_file": {
"action": {
"path": "/etc/nix/nix.conf",
"user": null,
"group": null,
"mode": 436,
"buf": "\n\nbuild-users-group = nixbld\n\nexperimental-features = nix-command flakes\n\nauto-optimise-store = true\n",
"force": false
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
"configure_nix_daemon_service": {
"action": {},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "kickstart_launchctl_service",
"unit": "system/org.nixos.nix-daemon"
},
"state": "Uncompleted"
}
],
"planner": {
"planner": "darwin-multi",
"settings": {
"channels": [
[
"nixpkgs",
"https://nixos.org/channels/nixpkgs-unstable"
]
],
"modify_profile": true,
"daemon_user_count": 32,
"nix_build_group_name": "nixbld",
"nix_build_group_id": 3000,
"nix_build_user_prefix": "_nixbld",
"nix_build_user_id_base": 300,
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-darwin.tar.xz",
"extra_conf": [],
"force": false
},
"encrypt": null,
"case_sensitive": false,
"volume_label": "Nix Store",
"root_disk": "disk1"
}
}

589
tests/fixtures/linux/linux-multi.json vendored Normal file
View file

@ -0,0 +1,589 @@
{
"version": "0.0.0-unreleased",
"actions": [
{
"action": {
"action": "create_directory",
"path": "/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": true
},
"state": "Uncompleted"
},
{
"action": {
"action": "provision_nix",
"fetch_nix": {
"action": {
"url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"dest": "/nix/temp-install-dir"
},
"state": "Uncompleted"
},
"create_users_and_group": {
"action": {
"daemon_user_count": 32,
"nix_build_group_name": "nixbld",
"nix_build_group_id": 3000,
"nix_build_user_prefix": "nixbld",
"nix_build_user_id_base": 3000,
"create_group": {
"action": {
"name": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
"create_users": [
{
"action": {
"name": "nixbld0",
"uid": 3000,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld1",
"uid": 3001,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld2",
"uid": 3002,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld3",
"uid": 3003,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld4",
"uid": 3004,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld5",
"uid": 3005,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld6",
"uid": 3006,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld7",
"uid": 3007,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld8",
"uid": 3008,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld9",
"uid": 3009,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld10",
"uid": 3010,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld11",
"uid": 3011,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld12",
"uid": 3012,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld13",
"uid": 3013,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld14",
"uid": 3014,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld15",
"uid": 3015,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld16",
"uid": 3016,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld17",
"uid": 3017,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld18",
"uid": 3018,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld19",
"uid": 3019,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld20",
"uid": 3020,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld21",
"uid": 3021,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld22",
"uid": 3022,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld23",
"uid": 3023,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld24",
"uid": 3024,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld25",
"uid": 3025,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld26",
"uid": 3026,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld27",
"uid": 3027,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld28",
"uid": 3028,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld29",
"uid": 3029,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld30",
"uid": 3030,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld31",
"uid": 3031,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"create_nix_tree": {
"action": {
"create_directories": [
{
"action": {
"path": "/nix/var",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log/nix/drvs",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/db",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/gcroots",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/gcroots/per-user",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/profiles",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/profiles/per-user",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/temproots",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/userpool",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/daemon-socket",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"move_unpacked_nix": {
"action": {
"src": "/nix/temp-install-dir"
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "configure_nix",
"setup_default_profile": {
"action": {
"channels": [
"nixpkgs"
]
},
"state": "Uncompleted"
},
"configure_shell_profile": {
"action": {
"create_or_append_files": [
{
"action": {
"path": "/etc/bash.bashrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"place_channel_configuration": {
"action": {
"channels": [
[
"nixpkgs",
"https://nixos.org/channels/nixpkgs-unstable"
]
],
"create_file": {
"action": {
"path": "/root/.nix-channels",
"user": null,
"group": null,
"mode": 436,
"buf": "https://nixos.org/channels/nixpkgs-unstable nixpkgs",
"force": false
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
"place_nix_configuration": {
"action": {
"create_directory": {
"action": {
"path": "/etc/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
"create_file": {
"action": {
"path": "/etc/nix/nix.conf",
"user": null,
"group": null,
"mode": 436,
"buf": "\n\nbuild-users-group = nixbld\n\nexperimental-features = nix-command flakes\n\nauto-optimise-store = true\n",
"force": false
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
"configure_nix_daemon_service": {
"action": {},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "start_systemd_unit",
"unit": "nix-daemon.socket"
},
"state": "Uncompleted"
}
],
"planner": {
"planner": "linux-multi",
"settings": {
"channels": [
[
"nixpkgs",
"https://nixos.org/channels/nixpkgs-unstable"
]
],
"modify_profile": true,
"daemon_user_count": 32,
"nix_build_group_name": "nixbld",
"nix_build_group_id": 3000,
"nix_build_user_prefix": "nixbld",
"nix_build_user_id_base": 3000,
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"extra_conf": [],
"force": false
}
}
}

633
tests/fixtures/linux/steam-deck.json vendored Normal file
View file

@ -0,0 +1,633 @@
{
"version": "0.0.0-unreleased",
"actions": [
{
"action": {
"action": "create_directory",
"path": "/home/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": true
},
"state": "Uncompleted"
},
{
"action": {
"action": "create_file",
"path": "/etc/systemd/system/nix-directory.service",
"user": null,
"group": null,
"mode": 420,
"buf": "\n [Unit]\nDescription=Create a `/nix` directory to be used for bind mounting\nPropagatesStopTo=nix-daemon.service\nPropagatesStopTo=nix.mount\nDefaultDependencies=no\n\n[Service]\nType=oneshot\nExecCondition=sh -c \"if [ -d /nix ]; then exit 1; else exit 0; fi\"\n ExecStart=steamos-readonly disable\nExecStart=mkdir -vp /nix\nExecStart=chmod -v 0755 /nix\nExecStart=chown -v root /nix\nExecStart=chgrp -v root /nix\nExecStart=steamos-readonly enable\nExecStop=steamos-readonly disable\nExecStop=rmdir /nix\nExecStop=steamos-readonly enable\nRemainAfterExit=true\n",
"force": false
},
"state": "Uncompleted"
},
{
"action": {
"action": "create_file",
"path": "/etc/systemd/system/nix.mount",
"user": null,
"group": null,
"mode": 420,
"buf": "[Unit]\nDescription=Mount `/home/nix` on `/nix`\nPropagatesStopTo=nix-daemon.service\nPropagatesStopTo=nix-directory.service\nAfter=nix-directory.service\nRequires=nix-directory.service\nConditionPathIsDirectory=/nix\nDefaultDependencies=no\n\n[Mount]\nWhat=/home/nix\nWhere=/nix\nType=none\nDirectoryMode=0755\nOptions=bind\n",
"force": false
},
"state": "Uncompleted"
},
{
"action": {
"action": "create_file",
"path": "/etc/systemd/system/ensure-symlinked-units-resolve.service",
"user": null,
"group": null,
"mode": 420,
"buf": "[Unit]\nDescription=Ensure Nix related units which are symlinked resolve\nAfter=nix.mount\nRequires=nix-directory.service\nRequires=nix.mount\nPropagatesStopTo=nix-directory.service\nPropagatesStopTo=nix.mount\nDefaultDependencies=no\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nExecStart=/usr/bin/systemctl daemon-reload\nExecStart=/usr/bin/systemctl restart --no-block sockets.target timers.target multi-user.target\n\n[Install]\nWantedBy=sysinit.target\n",
"force": false
},
"state": "Uncompleted"
},
{
"action": {
"action": "start_systemd_unit",
"unit": "ensure-symlinked-units-resolve.service"
},
"state": "Uncompleted"
},
{
"action": {
"action": "provision_nix",
"fetch_nix": {
"action": {
"url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"dest": "/nix/temp-install-dir"
},
"state": "Uncompleted"
},
"create_users_and_group": {
"action": {
"daemon_user_count": 32,
"nix_build_group_name": "nixbld",
"nix_build_group_id": 3000,
"nix_build_user_prefix": "nixbld",
"nix_build_user_id_base": 3000,
"create_group": {
"action": {
"name": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
"create_users": [
{
"action": {
"name": "nixbld0",
"uid": 3000,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld1",
"uid": 3001,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld2",
"uid": 3002,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld3",
"uid": 3003,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld4",
"uid": 3004,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld5",
"uid": 3005,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld6",
"uid": 3006,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld7",
"uid": 3007,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld8",
"uid": 3008,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld9",
"uid": 3009,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld10",
"uid": 3010,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld11",
"uid": 3011,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld12",
"uid": 3012,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld13",
"uid": 3013,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld14",
"uid": 3014,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld15",
"uid": 3015,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld16",
"uid": 3016,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld17",
"uid": 3017,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld18",
"uid": 3018,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld19",
"uid": 3019,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld20",
"uid": 3020,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld21",
"uid": 3021,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld22",
"uid": 3022,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld23",
"uid": 3023,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld24",
"uid": 3024,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld25",
"uid": 3025,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld26",
"uid": 3026,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld27",
"uid": 3027,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld28",
"uid": 3028,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld29",
"uid": 3029,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld30",
"uid": 3030,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
},
{
"action": {
"name": "nixbld31",
"uid": 3031,
"groupname": "nixbld",
"gid": 3000
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"create_nix_tree": {
"action": {
"create_directories": [
{
"action": {
"path": "/nix/var",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/log/nix/drvs",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/db",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/gcroots",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/gcroots/per-user",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/profiles",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/profiles/per-user",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/temproots",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/userpool",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
{
"action": {
"path": "/nix/var/nix/daemon-socket",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"move_unpacked_nix": {
"action": {
"src": "/nix/temp-install-dir"
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "configure_nix",
"setup_default_profile": {
"action": {
"channels": [
"nixpkgs"
]
},
"state": "Uncompleted"
},
"configure_shell_profile": {
"action": {
"create_or_append_files": [
{
"action": {
"path": "/etc/bash.bashrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
}
]
},
"state": "Uncompleted"
},
"place_channel_configuration": {
"action": {
"channels": [
[
"nixpkgs",
"https://nixos.org/channels/nixpkgs-unstable"
]
],
"create_file": {
"action": {
"path": "/root/.nix-channels",
"user": null,
"group": null,
"mode": 436,
"buf": "https://nixos.org/channels/nixpkgs-unstable nixpkgs",
"force": false
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
"place_nix_configuration": {
"action": {
"create_directory": {
"action": {
"path": "/etc/nix",
"user": null,
"group": null,
"mode": 493,
"force_prune_on_revert": false
},
"state": "Uncompleted"
},
"create_file": {
"action": {
"path": "/etc/nix/nix.conf",
"user": null,
"group": null,
"mode": 436,
"buf": "\n\nbuild-users-group = nixbld\n\nexperimental-features = nix-command flakes\n\nauto-optimise-store = true\n",
"force": false
},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
"configure_nix_daemon_service": {
"action": {},
"state": "Uncompleted"
}
},
"state": "Uncompleted"
},
{
"action": {
"action": "start_systemd_unit",
"unit": "nix-daemon.socket"
},
"state": "Uncompleted"
}
],
"planner": {
"planner": "steam-deck",
"persistence": "/home/nix",
"settings": {
"channels": [
[
"nixpkgs",
"https://nixos.org/channels/nixpkgs-unstable"
]
],
"modify_profile": true,
"daemon_user_count": 32,
"nix_build_group_name": "nixbld",
"nix_build_group_id": 3000,
"nix_build_user_prefix": "nixbld",
"nix_build_user_id_base": 3000,
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"extra_conf": [],
"force": false
}
}
}

29
tests/plan.rs Normal file
View file

@ -0,0 +1,29 @@
use harmonic::InstallPlan;
const LINUX_MULTI: &str = include_str!("./fixtures/linux/linux-multi.json");
const STEAM_DECK: &str = include_str!("./fixtures/linux/steam-deck.json");
const DARWIN_MULTI: &str = include_str!("./fixtures/darwin/darwin-multi.json");
// Ensure existing plans still parse
// If this breaks and you need to update the fixture, it's time to raise version.
#[test]
fn plan_compat_linux_multi() -> eyre::Result<()> {
let _: InstallPlan = serde_json::from_str(LINUX_MULTI)?;
Ok(())
}
// Ensure existing plans still parse
// If this breaks and you need to update the fixture, it's time to raise version.
#[test]
fn plan_compat_steam_deck() -> eyre::Result<()> {
let _: InstallPlan = serde_json::from_str(STEAM_DECK)?;
Ok(())
}
// Ensure existing plans still parse
// If this breaks and you need to update the fixture, it's time to raise version.
#[test]
fn plan_compat_darwin_multi() -> eyre::Result<()> {
let _: InstallPlan = serde_json::from_str(DARWIN_MULTI)?;
Ok(())
}