| 
									
										
										
										
											2014-04-14 14:02:44 +02:00
										 |  |  | import ./make-test.nix ( | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   replicateUser = "replicate"; | 
					
						
							|  |  |  |   replicatePassword = "secret"; | 
					
						
							|  |  |  | in | 
					
						
							| 
									
										
										
										
											2014-04-14 14:02:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2014-06-28 16:04:49 +02:00
										 |  |  |   name = "mysql-replication"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |   nodes = { | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |     master = | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       { pkgs, config, ... }: | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       { | 
					
						
							|  |  |  |         services.mysql.enable = true; | 
					
						
							| 
									
										
										
										
											2014-02-28 06:16:57 -05:00
										 |  |  |         services.mysql.package = pkgs.mysql; | 
					
						
							| 
									
										
										
										
											2014-02-28 16:16:57 +01:00
										 |  |  |         services.mysql.replication.role = "master"; | 
					
						
							|  |  |  |         services.mysql.initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ]; | 
					
						
							|  |  |  |         services.mysql.initialScript = pkgs.writeText "initmysql" | 
					
						
							| 
									
										
										
										
											2014-04-11 17:15:56 +02:00
										 |  |  |           ''
 | 
					
						
							|  |  |  |             create user '${replicateUser}'@'%' identified by '${replicatePassword}'; | 
					
						
							|  |  |  |             grant replication slave on *.* to '${replicateUser}'@'%'; | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         networking.firewall.allowedTCPPorts = [ 3306 ]; | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |     slave1 = | 
					
						
							|  |  |  |       { pkgs, config, nodes, ... }: | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       { | 
					
						
							|  |  |  |         services.mysql.enable = true; | 
					
						
							| 
									
										
										
										
											2014-02-28 16:17:34 +01:00
										 |  |  |         services.mysql.package = pkgs.mysql; | 
					
						
							| 
									
										
										
										
											2014-02-28 16:16:57 +01:00
										 |  |  |         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; | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |     slave2 = | 
					
						
							|  |  |  |       { pkgs, config, nodes, ... }: | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       { | 
					
						
							|  |  |  |         services.mysql.enable = true; | 
					
						
							| 
									
										
										
										
											2014-02-28 16:17:34 +01:00
										 |  |  |         services.mysql.package = pkgs.mysql; | 
					
						
							| 
									
										
										
										
											2014-02-28 16:16:57 +01:00
										 |  |  |         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; | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       }; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |   testScript = ''
 | 
					
						
							|  |  |  |     startAll; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 18:22:53 +02:00
										 |  |  |     $master->waitForUnit("mysql"); | 
					
						
							|  |  |  |     $master->waitForUnit("mysql"); | 
					
						
							|  |  |  |     $slave2->waitForUnit("mysql"); | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |     $slave2->sleep(100); # Hopefully this is long enough!! | 
					
						
							| 
									
										
										
										
											2012-10-24 18:22:53 +02:00
										 |  |  |     $slave2->succeed("echo 'use testdb; select * from tests' | mysql -u root -N | grep 4"); | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2014-04-14 14:02:44 +02:00
										 |  |  | }) |