Commit 5ea8f470 authored by KFears's avatar KFears
Browse files

nixos/grafana: write more efficient tests

parent 9f963f36
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ let
  };

  extraNodeConfs = {
    sqlite = {};

    declarativePlugins = {
      services.grafana.declarativePlugins = [ pkgs.grafanaPlugins.grafana-clock-panel ];
    };
@@ -54,12 +56,7 @@ let
    };
  };

  nodes = builtins.listToAttrs (map (dbName:
    nameValuePair dbName (mkMerge [
    baseGrafanaConf
    (extraNodeConfs.${dbName} or {})
  ])) [ "sqlite" "declarativePlugins" "postgresql" "mysql" ]);

  nodes = builtins.mapAttrs (_: val: mkMerge [ val baseGrafanaConf ]) extraNodeConfs;
in {
  name = "grafana-basic";

+1 −8
Original line number Diff line number Diff line
@@ -5,12 +5,5 @@

{
  basic = import ./basic.nix { inherit system pkgs; };
  provision-datasources = import ./provision-datasources { inherit system pkgs; };
  provision-dashboards = import ./provision-dashboards { inherit system pkgs; };
  provision-notifiers = import ./provision-notifiers.nix { inherit system pkgs; };
  provision-rules = import ./provision-rules { inherit system pkgs; };
  provision-contact-points = import ./provision-contact-points { inherit system pkgs; };
  provision-policies = import ./provision-policies { inherit system pkgs; };
  provision-templates = import ./provision-templates { inherit system pkgs; };
  provision-mute-timings = import ./provision-mute-timings { inherit system pkgs; };
  provision = import ./provision { inherit system pkgs; };
}
+0 −76
Original line number Diff line number Diff line
args@{ pkgs, ... }:

(import ../../make-test-python.nix ({ lib, pkgs, ... }:

let
  inherit (lib) mkMerge nameValuePair maintainers;

  baseGrafanaConf = {
    services.grafana = {
      enable = true;
      addr = "localhost";
      analytics.reporting.enable = false;
      domain = "localhost";
      security = {
        adminUser = "testadmin";
        adminPassword = "snakeoilpwd";
      };
      provision.enable = true;
    };
  };

  extraNodeConfs = {
    provisionContactPointsNix = {
      services.grafana.provision = {
        alerting.contactPoints.settings = {
          contactPoints = [{
            name = "Test Contact Point";
            receivers = [{
              uid = "test_contact_point";
              type = "prometheus-alertmanager";
              settings.url = "http://localhost:9000";
            }];
          }];
        };
      };
    };

    provisionContactPointsYaml = {
      services.grafana.provision.alerting.contactPoints.path = ./provision-contact-points.yaml;
    };
  };

  nodes = builtins.listToAttrs (map (provisionType:
    nameValuePair provisionType (mkMerge [
    baseGrafanaConf
    (extraNodeConfs.${provisionType} or {})
  ])) [ "provisionContactPointsNix" "provisionContactPointsYaml" ]);

in {
  name = "grafana-provision-contact-points";

  meta = with maintainers; {
    maintainers = [ kfears willibutz ];
  };

  inherit nodes;

  testScript = ''
    start_all()
    with subtest("Successful contact point provision with Nix"):
        provisionContactPointsNix.wait_for_unit("grafana.service")
        provisionContactPointsNix.wait_for_open_port(3000)
        provisionContactPointsNix.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point"
        )
        provisionContactPointsNix.shutdown()

    with subtest("Successful contact point provision with YAML"):
        provisionContactPointsYaml.wait_for_unit("grafana.service")
        provisionContactPointsYaml.wait_for_open_port(3000)
        provisionContactPointsYaml.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point"
        )
        provisionContactPointsYaml.shutdown()
  '';
})) args
+0 −92
Original line number Diff line number Diff line
args@{ pkgs, ... }:

(import ../../make-test-python.nix ({ lib, pkgs, ... }:

let
  inherit (lib) mkMerge nameValuePair maintainers;

  baseGrafanaConf = {
    services.grafana = {
      enable = true;
      addr = "localhost";
      analytics.reporting.enable = false;
      domain = "localhost";
      security = {
        adminUser = "testadmin";
        adminPassword = "snakeoilpwd";
      };
      provision.enable = true;
    };

    systemd.tmpfiles.rules = [
      "L /var/lib/grafana/dashboards/test.json 0700 grafana grafana - ${pkgs.writeText "test.json" (builtins.readFile ./test_dashboard.json)}"
    ];
  };

  extraNodeConfs = {
    provisionDashboardOld = {
      services.grafana.provision = {
        dashboards = [{ options.path = "/var/lib/grafana/dashboards"; }];
      };
    };

    provisionDashboardNix = {
      services.grafana.provision = {
        dashboards.settings = {
          apiVersion = 1;
          providers = [{
            name = "default";
            options.path = "/var/lib/grafana/dashboards";
          }];
        };
      };
    };

    provisionDashboardYaml = {
      services.grafana.provision.dashboards.path = ./provision-dashboards.yaml;
    };
  };

  nodes = builtins.listToAttrs (map (provisionType:
    nameValuePair provisionType (mkMerge [
    baseGrafanaConf
    (extraNodeConfs.${provisionType} or {})
  ])) [ "provisionDashboardOld" "provisionDashboardNix" "provisionDashboardYaml" ]);

in {
  name = "grafana-provision-dashboards";

  meta = with maintainers; {
    maintainers = [ kfears willibutz ];
  };

  inherit nodes;

  testScript = ''
    start_all()

    with subtest("Successful dashboard provision with Nix (old format)"):
        provisionDashboardOld.wait_for_unit("grafana.service")
        provisionDashboardOld.wait_for_open_port(3000)
        provisionDashboardOld.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
        )
        provisionDashboardOld.shutdown()

    with subtest("Successful dashboard provision with Nix (new format)"):
        provisionDashboardNix.wait_for_unit("grafana.service")
        provisionDashboardNix.wait_for_open_port(3000)
        provisionDashboardNix.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
        )
        provisionDashboardNix.shutdown()

    with subtest("Successful dashboard provision with YAML"):
        provisionDashboardYaml.wait_for_unit("grafana.service")
        provisionDashboardYaml.wait_for_open_port(3000)
        provisionDashboardYaml.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
        )
        provisionDashboardYaml.shutdown()
  '';
})) args
+0 −95
Original line number Diff line number Diff line
args@{ pkgs, ... }:

(import ../../make-test-python.nix ({ lib, pkgs, ... }:

let
  inherit (lib) mkMerge nameValuePair maintainers;

  baseGrafanaConf = {
    services.grafana = {
      enable = true;
      addr = "localhost";
      analytics.reporting.enable = false;
      domain = "localhost";
      security = {
        adminUser = "testadmin";
        adminPassword = "snakeoilpwd";
      };
      provision.enable = true;
    };
  };

  extraNodeConfs = {
    provisionDatasourceOld = {
      services.grafana.provision = {
        datasources = [{
          name = "Test Datasource";
          type = "testdata";
          access = "proxy";
          uid = "test_datasource";
        }];
      };
    };

    provisionDatasourceNix = {
      services.grafana.provision = {
        datasources.settings = {
          apiVersion = 1;
          datasources = [{
            name = "Test Datasource";
            type = "testdata";
            access = "proxy";
            uid = "test_datasource";
          }];
        };
      };
    };

    provisionDatasourceYaml = {
      services.grafana.provision.datasources.path = ./provision-datasources.yaml;
    };
  };

  nodes = builtins.listToAttrs (map (provisionType:
    nameValuePair provisionType (mkMerge [
    baseGrafanaConf
    (extraNodeConfs.${provisionType} or {})
  ])) [ "provisionDatasourceOld" "provisionDatasourceNix" "provisionDatasourceYaml" ]);

in {
  name = "grafana-provision-datasources";

  meta = with maintainers; {
    maintainers = [ kfears willibutz ];
  };

  inherit nodes;

  testScript = ''
    start_all()

    with subtest("Successful datasource provision with Nix (old format)"):
        provisionDatasourceOld.wait_for_unit("grafana.service")
        provisionDatasourceOld.wait_for_open_port(3000)
        provisionDatasourceOld.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
        )
        provisionDatasourceOld.shutdown()

    with subtest("Successful datasource provision with Nix (new format)"):
        provisionDatasourceNix.wait_for_unit("grafana.service")
        provisionDatasourceNix.wait_for_open_port(3000)
        provisionDatasourceNix.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
        )
        provisionDatasourceNix.shutdown()

    with subtest("Successful datasource provision with YAML"):
        provisionDatasourceYaml.wait_for_unit("grafana.service")
        provisionDatasourceYaml.wait_for_open_port(3000)
        provisionDatasourceYaml.succeed(
            "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
        )
        provisionDatasourceYaml.shutdown()
  '';
})) args
Loading