forked from Fediversity/Fediversity
closes #93. note that this includes classes: - `nixos` - `nixosTest` - `nixops4Resource` - `nixops4Deployment` .. and my (made-up, as per the [docs](https://ryantm.github.io/nixpkgs/module-system/module-system/#module-system-lib-evalModules-param-class)): - `nix-unit` - `package` .. while i did not manage to cover: - service tests, given `pkgs.nixosTest` seemed to not actually like `_class = "nixosTest"` (?!) ... nor #93's mentioned destructured arguments for that matter, as per Fediversity/Fediversity#93 (comment) - let me know if that is still desired as well. Reviewed-on: Fediversity/Fediversity#398 Reviewed-by: Valentin Gagarin <valentin.gagarin@tweag.io> Co-authored-by: Kiara Grouwstra <kiara@procolix.eu> Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
117 lines
4.6 KiB
Nix
117 lines
4.6 KiB
Nix
{ inputs, hostPkgs, ... }:
|
|
|
|
let
|
|
## Some places need a dummy file that will in fact never be used. We create
|
|
## it here.
|
|
dummyFile = hostPkgs.writeText "dummy" "";
|
|
in
|
|
|
|
{
|
|
_class = "nixosTest";
|
|
|
|
name = "deployment-cli";
|
|
|
|
nodes.deployer =
|
|
{ pkgs, ... }:
|
|
{
|
|
environment.systemPackages = [
|
|
inputs.nixops4.packages.${pkgs.system}.default
|
|
];
|
|
|
|
## FIXME: The following dependencies are necessary but I do not
|
|
## understand why they are not covered by the fake node.
|
|
system.extraDependencies = with pkgs; [
|
|
peertube
|
|
peertube.inputDerivation
|
|
gixy
|
|
gixy.inputDerivation
|
|
];
|
|
|
|
system.extraDependenciesFromModule = {
|
|
imports = [ ../../../services/fediversity ];
|
|
fediversity = {
|
|
domain = "fediversity.net"; # would write `dummy` but that would not type
|
|
garage.enable = true;
|
|
mastodon = {
|
|
enable = true;
|
|
s3AccessKeyFile = dummyFile;
|
|
s3SecretKeyFile = dummyFile;
|
|
};
|
|
peertube = {
|
|
enable = true;
|
|
secretsFile = dummyFile;
|
|
s3AccessKeyFile = dummyFile;
|
|
s3SecretKeyFile = dummyFile;
|
|
};
|
|
pixelfed = {
|
|
enable = true;
|
|
s3AccessKeyFile = dummyFile;
|
|
s3SecretKeyFile = dummyFile;
|
|
};
|
|
temp.cores = 1;
|
|
temp.initialUser = {
|
|
username = "dummy";
|
|
displayName = "dummy";
|
|
email = "dummy";
|
|
passwordFile = dummyFile;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
## NOTE: The target machines may need more RAM than the default to handle
|
|
## being deployed to, otherwise we get something like:
|
|
##
|
|
## pixelfed # [ 616.785499 ] sshd-session[1167]: Conection closed by 2001:db8:1::2 port 45004
|
|
## deployer # error: writing to file: No space left on device
|
|
## pixelfed # [ 616.788538 ] sshd-session[1151]: pam_unix(sshd:session): session closed for user port
|
|
## pixelfed # [ 616.793929 ] systemd-logind[719]: Session 4 logged out. Waiting for processes to exit.
|
|
## deployer # Error: Could not create resource
|
|
##
|
|
## These values have been trimmed down to the gigabyte.
|
|
nodes.mastodon.virtualisation.memorySize = 4 * 1024;
|
|
nodes.pixelfed.virtualisation.memorySize = 4 * 1024;
|
|
nodes.peertube.virtualisation.memorySize = 5 * 1024;
|
|
|
|
## FIXME: The test of presence of the services are very simple: we only
|
|
## check that there is a systemd service of the expected name on the
|
|
## machine. This proves at least that NixOps4 did something, and we cannot
|
|
## really do more for now because the services aren't actually working
|
|
## properly, in particular because of DNS issues. We should fix the services
|
|
## and check that they are working properly.
|
|
|
|
extraTestScript = ''
|
|
with subtest("Check the status of the services - there should be none"):
|
|
garage.fail("systemctl status garage.service")
|
|
mastodon.fail("systemctl status mastodon-web.service")
|
|
peertube.fail("systemctl status peertube.service")
|
|
pixelfed.fail("systemctl status phpfpm-pixelfed.service")
|
|
|
|
with subtest("Run deployment with no services enabled"):
|
|
deployer.succeed("nixops4 apply check-deployment-cli-nothing --show-trace --no-interactive 1>&2")
|
|
|
|
with subtest("Check the status of the services - there should still be none"):
|
|
garage.fail("systemctl status garage.service")
|
|
mastodon.fail("systemctl status mastodon-web.service")
|
|
peertube.fail("systemctl status peertube.service")
|
|
pixelfed.fail("systemctl status phpfpm-pixelfed.service")
|
|
|
|
with subtest("Run deployment with Mastodon and Pixelfed enabled"):
|
|
deployer.succeed("nixops4 apply check-deployment-cli-mastodon-pixelfed --show-trace --no-interactive 1>&2")
|
|
|
|
with subtest("Check the status of the services - expecting Garage, Mastodon and Pixelfed"):
|
|
garage.succeed("systemctl status garage.service")
|
|
mastodon.succeed("systemctl status mastodon-web.service")
|
|
peertube.fail("systemctl status peertube.service")
|
|
pixelfed.succeed("systemctl status phpfpm-pixelfed.service")
|
|
|
|
with subtest("Run deployment with only Peertube enabled"):
|
|
deployer.succeed("nixops4 apply check-deployment-cli-peertube --show-trace --no-interactive 1>&2")
|
|
|
|
with subtest("Check the status of the services - expecting Garage and Peertube"):
|
|
garage.succeed("systemctl status garage.service")
|
|
mastodon.fail("systemctl status mastodon-web.service")
|
|
peertube.succeed("systemctl status peertube.service")
|
|
pixelfed.fail("systemctl status phpfpm-pixelfed.service")
|
|
'';
|
|
}
|