nixosTests.victoriametrics: handleTest -> runTest (#423692)

authored by Wolfgang Walther and committed by GitHub 6477abe2 c42b6a4d

+267 -322
+1 -1
nixos/tests/all-tests.nix
··· 1511 1511 velocity = runTest ./velocity.nix; 1512 1512 vengi-tools = runTest ./vengi-tools.nix; 1513 1513 victorialogs = runTest ./victorialogs.nix; 1514 - victoriametrics = handleTest ./victoriametrics { }; 1514 + victoriametrics = import ./victoriametrics { inherit runTest; }; 1515 1515 vikunja = runTest ./vikunja.nix; 1516 1516 virtualbox = handleTestOn [ "x86_64-linux" ] ./virtualbox.nix { }; 1517 1517 vm-variant = handleTest ./vm-variant.nix { };
+4 -9
nixos/tests/victoriametrics/default.nix
··· 1 + { runTest }: 1 2 { 2 - system ? builtins.currentSystem, 3 - config ? { }, 4 - pkgs ? import ../../.. { inherit system config; }, 5 - }: 6 - 7 - { 8 - remote-write = import ./remote-write.nix { inherit system pkgs; }; 9 - vmalert = import ./vmalert.nix { inherit system pkgs; }; 10 - external-promscrape-config = import ./external-promscrape-config.nix { inherit system pkgs; }; 3 + remote-write = runTest ./remote-write.nix; 4 + vmalert = runTest ./vmalert.nix; 5 + external-promscrape-config = runTest ./external-promscrape-config.nix; 11 6 }
+60 -72
nixos/tests/victoriametrics/external-promscrape-config.nix
··· 1 - import ../make-test-python.nix ( 2 - { 3 - lib, 4 - pkgs, 5 - ... 6 - }: 7 - let 8 - nodeExporterPort = 9100; 9 - promscrapeConfig = { 10 - global = { 11 - scrape_interval = "2s"; 12 - }; 13 - scrape_configs = [ 14 - { 15 - job_name = "node"; 16 - static_configs = [ 17 - { 18 - targets = [ 19 - "node:${toString nodeExporterPort}" 20 - ]; 21 - } 22 - ]; 23 - } 24 - ]; 25 - }; 26 - settingsFormat = pkgs.formats.yaml { }; 27 - promscrapeConfigYaml = settingsFormat.generate "prometheusConfig.yaml" promscrapeConfig; 28 - in 29 - { 30 - name = "victoriametrics-external-promscrape-config"; 31 - meta = with pkgs.lib.maintainers; { 32 - maintainers = [ 33 - ryan4yin 34 - ]; 1 + { lib, pkgs, ... }: 2 + let 3 + nodeExporterPort = 9100; 4 + promscrapeConfig = { 5 + global = { 6 + scrape_interval = "2s"; 35 7 }; 36 - 37 - nodes = { 38 - victoriametrics = 39 - { 40 - config, 41 - pkgs, 42 - ... 43 - }: 44 - { 45 - environment.systemPackages = [ pkgs.jq ]; 46 - networking.firewall.allowedTCPPorts = [ 8428 ]; 47 - services.victoriametrics = { 48 - enable = true; 49 - extraOptions = [ 50 - "-promscrape.config=${toString promscrapeConfigYaml}" 8 + scrape_configs = [ 9 + { 10 + job_name = "node"; 11 + static_configs = [ 12 + { 13 + targets = [ 14 + "node:${toString nodeExporterPort}" 51 15 ]; 52 - }; 53 - }; 16 + } 17 + ]; 18 + } 19 + ]; 20 + }; 21 + settingsFormat = pkgs.formats.yaml { }; 22 + promscrapeConfigYaml = settingsFormat.generate "prometheusConfig.yaml" promscrapeConfig; 23 + in 24 + { 25 + name = "victoriametrics-external-promscrape-config"; 26 + meta = with lib.maintainers; { 27 + maintainers = [ 28 + ryan4yin 29 + ]; 30 + }; 54 31 55 - node = 56 - { ... }: 57 - { 58 - services.prometheus.exporters.node = { 59 - enable = true; 60 - openFirewall = true; 61 - }; 32 + nodes = { 33 + victoriametrics = 34 + { pkgs, ... }: 35 + { 36 + environment.systemPackages = [ pkgs.jq ]; 37 + networking.firewall.allowedTCPPorts = [ 8428 ]; 38 + services.victoriametrics = { 39 + enable = true; 40 + extraOptions = [ 41 + "-promscrape.config=${toString promscrapeConfigYaml}" 42 + ]; 62 43 }; 44 + }; 45 + 46 + node = { 47 + services.prometheus.exporters.node = { 48 + enable = true; 49 + openFirewall = true; 50 + }; 63 51 }; 52 + }; 64 53 65 - testScript = '' 66 - node.wait_for_unit("prometheus-node-exporter") 67 - node.wait_for_open_port(${toString nodeExporterPort}) 54 + testScript = '' 55 + node.wait_for_unit("prometheus-node-exporter") 56 + node.wait_for_open_port(${toString nodeExporterPort}) 68 57 69 - victoriametrics.wait_for_unit("victoriametrics") 70 - victoriametrics.wait_for_open_port(8428) 58 + victoriametrics.wait_for_unit("victoriametrics") 59 + victoriametrics.wait_for_open_port(8428) 71 60 72 61 73 - promscrape_config = victoriametrics.succeed("journalctl -u victoriametrics -o cat | grep 'promscrape.config'") 74 - assert '${toString promscrapeConfigYaml}' in promscrape_config 62 + promscrape_config = victoriametrics.succeed("journalctl -u victoriametrics -o cat | grep 'promscrape.config'") 63 + assert '${toString promscrapeConfigYaml}' in promscrape_config 75 64 76 - victoriametrics.wait_until_succeeds( 77 - "curl -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " 78 - + "jq '.data.result[0].value[1]' | grep '\"1\"'" 79 - ) 80 - ''; 81 - } 82 - ) 65 + victoriametrics.wait_until_succeeds( 66 + "curl -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " 67 + + "jq '.data.result[0].value[1]' | grep '\"1\"'" 68 + ) 69 + ''; 70 + }
+73 -89
nixos/tests/victoriametrics/remote-write.nix
··· 1 1 # Primarily reference the implementation of <nixos/tests/prometheus/remote-write.nix> 2 - import ../make-test-python.nix ( 3 - { 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - username = "vmtest"; 10 - password = "fsddfy8233rb"; # random string 11 - passwordFile = pkgs.writeText "password-file" password; 12 - in 13 - { 14 - name = "victoriametrics-remote-write"; 15 - meta = with pkgs.lib.maintainers; { 16 - maintainers = [ 17 - yorickvp 18 - ryan4yin 19 - ]; 20 - }; 2 + { lib, pkgs, ... }: 3 + let 4 + username = "vmtest"; 5 + password = "fsddfy8233rb"; # random string 6 + passwordFile = pkgs.writeText "password-file" password; 7 + in 8 + { 9 + name = "victoriametrics-remote-write"; 10 + meta = with lib.maintainers; { 11 + maintainers = [ 12 + yorickvp 13 + ryan4yin 14 + ]; 15 + }; 21 16 22 - nodes = { 23 - victoriametrics = 24 - { 25 - config, 26 - pkgs, 27 - ... 28 - }: 29 - { 30 - environment.systemPackages = [ pkgs.jq ]; 31 - networking.firewall.allowedTCPPorts = [ 8428 ]; 32 - services.victoriametrics = { 33 - enable = true; 34 - extraOptions = [ 35 - "-httpAuth.username=${username}" 36 - "-httpAuth.password=file://${toString passwordFile}" 37 - ]; 38 - }; 17 + nodes = { 18 + victoriametrics = 19 + { pkgs, ... }: 20 + { 21 + environment.systemPackages = [ pkgs.jq ]; 22 + networking.firewall.allowedTCPPorts = [ 8428 ]; 23 + services.victoriametrics = { 24 + enable = true; 25 + extraOptions = [ 26 + "-httpAuth.username=${username}" 27 + "-httpAuth.password=file://${toString passwordFile}" 28 + ]; 39 29 }; 30 + }; 40 31 41 - vmagent = 42 - { 43 - config, 44 - pkgs, 45 - ... 46 - }: 47 - { 48 - environment.systemPackages = [ pkgs.jq ]; 49 - services.vmagent = { 50 - enable = true; 51 - remoteWrite = { 52 - url = "http://victoriametrics:8428/api/v1/write"; 53 - basicAuthUsername = username; 54 - basicAuthPasswordFile = toString passwordFile; 55 - }; 32 + vmagent = 33 + { config, pkgs, ... }: 34 + { 35 + environment.systemPackages = [ pkgs.jq ]; 36 + services.vmagent = { 37 + enable = true; 38 + remoteWrite = { 39 + url = "http://victoriametrics:8428/api/v1/write"; 40 + basicAuthUsername = username; 41 + basicAuthPasswordFile = toString passwordFile; 42 + }; 56 43 57 - prometheusConfig = { 58 - global = { 59 - scrape_interval = "2s"; 60 - }; 61 - scrape_configs = [ 62 - { 63 - job_name = "node"; 64 - static_configs = [ 65 - { 66 - targets = [ 67 - "node:${toString config.services.prometheus.exporters.node.port}" 68 - ]; 69 - } 70 - ]; 71 - } 72 - ]; 44 + prometheusConfig = { 45 + global = { 46 + scrape_interval = "2s"; 73 47 }; 48 + scrape_configs = [ 49 + { 50 + job_name = "node"; 51 + static_configs = [ 52 + { 53 + targets = [ 54 + "node:${toString config.services.prometheus.exporters.node.port}" 55 + ]; 56 + } 57 + ]; 58 + } 59 + ]; 74 60 }; 75 61 }; 62 + }; 76 63 77 - node = 78 - { ... }: 79 - { 80 - services.prometheus.exporters.node = { 81 - enable = true; 82 - openFirewall = true; 83 - }; 84 - }; 64 + node = { 65 + services.prometheus.exporters.node = { 66 + enable = true; 67 + openFirewall = true; 68 + }; 85 69 }; 70 + }; 86 71 87 - testScript = '' 88 - node.wait_for_unit("prometheus-node-exporter") 89 - node.wait_for_open_port(9100) 72 + testScript = '' 73 + node.wait_for_unit("prometheus-node-exporter") 74 + node.wait_for_open_port(9100) 90 75 91 - victoriametrics.wait_for_unit("victoriametrics") 92 - victoriametrics.wait_for_open_port(8428) 76 + victoriametrics.wait_for_unit("victoriametrics") 77 + victoriametrics.wait_for_open_port(8428) 93 78 94 - vmagent.wait_for_unit("vmagent") 79 + vmagent.wait_for_unit("vmagent") 95 80 96 - # check remote write 97 - victoriametrics.wait_until_succeeds( 98 - "curl --user '${username}:${password}' -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " 99 - + "jq '.data.result[0].value[1]' | grep '\"1\"'" 100 - ) 101 - ''; 102 - } 103 - ) 81 + # check remote write 82 + victoriametrics.wait_until_succeeds( 83 + "curl --user '${username}:${password}' -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " 84 + + "jq '.data.result[0].value[1]' | grep '\"1\"'" 85 + ) 86 + ''; 87 + }
+129 -151
nixos/tests/victoriametrics/vmalert.nix
··· 1 1 # Primarily reference the implementation of <nixos/tests/prometheus/alertmanager.nix> 2 - import ../make-test-python.nix ( 3 - { 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - { 9 - name = "victoriametrics-vmalert"; 10 - meta = with pkgs.lib.maintainers; { 11 - maintainers = [ 12 - yorickvp 13 - ryan4yin 14 - ]; 15 - }; 2 + { lib, pkgs, ... }: 3 + { 4 + name = "victoriametrics-vmalert"; 5 + meta = with lib.maintainers; { 6 + maintainers = [ 7 + yorickvp 8 + ryan4yin 9 + ]; 10 + }; 16 11 17 - nodes = { 18 - victoriametrics = 19 - { 20 - config, 21 - pkgs, 22 - ... 23 - }: 24 - { 25 - environment.systemPackages = [ pkgs.jq ]; 26 - networking.firewall.allowedTCPPorts = [ 8428 ]; 27 - services.victoriametrics = { 28 - enable = true; 29 - prometheusConfig = { 30 - global = { 31 - scrape_interval = "2s"; 32 - }; 33 - scrape_configs = [ 34 - { 35 - job_name = "alertmanager"; 36 - static_configs = [ 37 - { 38 - targets = [ 39 - "alertmanager:${toString config.services.prometheus.alertmanager.port}" 40 - ]; 41 - } 42 - ]; 43 - } 44 - { 45 - job_name = "node"; 46 - static_configs = [ 47 - { 48 - targets = [ 49 - "node:${toString config.services.prometheus.exporters.node.port}" 50 - ]; 51 - } 52 - ]; 53 - } 54 - ]; 12 + nodes = { 13 + victoriametrics = 14 + { config, pkgs, ... }: 15 + { 16 + environment.systemPackages = [ pkgs.jq ]; 17 + networking.firewall.allowedTCPPorts = [ 8428 ]; 18 + services.victoriametrics = { 19 + enable = true; 20 + prometheusConfig = { 21 + global = { 22 + scrape_interval = "2s"; 55 23 }; 24 + scrape_configs = [ 25 + { 26 + job_name = "alertmanager"; 27 + static_configs = [ 28 + { 29 + targets = [ 30 + "alertmanager:${toString config.services.prometheus.alertmanager.port}" 31 + ]; 32 + } 33 + ]; 34 + } 35 + { 36 + job_name = "node"; 37 + static_configs = [ 38 + { 39 + targets = [ 40 + "node:${toString config.services.prometheus.exporters.node.port}" 41 + ]; 42 + } 43 + ]; 44 + } 45 + ]; 56 46 }; 47 + }; 57 48 58 - services.vmalert.instances."" = { 59 - enable = true; 60 - settings = { 61 - "datasource.url" = "http://localhost:8428"; # victoriametrics' api 62 - "notifier.url" = [ 63 - "http://alertmanager:${toString config.services.prometheus.alertmanager.port}" 64 - ]; # alertmanager's api 65 - rule = [ 66 - (pkgs.writeText "instance-down.yml" '' 67 - groups: 68 - - name: test 69 - rules: 70 - - alert: InstanceDown 71 - expr: up == 0 72 - for: 5s 73 - labels: 74 - severity: page 75 - annotations: 76 - summary: "Instance {{ $labels.instance }} down" 77 - '') 78 - ]; 79 - }; 49 + services.vmalert.instances."" = { 50 + enable = true; 51 + settings = { 52 + "datasource.url" = "http://localhost:8428"; # victoriametrics' api 53 + "notifier.url" = [ 54 + "http://alertmanager:${toString config.services.prometheus.alertmanager.port}" 55 + ]; # alertmanager's api 56 + rule = [ 57 + (pkgs.writeText "instance-down.yml" '' 58 + groups: 59 + - name: test 60 + rules: 61 + - alert: InstanceDown 62 + expr: up == 0 63 + for: 5s 64 + labels: 65 + severity: page 66 + annotations: 67 + summary: "Instance {{ $labels.instance }} down" 68 + '') 69 + ]; 80 70 }; 81 71 }; 72 + }; 82 73 83 - alertmanager = 84 - { 85 - config, 86 - pkgs, 87 - ... 88 - }: 89 - { 90 - services.prometheus.alertmanager = { 91 - enable = true; 92 - openFirewall = true; 74 + alertmanager = { 75 + services.prometheus.alertmanager = { 76 + enable = true; 77 + openFirewall = true; 93 78 94 - configuration = { 95 - global = { 96 - resolve_timeout = "1m"; 97 - }; 79 + configuration = { 80 + global = { 81 + resolve_timeout = "1m"; 82 + }; 98 83 99 - route = { 100 - # Root route node 101 - receiver = "test"; 102 - group_by = [ "..." ]; 103 - continue = false; 104 - group_wait = "1s"; 105 - group_interval = "15s"; 106 - repeat_interval = "24h"; 107 - }; 84 + route = { 85 + # Root route node 86 + receiver = "test"; 87 + group_by = [ "..." ]; 88 + continue = false; 89 + group_wait = "1s"; 90 + group_interval = "15s"; 91 + repeat_interval = "24h"; 92 + }; 108 93 109 - receivers = [ 94 + receivers = [ 95 + { 96 + name = "test"; 97 + webhook_configs = [ 110 98 { 111 - name = "test"; 112 - webhook_configs = [ 113 - { 114 - url = "http://logger:6725"; 115 - send_resolved = true; 116 - max_alerts = 0; 117 - } 118 - ]; 99 + url = "http://logger:6725"; 100 + send_resolved = true; 101 + max_alerts = 0; 119 102 } 120 103 ]; 121 - }; 122 - }; 104 + } 105 + ]; 123 106 }; 107 + }; 108 + }; 124 109 125 - logger = 126 - { 127 - config, 128 - pkgs, 129 - ... 130 - }: 131 - { 132 - networking.firewall.allowedTCPPorts = [ 6725 ]; 110 + logger = { 111 + networking.firewall.allowedTCPPorts = [ 6725 ]; 133 112 134 - services.prometheus.alertmanagerWebhookLogger.enable = true; 135 - }; 113 + services.prometheus.alertmanagerWebhookLogger.enable = true; 136 114 }; 115 + }; 137 116 138 - testScript = '' 139 - alertmanager.wait_for_unit("alertmanager") 140 - alertmanager.wait_for_open_port(9093) 141 - alertmanager.wait_until_succeeds("curl -s http://127.0.0.1:9093/-/ready") 117 + testScript = '' 118 + alertmanager.wait_for_unit("alertmanager") 119 + alertmanager.wait_for_open_port(9093) 120 + alertmanager.wait_until_succeeds("curl -s http://127.0.0.1:9093/-/ready") 142 121 143 - logger.wait_for_unit("alertmanager-webhook-logger") 144 - logger.wait_for_open_port(6725) 122 + logger.wait_for_unit("alertmanager-webhook-logger") 123 + logger.wait_for_open_port(6725) 145 124 146 - victoriametrics.wait_for_unit("victoriametrics") 147 - victoriametrics.wait_for_unit("vmalert") 148 - victoriametrics.wait_for_open_port(8428) 125 + victoriametrics.wait_for_unit("victoriametrics") 126 + victoriametrics.wait_for_unit("vmalert") 127 + victoriametrics.wait_for_open_port(8428) 149 128 150 - victoriametrics.wait_until_succeeds( 151 - "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"alertmanager\"\}==1)' | " 152 - + "jq '.data.result[0].value[1]' | grep '\"1\"'" 153 - ) 129 + victoriametrics.wait_until_succeeds( 130 + "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"alertmanager\"\}==1)' | " 131 + + "jq '.data.result[0].value[1]' | grep '\"1\"'" 132 + ) 154 133 155 - victoriametrics.wait_until_succeeds( 156 - "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=sum(alertmanager_build_info)%20by%20(version)' | " 157 - + "jq '.data.result[0].metric.version' | grep '\"${pkgs.prometheus-alertmanager.version}\"'" 158 - ) 134 + victoriametrics.wait_until_succeeds( 135 + "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=sum(alertmanager_build_info)%20by%20(version)' | " 136 + + "jq '.data.result[0].metric.version' | grep '\"${pkgs.prometheus-alertmanager.version}\"'" 137 + ) 159 138 160 - victoriametrics.wait_until_succeeds( 161 - "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"node\"\}!=1)' | " 162 - + "jq '.data.result[0].value[1]' | grep '\"1\"'" 163 - ) 139 + victoriametrics.wait_until_succeeds( 140 + "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"node\"\}!=1)' | " 141 + + "jq '.data.result[0].value[1]' | grep '\"1\"'" 142 + ) 164 143 165 - victoriametrics.wait_until_succeeds( 166 - "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=alertmanager_notifications_total\{integration=\"webhook\"\}' | " 167 - + "jq '.data.result[0].value[1]' | grep -v '\"0\"'" 168 - ) 144 + victoriametrics.wait_until_succeeds( 145 + "curl -sf 'http://127.0.0.1:8428/api/v1/query?query=alertmanager_notifications_total\{integration=\"webhook\"\}' | " 146 + + "jq '.data.result[0].value[1]' | grep -v '\"0\"'" 147 + ) 169 148 170 - logger.wait_until_succeeds( 171 - "journalctl -o cat -u alertmanager-webhook-logger.service | grep '\"alertname\":\"InstanceDown\"'" 172 - ) 149 + logger.wait_until_succeeds( 150 + "journalctl -o cat -u alertmanager-webhook-logger.service | grep '\"alertname\":\"InstanceDown\"'" 151 + ) 173 152 174 - logger.log(logger.succeed("systemd-analyze security alertmanager-webhook-logger.service | grep -v '✓'")) 153 + logger.log(logger.succeed("systemd-analyze security alertmanager-webhook-logger.service | grep -v '✓'")) 175 154 176 - alertmanager.log(alertmanager.succeed("systemd-analyze security alertmanager.service | grep -v '✓'")) 177 - ''; 178 - } 179 - ) 155 + alertmanager.log(alertmanager.succeed("systemd-analyze security alertmanager.service | grep -v '✓'")) 156 + ''; 157 + }