at 16.09-beta 2.1 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 $slave1->start; 60 $slave2->start; 61 $slave1->waitForUnit("mysql"); 62 $slave2->waitForUnit("mysql"); 63 $slave2->sleep(100); # Hopefully this is long enough!! 64 $slave2->succeed("echo 'use testdb; select * from tests' | mysql -u root -N | grep 4"); 65 ''; 66})