···
1
-
import ./../make-test-python.nix ({ pkgs, ...} :
2
+
system ? builtins.currentSystem,
4
+
pkgs ? import ../../.. { inherit system config; },
9
+
inherit (import ./common.nix { inherit pkgs lib; }) mkTestName mariadbPackages;
replicateUser = "replicate";
replicatePassword = "secret";
9
-
name = "mysql-replication";
10
-
meta = with pkgs.lib.maintainers; {
11
-
maintainers = [ eelco shlevy ];
14
+
makeTest = import ./../make-test-python.nix;
16
+
makeReplicationTest = {
18
+
name ? mkTestName package,
20
+
name = "${name}-replication";
21
+
meta = with pkgs.lib.maintainers; {
22
+
maintainers = [ ajs124 das_j ];
19
-
services.mysql.enable = true;
20
-
services.mysql.package = pkgs.mariadb;
21
-
services.mysql.replication.role = "master";
22
-
services.mysql.replication.slaveHost = "%";
23
-
services.mysql.replication.masterUser = replicateUser;
24
-
services.mysql.replication.masterPassword = replicatePassword;
25
-
services.mysql.initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ];
30
+
replication.role = "master";
31
+
replication.slaveHost = "%";
32
+
replication.masterUser = replicateUser;
33
+
replication.masterPassword = replicatePassword;
34
+
initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ];
networking.firewall.allowedTCPPorts = [ 3306 ];
30
-
{ pkgs, nodes, ... }:
33
-
services.mysql.enable = true;
34
-
services.mysql.package = pkgs.mariadb;
35
-
services.mysql.replication.role = "slave";
36
-
services.mysql.replication.serverId = 2;
37
-
services.mysql.replication.masterHost = nodes.master.config.networking.hostName;
38
-
services.mysql.replication.masterUser = replicateUser;
39
-
services.mysql.replication.masterPassword = replicatePassword;
39
+
secondary1 = { nodes, ... }: {
43
+
replication.role = "slave";
44
+
replication.serverId = 2;
45
+
replication.masterHost = nodes.primary.config.networking.hostName;
46
+
replication.masterUser = replicateUser;
47
+
replication.masterPassword = replicatePassword;
43
-
{ pkgs, nodes, ... }:
46
-
services.mysql.enable = true;
47
-
services.mysql.package = pkgs.mariadb;
48
-
services.mysql.replication.role = "slave";
49
-
services.mysql.replication.serverId = 3;
50
-
services.mysql.replication.masterHost = nodes.master.config.networking.hostName;
51
-
services.mysql.replication.masterUser = replicateUser;
52
-
services.mysql.replication.masterPassword = replicatePassword;
51
+
secondary2 = { nodes, ... }: {
55
+
replication.role = "slave";
56
+
replication.serverId = 3;
57
+
replication.masterHost = nodes.primary.config.networking.hostName;
58
+
replication.masterUser = replicateUser;
59
+
replication.masterPassword = replicatePassword;
58
-
master.wait_for_unit("mysql")
59
-
master.wait_for_open_port(3306)
60
-
# Wait for testdb to be fully populated (5 rows).
61
-
master.wait_until_succeeds(
62
-
"sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
66
+
primary.wait_for_unit("mysql")
67
+
primary.wait_for_open_port(3306)
68
+
# Wait for testdb to be fully populated (5 rows).
69
+
primary.wait_until_succeeds(
70
+
"sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
67
-
slave1.wait_for_unit("mysql")
68
-
slave1.wait_for_open_port(3306)
69
-
slave2.wait_for_unit("mysql")
70
-
slave2.wait_for_open_port(3306)
75
+
secondary1.wait_for_unit("mysql")
76
+
secondary1.wait_for_open_port(3306)
77
+
secondary2.wait_for_unit("mysql")
78
+
secondary2.wait_for_open_port(3306)
72
-
# wait for replications to finish
73
-
slave1.wait_until_succeeds(
74
-
"sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
76
-
slave2.wait_until_succeeds(
77
-
"sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
80
+
# wait for replications to finish
81
+
secondary1.wait_until_succeeds(
82
+
"sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
84
+
secondary2.wait_until_succeeds(
85
+
"sudo -u mysql mysql -u mysql -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
80
-
slave2.succeed("systemctl stop mysql")
82
-
"echo 'insert into testdb.tests values (123, 456);' | sudo -u mysql mysql -u mysql -N"
84
-
slave2.succeed("systemctl start mysql")
85
-
slave2.wait_for_unit("mysql")
86
-
slave2.wait_for_open_port(3306)
87
-
slave2.wait_until_succeeds(
88
-
"echo 'select * from testdb.tests where Id = 123;' | sudo -u mysql mysql -u mysql -N | grep 456"
88
+
secondary2.succeed("systemctl stop mysql")
90
+
"echo 'insert into testdb.tests values (123, 456);' | sudo -u mysql mysql -u mysql -N"
92
+
secondary2.succeed("systemctl start mysql")
93
+
secondary2.wait_for_unit("mysql")
94
+
secondary2.wait_for_open_port(3306)
95
+
secondary2.wait_until_succeeds(
96
+
"echo 'select * from testdb.tests where Id = 123;' | sudo -u mysql mysql -u mysql -N | grep 456"
101
+
lib.mapAttrs (_: package: makeReplicationTest { inherit package; }) mariadbPackages