summary refs log tree commit diff
diff options
context:
space:
mode:
authorajs124 <git@ajs124.de>2021-12-08 15:47:42 +0000
committerajs124 <git@ajs124.de>2022-01-22 02:27:05 +0100
commita2ec554e83acf57441060f3765efbcd25afec6c6 (patch)
tree90a450957210893e90e238d286809d7c9aedb913
parent65dfe147b762c59eebe823acc44a1b7c8da00b1d (diff)
downloadnixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.tar
nixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.tar.gz
nixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.tar.bz2
nixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.tar.lz
nixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.tar.xz
nixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.tar.zst
nixpkgs-a2ec554e83acf57441060f3765efbcd25afec6c6.zip
nixos/tests/mysql-replication: test multiple mariadb versions
-rw-r--r--nixos/tests/mysql/mysql-replication.nix158
1 files changed, 84 insertions, 74 deletions
diff --git a/nixos/tests/mysql/mysql-replication.nix b/nixos/tests/mysql/mysql-replication.nix
index a52372ca47c..f6014019bd5 100644
--- a/nixos/tests/mysql/mysql-replication.nix
+++ b/nixos/tests/mysql/mysql-replication.nix
@@ -1,91 +1,101 @@
-import ./../make-test-python.nix ({ pkgs, ...} :
+{
+  system ? builtins.currentSystem,
+  config ? {},
+  pkgs ? import ../../.. { inherit system config; },
+  lib ? pkgs.lib
+}:
 
 let
+  inherit (import ./common.nix { inherit pkgs lib; }) mkTestName mariadbPackages;
+
   replicateUser = "replicate";
   replicatePassword = "secret";
-in
 
-{
-  name = "mysql-replication";
-  meta = with pkgs.lib.maintainers; {
-    maintainers = [ eelco shlevy ];
-  };
+  makeTest = import ./../make-test-python.nix;
 
-  nodes = {
-    master =
-      { pkgs, ... }:
+  makeReplicationTest = {
+    package,
+    name ? mkTestName package,
+  }: makeTest {
+    name = "${name}-replication";
+    meta = with pkgs.lib.maintainers; {
+      maintainers = [ ajs124 das_j ];
+    };
 
-      {
-        services.mysql.enable = true;
-        services.mysql.package = pkgs.mariadb;
-        services.mysql.replication.role = "master";
-        services.mysql.replication.slaveHost = "%";
-        services.mysql.replication.masterUser = replicateUser;
-        services.mysql.replication.masterPassword = replicatePassword;
-        services.mysql.initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ];
+    nodes = {
+      primary = {
+        services.mysql = {
+          inherit package;
+          enable = true;
+          replication.role = "master";
+          replication.slaveHost = "%";
+          replication.masterUser = replicateUser;
+          replication.masterPassword = replicatePassword;
+          initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ];
+        };
         networking.firewall.allowedTCPPorts = [ 3306 ];
       };
 
-    slave1 =
-      { pkgs, nodes, ... }:
-
-      {
-        services.mysql.enable = true;
-        services.mysql.package = pkgs.mariadb;
-        services.mysql.replication.role = "slave";
-        services.mysql.replication.serverId = 2;
-        services.mysql.replication.masterHost = nodes.master.config.networking.hostName;
-        services.mysql.replication.masterUser = replicateUser;
-        services.mysql.replication.masterPassword = replicatePassword;
+      secondary1 = { nodes, ... }: {
+        services.mysql = {
+          inherit package;
+          enable = true;
+          replication.role = "slave";
+          replication.serverId = 2;
+          replication.masterHost = nodes.primary.config.networking.hostName;
+          replication.masterUser = replicateUser;
+          replication.masterPassword = replicatePassword;
+        };
       };
 
-    slave2 =
-      { pkgs, nodes, ... }:
-
-      {
-        services.mysql.enable = true;
-        services.mysql.package = pkgs.mariadb;
-        services.mysql.replication.role = "slave";
-        services.mysql.replication.serverId = 3;
-        services.mysql.replication.masterHost = nodes.master.config.networking.hostName;
-        services.mysql.replication.masterUser = replicateUser;
-        services.mysql.replication.masterPassword = replicatePassword;
+      secondary2 = { nodes, ... }: {
+        services.mysql = {
+          inherit package;
+          enable = true;
+          replication.role = "slave";
+          replication.serverId = 3;
+          replication.masterHost = nodes.primary.config.networking.hostName;
+          replication.masterUser = replicateUser;
+          replication.masterPassword = replicatePassword;
+        };
       };
-  };
+    };
 
-  testScript = ''
-    master.start()
-    master.wait_for_unit("mysql")
-    master.wait_for_open_port(3306)
-    # Wait for testdb to be fully populated (5 rows).
-    master.wait_until_succeeds(
-        "sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
-    )
+    testScript = ''
+      primary.start()
+      primary.wait_for_unit("mysql")
+      primary.wait_for_open_port(3306)
+      # Wait for testdb to be fully populated (5 rows).
+      primary.wait_until_succeeds(
+          "sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
+      )
 
-    slave1.start()
-    slave2.start()
-    slave1.wait_for_unit("mysql")
-    slave1.wait_for_open_port(3306)
-    slave2.wait_for_unit("mysql")
-    slave2.wait_for_open_port(3306)
+      secondary1.start()
+      secondary2.start()
+      secondary1.wait_for_unit("mysql")
+      secondary1.wait_for_open_port(3306)
+      secondary2.wait_for_unit("mysql")
+      secondary2.wait_for_open_port(3306)
 
-    # wait for replications to finish
-    slave1.wait_until_succeeds(
-        "sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
-    )
-    slave2.wait_until_succeeds(
-        "sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
-    )
+      # wait for replications to finish
+      secondary1.wait_until_succeeds(
+          "sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
+      )
+      secondary2.wait_until_succeeds(
+          "sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
+      )
 
-    slave2.succeed("systemctl stop mysql")
-    master.succeed(
-        "echo 'insert into testdb.tests values (123, 456);' | sudo -u mysql mysql -u mysql -N"
-    )
-    slave2.succeed("systemctl start mysql")
-    slave2.wait_for_unit("mysql")
-    slave2.wait_for_open_port(3306)
-    slave2.wait_until_succeeds(
-        "echo 'select * from testdb.tests where Id = 123;' | sudo -u mysql mysql -u mysql -N | grep 456"
-    )
-  '';
-})
+      secondary2.succeed("systemctl stop mysql")
+      primary.succeed(
+          "echo 'insert into testdb.tests values (123, 456);' | sudo -u mysql mysql -u mysql -N"
+      )
+      secondary2.succeed("systemctl start mysql")
+      secondary2.wait_for_unit("mysql")
+      secondary2.wait_for_open_port(3306)
+      secondary2.wait_until_succeeds(
+          "echo 'select * from testdb.tests where Id = 123;' | sudo -u mysql mysql -u mysql -N | grep 456"
+      )
+    '';
+  };
+in
+  lib.mapAttrs (_: package: makeReplicationTest { inherit package; }) mariadbPackages