From 8807f45da070cec9c6b5bb10da865a128cfde570 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski <2151333+piotrkwiecinski@users.noreply.github.com> Date: Fri, 4 Apr 2025 13:44:11 +0200 Subject: [PATCH] nixosTests.librenms: migrate to runTest Part of #386873 --- nixos/tests/all-tests.nix | 2 +- nixos/tests/librenms.nix | 178 +++++++++++++++++++------------------- 2 files changed, 89 insertions(+), 91 deletions(-) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 5ffcaccf17f9..8176aeaccbc3 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -691,7 +691,7 @@ in leaps = handleTest ./leaps.nix { }; lemmy = handleTest ./lemmy.nix { }; libinput = handleTest ./libinput.nix { }; - librenms = handleTest ./librenms.nix { }; + librenms = runTest ./librenms.nix; libresprite = handleTest ./libresprite.nix { }; libreswan = runTest ./libreswan.nix; libreswan-nat = runTest ./libreswan-nat.nix; diff --git a/nixos/tests/librenms.nix b/nixos/tests/librenms.nix index 05821dfa1000..d8d3e5eb92fa 100644 --- a/nixos/tests/librenms.nix +++ b/nixos/tests/librenms.nix @@ -1,106 +1,104 @@ -import ./make-test-python.nix ( - { pkgs, lib, ... }: +{ pkgs, lib, ... }: - let - api_token = "f87f42114e44b63ad1b9e3c3d33d6fbe"; # random md5 hash - wrong_api_token = "e68ba041fcf1eab923a7a6de3af5f726"; # another random md5 hash - in - { - name = "librenms"; - meta.maintainers = lib.teams.wdz.members; +let + api_token = "f87f42114e44b63ad1b9e3c3d33d6fbe"; # random md5 hash + wrong_api_token = "e68ba041fcf1eab923a7a6de3af5f726"; # another random md5 hash +in +{ + name = "librenms"; + meta.maintainers = lib.teams.wdz.members; - nodes.librenms = { - time.timeZone = "Europe/Berlin"; + nodes.librenms = { + time.timeZone = "Europe/Berlin"; - environment.systemPackages = with pkgs; [ - curl - jq - ]; + environment.systemPackages = with pkgs; [ + curl + jq + ]; - services.librenms = { - enable = true; - hostname = "librenms"; - database = { - createLocally = true; - host = "localhost"; - database = "librenms"; - username = "librenms"; - passwordFile = pkgs.writeText "librenms-db-pass" "librenmsdbpass"; - }; - nginx = { - default = true; - }; - enableOneMinutePolling = true; - settings = { - enable_billing = true; - }; + services.librenms = { + enable = true; + hostname = "librenms"; + database = { + createLocally = true; + host = "localhost"; + database = "librenms"; + username = "librenms"; + passwordFile = pkgs.writeText "librenms-db-pass" "librenmsdbpass"; }; - - # systemd oneshot to create a dummy admin user and a API token for testing - systemd.services.lnms-api-init = { - description = "LibreNMS API init"; - after = [ "librenms-setup.service" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "root"; - Group = "root"; - }; - script = '' - API_USER_NAME=api - API_TOKEN=${api_token} # random md5 hash - - # seeding database to get the admin roles - ${pkgs.librenms}/artisan db:seed --force --no-interaction - - # we don't need to know the password, it just has to exist - API_USER_PASS=$(${pkgs.pwgen}/bin/pwgen -s 64 1) - ${pkgs.librenms}/artisan user:add $API_USER_NAME -r admin -p $API_USER_PASS - API_USER_ID=$(${pkgs.mariadb}/bin/mysql -D librenms -N -B -e "SELECT user_id FROM users WHERE username = '$API_USER_NAME';") - - ${pkgs.mariadb}/bin/mysql -D librenms -e "INSERT INTO api_tokens (user_id, token_hash, description) VALUES ($API_USER_ID, '$API_TOKEN', 'API User')" - ''; + nginx = { + default = true; + }; + enableOneMinutePolling = true; + settings = { + enable_billing = true; }; }; - nodes.snmphost = { - - services.snmpd = { - enable = true; - openFirewall = true; - - configText = '' - com2sec readonly default public - - group MyROGroup v2c readonly - view all included .1 80 - access MyROGroup "" any noauth exact all none none - - syslocation Testcity, Testcountry - syscontact Testi mc Test - ''; - + # systemd oneshot to create a dummy admin user and a API token for testing + systemd.services.lnms-api-init = { + description = "LibreNMS API init"; + after = [ "librenms-setup.service" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + User = "root"; + Group = "root"; }; + script = '' + API_USER_NAME=api + API_TOKEN=${api_token} # random md5 hash + + # seeding database to get the admin roles + ${pkgs.librenms}/artisan db:seed --force --no-interaction + + # we don't need to know the password, it just has to exist + API_USER_PASS=$(${pkgs.pwgen}/bin/pwgen -s 64 1) + ${pkgs.librenms}/artisan user:add $API_USER_NAME -r admin -p $API_USER_PASS + API_USER_ID=$(${pkgs.mariadb}/bin/mysql -D librenms -N -B -e "SELECT user_id FROM users WHERE username = '$API_USER_NAME';") + + ${pkgs.mariadb}/bin/mysql -D librenms -e "INSERT INTO api_tokens (user_id, token_hash, description) VALUES ($API_USER_ID, '$API_TOKEN', 'API User')" + ''; }; + }; - testScript = '' - start_all() + nodes.snmphost = { - snmphost.wait_for_unit("snmpd.service") + services.snmpd = { + enable = true; + openFirewall = true; - librenms.wait_for_unit("lnms-api-init.service") - librenms.wait_for_open_port(80) + configText = '' + com2sec readonly default public - # Test that we can authenticate against the API - librenms.succeed("curl --fail -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0") - librenms.fail("curl --fail -H 'X-Auth-Token: ${wrong_api_token}' http://localhost/api/v0") + group MyROGroup v2c readonly + view all included .1 80 + access MyROGroup "" any noauth exact all none none - # add snmphost as a device - librenms.succeed("curl --fail -X POST -d '{\"hostname\":\"snmphost\",\"version\":\"v2c\",\"community\":\"public\"}' -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices") + syslocation Testcity, Testcountry + syscontact Testi mc Test + ''; - # wait until snmphost gets polled - librenms.wait_until_succeeds("test $(curl -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices/snmphost | jq -Mr .devices[0].last_polled) != 'null'") - ''; - } -) + }; + }; + + testScript = '' + start_all() + + snmphost.wait_for_unit("snmpd.service") + + librenms.wait_for_unit("lnms-api-init.service") + librenms.wait_for_open_port(80) + + # Test that we can authenticate against the API + librenms.succeed("curl --fail -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0") + librenms.fail("curl --fail -H 'X-Auth-Token: ${wrong_api_token}' http://localhost/api/v0") + + # add snmphost as a device + librenms.succeed("curl --fail -X POST -d '{\"hostname\":\"snmphost\",\"version\":\"v2c\",\"community\":\"public\"}' -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices") + + # wait until snmphost gets polled + librenms.wait_until_succeeds("test $(curl -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices/snmphost | jq -Mr .devices[0].last_polled) != 'null'") + ''; +}