| 
									
										
										
										
											2019-11-23 23:47:16 +01:00
										 |  |  | import ./make-test-python.nix ({ pkgs, ...} : { | 
					
						
							| 
									
										
										
										
											2014-06-28 16:04:49 +02:00
										 |  |  |   name = "mysql"; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2019-02-22 16:14:13 +01:00
										 |  |  |     maintainers = [ eelco shlevy ]; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   nodes = { | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  |     mysql = | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |       { pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |       { | 
					
						
							|  |  |  |         services.mysql.enable = true; | 
					
						
							| 
									
										
										
										
											2019-04-01 20:01:29 +02:00
										 |  |  |         services.mysql.initialDatabases = [ | 
					
						
							|  |  |  |           { name = "testdb"; schema = ./testdb.sql; } | 
					
						
							|  |  |  |           { name = "empty_testdb"; } | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2019-04-01 21:08:47 +02:00
										 |  |  |         # note that using pkgs.writeText here is generally not a good idea, | 
					
						
							|  |  |  |         # as it will store the password in world-readable /nix/store ;) | 
					
						
							|  |  |  |         services.mysql.initialScript = pkgs.writeText "mysql-init.sql" ''
 | 
					
						
							|  |  |  |           CREATE USER 'passworduser'@'localhost' IDENTIFIED BY 'password123'; | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2019-08-04 10:41:55 -04:00
										 |  |  |         services.mysql.package = pkgs.mysql57; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-20 20:46:26 -04:00
										 |  |  |     mysql80 = | 
					
						
							|  |  |  |       { pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         # prevent oom: | 
					
						
							|  |  |  |         # Kernel panic - not syncing: Out of memory: compulsory panic_on_oom is enabled | 
					
						
							|  |  |  |         virtualisation.memorySize = 1024; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         services.mysql.enable = true; | 
					
						
							|  |  |  |         services.mysql.initialDatabases = [ | 
					
						
							|  |  |  |           { name = "testdb"; schema = ./testdb.sql; } | 
					
						
							|  |  |  |           { name = "empty_testdb"; } | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         # note that using pkgs.writeText here is generally not a good idea, | 
					
						
							|  |  |  |         # as it will store the password in world-readable /nix/store ;) | 
					
						
							|  |  |  |         services.mysql.initialScript = pkgs.writeText "mysql-init.sql" ''
 | 
					
						
							|  |  |  |           CREATE USER 'passworduser'@'localhost' IDENTIFIED BY 'password123'; | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         services.mysql.package = pkgs.mysql80; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  |     mariadb = | 
					
						
							|  |  |  |       { pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         users.users.testuser = { }; | 
					
						
							| 
									
										
										
										
											2019-12-28 15:30:11 +01:00
										 |  |  |         users.users.testuser2 = { }; | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  |         services.mysql.enable = true; | 
					
						
							| 
									
										
										
										
											2019-06-30 22:01:02 -04:00
										 |  |  |         services.mysql.initialScript = pkgs.writeText "mariadb-init.sql" ''
 | 
					
						
							| 
									
										
										
										
											2019-07-03 00:35:35 +02:00
										 |  |  |           ALTER USER root@localhost IDENTIFIED WITH unix_socket; | 
					
						
							|  |  |  |           DELETE FROM mysql.user WHERE password = ''' AND plugin = ''';
 | 
					
						
							|  |  |  |           DELETE FROM mysql.user WHERE user = ''';
 | 
					
						
							|  |  |  |           FLUSH PRIVILEGES; | 
					
						
							| 
									
										
										
										
											2019-06-30 22:01:02 -04:00
										 |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2019-12-28 15:30:11 +01:00
										 |  |  |         services.mysql.ensureDatabases = [ "testdb" "testdb2" ]; | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  |         services.mysql.ensureUsers = [{ | 
					
						
							|  |  |  |           name = "testuser"; | 
					
						
							|  |  |  |           ensurePermissions = { | 
					
						
							|  |  |  |             "testdb.*" = "ALL PRIVILEGES"; | 
					
						
							|  |  |  |           }; | 
					
						
							| 
									
										
										
										
											2019-12-28 15:30:11 +01:00
										 |  |  |         } { | 
					
						
							|  |  |  |           name = "testuser2"; | 
					
						
							|  |  |  |           ensurePermissions = { | 
					
						
							|  |  |  |             "testdb2.*" = "ALL PRIVILEGES"; | 
					
						
							|  |  |  |           }; | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  |         }]; | 
					
						
							| 
									
										
										
										
											2020-03-30 13:37:10 +03:00
										 |  |  |         services.mysql.settings = { | 
					
						
							|  |  |  |           mysqld = { | 
					
						
							| 
									
										
										
										
											2020-03-31 14:46:04 +03:00
										 |  |  |             plugin-load-add = [ "ha_tokudb.so" "ha_rocksdb.so" ]; | 
					
						
							| 
									
										
										
										
											2020-03-30 13:37:10 +03:00
										 |  |  |           }; | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  |         services.mysql.package = pkgs.mariadb; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 = ''
 | 
					
						
							| 
									
										
										
										
											2019-12-28 15:29:22 +01:00
										 |  |  |     start_all() | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-23 23:47:16 +01:00
										 |  |  |     mysql.wait_for_unit("mysql") | 
					
						
							|  |  |  |     mysql.succeed("echo 'use empty_testdb;' | mysql -u root") | 
					
						
							|  |  |  |     mysql.succeed("echo 'use testdb; select * from tests;' | mysql -u root -N | grep 4") | 
					
						
							| 
									
										
										
										
											2019-04-01 21:08:47 +02:00
										 |  |  |     # ';' acts as no-op, just check whether login succeeds with the user created from the initialScript | 
					
						
							| 
									
										
										
										
											2019-11-23 23:47:16 +01:00
										 |  |  |     mysql.succeed("echo ';' | mysql -u passworduser --password=password123") | 
					
						
							| 
									
										
										
										
											2019-03-12 23:53:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-20 20:46:26 -04:00
										 |  |  |     mysql80.wait_for_unit("mysql") | 
					
						
							|  |  |  |     mysql80.succeed("echo 'use empty_testdb;' | mysql -u root") | 
					
						
							|  |  |  |     mysql80.succeed("echo 'use testdb; select * from tests;' | mysql -u root -N | grep 4") | 
					
						
							|  |  |  |     # ';' acts as no-op, just check whether login succeeds with the user created from the initialScript | 
					
						
							|  |  |  |     mysql80.succeed("echo ';' | mysql -u passworduser --password=password123") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-23 23:47:16 +01:00
										 |  |  |     mariadb.wait_for_unit("mysql") | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; create table tests (test_id INT, PRIMARY KEY (test_id));' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; insert into tests values (42);' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-12-28 15:30:11 +01:00
										 |  |  |     # Ensure testuser2 is not able to insert into testdb as mysql testuser2 | 
					
						
							|  |  |  |     mariadb.fail( | 
					
						
							|  |  |  |         "echo 'use testdb; insert into tests values (23);' | sudo -u testuser2 mysql -u testuser2" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     # Ensure testuser2 is not able to authenticate as mysql testuser | 
					
						
							|  |  |  |     mariadb.fail( | 
					
						
							|  |  |  |         "echo 'use testdb; insert into tests values (23);' | sudo -u testuser2 mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-11-23 23:47:16 +01:00
										 |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; select test_id from tests;' | sudo -u testuser mysql -u testuser -N | grep 42" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2020-03-30 13:37:10 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Check if TokuDB plugin works | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; create table tokudb (test_id INT, PRIMARY KEY (test_id)) ENGINE = TokuDB;' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; insert into tokudb values (25);' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; select test_id from tokudb;' | sudo -u testuser mysql -u testuser -N | grep 25" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; drop table tokudb;' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2020-03-31 14:46:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Check if RocksDB plugin works | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; create table rocksdb (test_id INT, PRIMARY KEY (test_id)) ENGINE = RocksDB;' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; insert into rocksdb values (28);' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; select test_id from rocksdb;' | sudo -u testuser mysql -u testuser -N | grep 28" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     mariadb.succeed( | 
					
						
							|  |  |  |         "echo 'use testdb; drop table rocksdb;' | sudo -u testuser mysql -u testuser" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2011-07-13 20:58:48 +00:00
										 |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  | }) |