at 18.03-beta 2.5 kB view raw
1import ./make-test.nix ({ pkgs, ...} : 2 3let 4 replicateUser = "replicate"; 5 replicatePassword = "secret"; 6in 7 8{ 9 name = "mysql-replication"; 10 meta = with pkgs.stdenv.lib.maintainers; { 11 maintainers = [ eelco chaoflow shlevy ]; 12 }; 13 14 nodes = { 15 master = 16 { pkgs, config, ... }: 17 18 { 19 services.mysql.enable = true; 20 services.mysql.package = pkgs.mysql; 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; } ]; 26 networking.firewall.allowedTCPPorts = [ 3306 ]; 27 }; 28 29 slave1 = 30 { pkgs, config, nodes, ... }: 31 32 { 33 services.mysql.enable = true; 34 services.mysql.package = pkgs.mysql; 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; 40 }; 41 42 slave2 = 43 { pkgs, config, nodes, ... }: 44 45 { 46 services.mysql.enable = true; 47 services.mysql.package = pkgs.mysql; 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; 53 }; 54 }; 55 56 testScript = '' 57 $master->start; 58 $master->waitForUnit("mysql"); 59 $master->waitForOpenPort(3306); 60 $slave1->start; 61 $slave2->start; 62 $slave1->waitForUnit("mysql"); 63 $slave1->waitForOpenPort(3306); 64 $slave2->waitForUnit("mysql"); 65 $slave2->waitForOpenPort(3306); 66 $slave2->succeed("echo 'use testdb; select * from tests' | mysql -u root -N | grep 4"); 67 $slave2->succeed("systemctl stop mysql"); 68 $master->succeed("echo 'insert into testdb.tests values (123, 456);' | mysql -u root -N"); 69 $slave2->succeed("systemctl start mysql"); 70 $slave2->waitForUnit("mysql"); 71 $slave2->waitForOpenPort(3306); 72 $slave2->succeed("echo 'select * from testdb.tests where Id = 123;' | mysql -u root -N | grep 456"); 73 ''; 74})