diff options
Diffstat (limited to 'nixos/tests/mysql-replication.nix')
-rw-r--r-- | nixos/tests/mysql-replication.nix | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/nixos/tests/mysql-replication.nix b/nixos/tests/mysql-replication.nix new file mode 100644 index 000000000000..28a1187dd184 --- /dev/null +++ b/nixos/tests/mysql-replication.nix @@ -0,0 +1,57 @@ +{ pkgs, ... }: + +let + replicateUser = "replicate"; + replicatePassword = "secret"; +in +{ + nodes = { + master = + { pkgs, config, ... }: + + { + services.mysql.enable = true; + services.mysql.replication.role = "master"; + services.mysql.initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ]; + services.mysql.initialScript = pkgs.writeText "initmysql" + '' + create user '${replicateUser}'@'%' identified by '${replicatePassword}'; + grant replication slave on *.* to '${replicateUser}'@'%'; + ''; + }; + + slave1 = + { pkgs, config, nodes, ... }: + + { + services.mysql.enable = true; + 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; + }; + + slave2 = + { pkgs, config, nodes, ... }: + + { + services.mysql.enable = true; + 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; + }; + }; + + testScript = '' + startAll; + + $master->waitForUnit("mysql"); + $master->waitForUnit("mysql"); + $slave2->waitForUnit("mysql"); + $slave2->sleep(100); # Hopefully this is long enough!! + $slave2->succeed("echo 'use testdb; select * from tests' | mysql -u root -N | grep 4"); + ''; +} |