summaryrefslogtreecommitdiffstats
path: root/nixos/tests/elk.nix
diff options
context:
space:
mode:
authorJacek Galowicz <jacek.galowicz@cyberus-technology.de>2020-01-08 10:02:26 +0100
committerJacek Galowicz <jacek.galowicz@cyberus-technology.de>2020-01-08 10:51:57 +0100
commit8ecd07f9e3b0ad23a4f8430945e4cb9db4dfa485 (patch)
treea92abba976f2eecd8a3e69095b85ff53fbf782c5 /nixos/tests/elk.nix
parentc44331dd5d5d54db20b941bb8c04dcf8f143648b (diff)
nixosTests.elk: port to python
Diffstat (limited to 'nixos/tests/elk.nix')
-rw-r--r--nixos/tests/elk.nix107
1 files changed, 56 insertions, 51 deletions
diff --git a/nixos/tests/elk.nix b/nixos/tests/elk.nix
index b33d98b85d69..80db0967d400 100644
--- a/nixos/tests/elk.nix
+++ b/nixos/tests/elk.nix
@@ -6,20 +6,12 @@
# NIXPKGS_ALLOW_UNFREE=1 nix-build nixos/tests/elk.nix -A ELK-6 --arg enableUnfree true
}:
-with import ../lib/testing.nix { inherit system pkgs; };
-with pkgs.lib;
-
let
esUrl = "http://localhost:9200";
- totalHits = message :
- "curl --silent --show-error '${esUrl}/_search' -H 'Content-Type: application/json' " +
- ''-d '{\"query\" : { \"match\" : { \"message\" : \"${message}\"}}}' '' +
- "| jq .hits.total";
-
mkElkTest = name : elk :
let elasticsearchGe7 = builtins.compareVersions elk.elasticsearch.version "7" >= 0;
- in makeTest {
+ in import ./make-test-python.nix ({
inherit name;
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ eelco offline basvandijk ];
@@ -50,15 +42,15 @@ let
elk.journalbeat.version "6" < 0; in {
enable = true;
package = elk.journalbeat;
- extraConfig = mkOptionDefault (''
+ extraConfig = pkgs.lib.mkOptionDefault (''
logging:
to_syslog: true
level: warning
metrics.enabled: false
output.elasticsearch:
hosts: [ "127.0.0.1:9200" ]
- ${optionalString lt6 "template.enabled: false"}
- '' + optionalString (!lt6) ''
+ ${pkgs.lib.optionalString lt6 "template.enabled: false"}
+ '' + pkgs.lib.optionalString (!lt6) ''
journalbeat.inputs:
- paths: []
seek: cursor
@@ -130,11 +122,23 @@ let
};
testScript = ''
- startAll;
+ import json
+
+
+ def total_hits(message):
+ dictionary = {"query": {"match": {"message": message}}}
+ return (
+ "curl --silent --show-error '${esUrl}/_search' "
+ + "-H 'Content-Type: application/json' "
+ + "-d '{}' ".format(json.dumps(dictionary))
+ + "| jq .hits.total"
+ )
+
+
+ start_all()
- # Wait until elasticsearch is listening for connections.
- $one->waitForUnit("elasticsearch.service");
- $one->waitForOpenPort(9200);
+ one.wait_for_unit("elasticsearch.service")
+ one.wait_for_open_port(9200)
# Continue as long as the status is not "red". The status is probably
# "yellow" instead of "green" because we are using a single elasticsearch
@@ -142,42 +146,43 @@ let
#
# TODO: extend this test with multiple elasticsearch nodes
# and see if the status turns "green".
- $one->waitUntilSucceeds(
- "curl --silent --show-error '${esUrl}/_cluster/health' " .
- "| jq .status | grep -v red");
-
- # Perform some simple logstash tests.
- $one->waitForUnit("logstash.service");
- $one->waitUntilSucceeds("cat /tmp/logstash.out | grep flowers");
- $one->waitUntilSucceeds("cat /tmp/logstash.out | grep -v dragons");
-
- # See if kibana is healthy.
- $one->waitForUnit("kibana.service");
- $one->waitUntilSucceeds(
- "curl --silent --show-error 'http://localhost:5601/api/status' " .
- "| jq .status.overall.state | grep green");
-
- # See if logstash messages arive in elasticsearch.
- $one->waitUntilSucceeds("${totalHits "flowers"} | grep -v 0");
- $one->waitUntilSucceeds("${totalHits "dragons"} | grep 0");
-
- # Test if a message logged to the journal
- # is ingested by elasticsearch via journalbeat.
- $one->waitForUnit("journalbeat.service");
- $one->execute("echo 'Supercalifragilisticexpialidocious' | systemd-cat");
- $one->waitUntilSucceeds(
- "${totalHits "Supercalifragilisticexpialidocious"} | grep -v 0");
-
- '' + optionalString (!elasticsearchGe7) ''
- # Test elasticsearch-curator.
- $one->systemctl("stop logstash");
- $one->systemctl("start elasticsearch-curator");
- $one->waitUntilSucceeds(
- "! curl --silent --show-error '${esUrl}/_cat/indices' " .
- "| grep logstash | grep -q ^$1");
+ one.wait_until_succeeds(
+ "curl --silent --show-error '${esUrl}/_cluster/health' | jq .status | grep -v red"
+ )
+
+ with subtest("Perform some simple logstash tests"):
+ one.wait_for_unit("logstash.service")
+ one.wait_until_succeeds("cat /tmp/logstash.out | grep flowers")
+ one.wait_until_succeeds("cat /tmp/logstash.out | grep -v dragons")
+
+ with subtest("Kibana is healthy"):
+ one.wait_for_unit("kibana.service")
+ one.wait_until_succeeds(
+ "curl --silent --show-error 'http://localhost:5601/api/status' | jq .status.overall.state | grep green"
+ )
+
+ with subtest("Logstash messages arive in elasticsearch"):
+ one.wait_until_succeeds(total_hits("flowers") + " | grep -v 0")
+ one.wait_until_succeeds(total_hits("dragons") + " | grep 0")
+
+ with subtest(
+ "A message logged to the journal is ingested by elasticsearch via journalbeat"
+ ):
+ one.wait_for_unit("journalbeat.service")
+ one.execute("echo 'Supercalifragilisticexpialidocious' | systemd-cat")
+ one.wait_until_succeeds(
+ total_hits("Supercalifragilisticexpialidocious") + " | grep -v 0"
+ )
+ '' + pkgs.lib.optionalString (!elasticsearchGe7) ''
+ with subtest("Elasticsearch-curator works"):
+ one.systemctl("stop logstash")
+ one.systemctl("start elasticsearch-curator")
+ one.wait_until_succeeds(
+ '! curl --silent --show-error "${esUrl}/_cat/indices" | grep logstash | grep -q ^'
+ )
'';
- };
-in mapAttrs mkElkTest {
+ }) {};
+in pkgs.lib.mapAttrs mkElkTest {
ELK-6 =
if enableUnfree
then {