By default /etc/passwd in container build sandboxes have two users (root,nixbld) mapped to root. This confuses nix especially it behaves different if it runs as root. setuid/setgid() is not enough because ssh will break if the current uid does not exist in /etc/passwd. Along with this we now also only run the setup for setting up the network bridge and cgroup filesystems once and not per container.
65 lines
1.9 KiB
Nix
65 lines
1.9 KiB
Nix
{
|
|
pkgs,
|
|
nixosLib,
|
|
clan-core,
|
|
...
|
|
}:
|
|
|
|
nixosLib.runTest (
|
|
{ hostPkgs, config, ... }:
|
|
{
|
|
imports = [
|
|
clan-core.modules.nixosTest.clanTest
|
|
];
|
|
|
|
hostPkgs = pkgs;
|
|
|
|
# This tests the compatibility of the inventory
|
|
# With the test framework
|
|
# - legacy-modules
|
|
# - clan.service modules
|
|
name = "service-dummy-test-from-flake";
|
|
|
|
clan.test.fromFlake = ./.;
|
|
|
|
extraPythonPackages = _p: [
|
|
clan-core.legacyPackages.${hostPkgs.system}.nixosTestLib
|
|
];
|
|
|
|
testScript =
|
|
{ nodes, ... }:
|
|
''
|
|
import subprocess
|
|
from nixos_test_lib.nix_setup import setup_nix_in_nix # type: ignore[import-untyped]
|
|
|
|
setup_nix_in_nix(None) # No closure info for this test
|
|
|
|
start_all()
|
|
admin1.wait_for_unit("multi-user.target")
|
|
peer1.wait_for_unit("multi-user.target")
|
|
# Provided by the legacy module
|
|
print(admin1.succeed("systemctl status dummy-service"))
|
|
print(peer1.succeed("systemctl status dummy-service"))
|
|
|
|
# peer1 should have the 'hello' file
|
|
peer1.succeed("cat ${nodes.peer1.clan.core.vars.generators.new-service.files.not-a-secret.path}")
|
|
|
|
ls_out = peer1.succeed("ls -la ${nodes.peer1.clan.core.vars.generators.new-service.files.a-secret.path}")
|
|
# Check that the file is owned by 'nobody'
|
|
assert "nobody" in ls_out, f"File is not owned by 'nobody': {ls_out}"
|
|
# Check that the file is in the 'users' group
|
|
assert "users" in ls_out, f"File is not in the 'users' group: {ls_out}"
|
|
# Check that the file is in the '0644' mode
|
|
assert "-rw-r--r--" in ls_out, f"File is not in the '0644' mode: {ls_out}"
|
|
|
|
# Run clan command
|
|
result = subprocess.run(
|
|
["${
|
|
clan-core.packages.${hostPkgs.system}.clan-cli
|
|
}/bin/clan", "machines", "list", "--flake", "${config.clan.test.flakeForSandbox}"],
|
|
check=True
|
|
)
|
|
'';
|
|
}
|
|
)
|