Exposing the function via clanLib makes it more accessible to clan modules This allows each module to define its own test without needing to depend on any fileSystem path assumptions in the clan-core repo
87 lines
2.1 KiB
Nix
87 lines
2.1 KiB
Nix
{
|
|
pkgs,
|
|
self,
|
|
clanLib,
|
|
...
|
|
}:
|
|
clanLib.test.makeTestClan {
|
|
inherit pkgs self;
|
|
nixosTest = (
|
|
{ lib, ... }:
|
|
let
|
|
machines = [
|
|
"admin"
|
|
"peer"
|
|
"signer"
|
|
];
|
|
in
|
|
{
|
|
name = "data-mesher";
|
|
|
|
clan = {
|
|
directory = ./.;
|
|
inventory = {
|
|
machines = lib.genAttrs machines (_: { });
|
|
services = {
|
|
data-mesher.default = {
|
|
roles.peer.machines = [ "peer" ];
|
|
roles.admin.machines = [ "admin" ];
|
|
roles.signer.machines = [ "signer" ];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
defaults =
|
|
{ config, ... }:
|
|
{
|
|
environment.systemPackages = [
|
|
config.services.data-mesher.package
|
|
];
|
|
|
|
clan.data-mesher.network.interface = "eth1";
|
|
clan.data-mesher.bootstrapNodes = [
|
|
"[2001:db8:1::1]:7946" # peer1
|
|
"[2001:db8:1::2]:7946" # peer2
|
|
];
|
|
|
|
# speed up for testing
|
|
services.data-mesher.settings = {
|
|
cluster.join_interval = lib.mkForce "2s";
|
|
cluster.push_pull_interval = lib.mkForce "5s";
|
|
};
|
|
};
|
|
|
|
nodes = {
|
|
admin.clan.data-mesher.network.tld = "foo";
|
|
};
|
|
|
|
# TODO Add better test script.
|
|
testScript = ''
|
|
|
|
def resolve(node, success = {}, fail = [], timeout = 60):
|
|
for hostname, ips in success.items():
|
|
for ip in ips:
|
|
node.wait_until_succeeds(f"getent ahosts {hostname} | grep {ip}", timeout)
|
|
|
|
for hostname in fail:
|
|
node.wait_until_fails(f"getent ahosts {hostname}")
|
|
|
|
start_all()
|
|
|
|
admin.wait_for_unit("data-mesher")
|
|
signer.wait_for_unit("data-mesher")
|
|
peer.wait_for_unit("data-mesher")
|
|
|
|
# check dns resolution
|
|
for node in [admin, signer, peer]:
|
|
resolve(node, {
|
|
"admin.foo": ["2001:db8:1::1", "192.168.1.1"],
|
|
"peer.foo": ["2001:db8:1::2", "192.168.1.2"],
|
|
"signer.foo": ["2001:db8:1::3", "192.168.1.3"]
|
|
})
|
|
'';
|
|
}
|
|
);
|
|
}
|