mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 06:53:01 +00:00
nixos/tests/journal-gateway: init
move previous gateway test from systemd-journal -> systemd-journal-gateway
This commit is contained in:
parent
b484343cbc
commit
302c329ab5
@ -829,6 +829,7 @@ in {
|
|||||||
systemd-initrd-networkd-openvpn = handleTest ./initrd-network-openvpn { systemdStage1 = true; };
|
systemd-initrd-networkd-openvpn = handleTest ./initrd-network-openvpn { systemdStage1 = true; };
|
||||||
systemd-initrd-vlan = handleTest ./systemd-initrd-vlan.nix {};
|
systemd-initrd-vlan = handleTest ./systemd-initrd-vlan.nix {};
|
||||||
systemd-journal = handleTest ./systemd-journal.nix {};
|
systemd-journal = handleTest ./systemd-journal.nix {};
|
||||||
|
systemd-journal-gateway = handleTest ./systemd-journal-gateway.nix {};
|
||||||
systemd-machinectl = handleTest ./systemd-machinectl.nix {};
|
systemd-machinectl = handleTest ./systemd-machinectl.nix {};
|
||||||
systemd-networkd = handleTest ./systemd-networkd.nix {};
|
systemd-networkd = handleTest ./systemd-networkd.nix {};
|
||||||
systemd-networkd-dhcpserver = handleTest ./systemd-networkd-dhcpserver.nix {};
|
systemd-networkd-dhcpserver = handleTest ./systemd-networkd-dhcpserver.nix {};
|
||||||
|
90
nixos/tests/systemd-journal-gateway.nix
Normal file
90
nixos/tests/systemd-journal-gateway.nix
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
import ./make-test-python.nix ({ lib, pkgs, ... }:
|
||||||
|
{
|
||||||
|
name = "systemd-journal-gateway";
|
||||||
|
meta = with pkgs.lib.maintainers; {
|
||||||
|
maintainers = [ minijackson ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Named client for coherence with the systemd-journal-upload test, and for
|
||||||
|
# certificate validation
|
||||||
|
nodes.client = {
|
||||||
|
services.journald.gateway = {
|
||||||
|
enable = true;
|
||||||
|
cert = "/run/secrets/client/cert.pem";
|
||||||
|
key = "/run/secrets/client/key.pem";
|
||||||
|
trust = "/run/secrets/ca.cert.pem";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
tmpdir_o = tempfile.TemporaryDirectory()
|
||||||
|
tmpdir = tmpdir_o.name
|
||||||
|
|
||||||
|
def generate_pems(domain: str):
|
||||||
|
subprocess.run(
|
||||||
|
[
|
||||||
|
"${pkgs.minica}/bin/minica",
|
||||||
|
"--ca-key=ca.key.pem",
|
||||||
|
"--ca-cert=ca.cert.pem",
|
||||||
|
f"--domains={domain}",
|
||||||
|
],
|
||||||
|
cwd=str(tmpdir),
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("Creating keys and certificates"):
|
||||||
|
generate_pems("server")
|
||||||
|
generate_pems("client")
|
||||||
|
|
||||||
|
client.wait_for_unit("multi-user.target")
|
||||||
|
|
||||||
|
def copy_pem(file: str):
|
||||||
|
machine.copy_from_host(source=f"{tmpdir}/{file}", target=f"/run/secrets/{file}")
|
||||||
|
machine.succeed(f"chmod 644 /run/secrets/{file}")
|
||||||
|
|
||||||
|
with subtest("Copying keys and certificates"):
|
||||||
|
machine.succeed("mkdir -p /run/secrets/{client,server}")
|
||||||
|
copy_pem("server/cert.pem")
|
||||||
|
copy_pem("server/key.pem")
|
||||||
|
copy_pem("client/cert.pem")
|
||||||
|
copy_pem("client/key.pem")
|
||||||
|
copy_pem("ca.cert.pem")
|
||||||
|
|
||||||
|
client.wait_for_unit("multi-user.target")
|
||||||
|
|
||||||
|
curl = '${pkgs.curl}/bin/curl'
|
||||||
|
accept_json = '--header "Accept: application/json"'
|
||||||
|
cacert = '--cacert /run/secrets/ca.cert.pem'
|
||||||
|
cert = '--cert /run/secrets/server/cert.pem'
|
||||||
|
key = '--key /run/secrets/server/key.pem'
|
||||||
|
base_url = 'https://client:19531'
|
||||||
|
|
||||||
|
curl_cli = f"{curl} {accept_json} {cacert} {cert} {key} --fail"
|
||||||
|
|
||||||
|
machine_info = client.succeed(f"{curl_cli} {base_url}/machine")
|
||||||
|
assert json.loads(machine_info)["hostname"] == "client", "wrong machine name"
|
||||||
|
|
||||||
|
# The HTTP request should have started the gateway service, triggered by
|
||||||
|
# the .socket unit
|
||||||
|
client.wait_for_unit("systemd-journal-gatewayd.service")
|
||||||
|
|
||||||
|
identifier = "nixos-test"
|
||||||
|
message = "Hello from NixOS test infrastructure"
|
||||||
|
|
||||||
|
client.succeed(f"systemd-cat --identifier={identifier} <<< '{message}'")
|
||||||
|
|
||||||
|
# max-time is a workaround against a bug in systemd-journal-gatewayd where
|
||||||
|
# if TLS is enabled, the connection is never closed. Since it will timeout,
|
||||||
|
# we ignore the return code.
|
||||||
|
entries = client.succeed(
|
||||||
|
f"{curl_cli} --max-time 5 {base_url}/entries?SYSLOG_IDENTIFIER={identifier} || true"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Number of entries should be only 1
|
||||||
|
added_entry = json.loads(entries)
|
||||||
|
assert added_entry["SYSLOG_IDENTIFIER"] == identifier and added_entry["MESSAGE"] == message, "journal entry does not correspond"
|
||||||
|
'';
|
||||||
|
})
|
@ -6,17 +6,11 @@ import ./make-test-python.nix ({ pkgs, ... }:
|
|||||||
maintainers = [ lewo ];
|
maintainers = [ lewo ];
|
||||||
};
|
};
|
||||||
|
|
||||||
nodes.machine = { pkgs, lib, ... }: {
|
nodes.machine = { };
|
||||||
services.journald.enableHttpGateway = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
testScript = ''
|
testScript = ''
|
||||||
machine.wait_for_unit("multi-user.target")
|
machine.wait_for_unit("multi-user.target")
|
||||||
|
|
||||||
machine.succeed("journalctl --grep=systemd")
|
machine.succeed("journalctl --grep=systemd")
|
||||||
|
|
||||||
machine.succeed(
|
|
||||||
"${pkgs.curl}/bin/curl -s localhost:19531/machine | ${pkgs.jq}/bin/jq -e '.hostname == \"machine\"'"
|
|
||||||
)
|
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user