diff --git a/flake.nix b/flake.nix index 60a79a5..4bd48b1 100644 --- a/flake.nix +++ b/flake.nix @@ -220,6 +220,9 @@ ruff = ruffCheck; pyright = pyrightCheck; } + // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { + nixos-module = pkgs.testers.runNixOSTest (import ./nix/tests/matrix-ops-bot.nix self); + } ); devShells = forAllSystems (pkgs: { diff --git a/nix/tests/matrix-ops-bot.nix b/nix/tests/matrix-ops-bot.nix new file mode 100644 index 0000000..72b50ca --- /dev/null +++ b/nix/tests/matrix-ops-bot.nix @@ -0,0 +1,52 @@ +self: { + name = "matrix-ops-bot-nixos-module"; + + nodes.machine = + { pkgs, ... }: + { + imports = [ self.nixosModules.default ]; + + environment.systemPackages = [ pkgs.curl ]; + + environment.etc."matrix-ops-bot/config.json".text = builtins.toJSON { + routing_keys = [ ]; + log_level = "INFO"; + matrix = { + homeserver = "http://127.0.0.1:9"; + user_id = "@ops-bot:example.invalid"; + password = "not-a-real-password"; + device_name = "nixos-test"; + store_path = "/var/lib/matrix-ops-bot/matrix"; + verify_ssl = false; + }; + }; + + environment.etc."matrix-ops-bot/bot.env".text = '' + BOT_LOG_LEVEL=DEBUG + ''; + + services.matrix-ops-bot = { + enable = true; + port = 1111; + configFile = "/etc/matrix-ops-bot/config.json"; + envFile = "/etc/matrix-ops-bot/bot.env"; + }; + }; + + testScript = '' + machine.wait_for_unit("multi-user.target") + machine.wait_for_unit("matrix-ops-bot.service") + machine.wait_for_open_port(1111) + + unit = machine.succeed("systemctl cat matrix-ops-bot.service") + assert "DynamicUser=true" in unit, unit + assert "StateDirectory=matrix-ops-bot" in unit, unit + assert "LoadCredential=config.json:/etc/matrix-ops-bot/config.json" in unit, unit + assert "LoadCredential=bot.env:/etc/matrix-ops-bot/bot.env" in unit, unit + + machine.succeed("test -f /run/credentials/matrix-ops-bot.service/config.json") + machine.succeed("test -f /run/credentials/matrix-ops-bot.service/bot.env") + + machine.succeed("curl -sf http://127.0.0.1:1111/ | grep -F '\"message\":\"Hello World\"'") + ''; +}