at 23.11-beta 5.2 kB view raw
1{ 2 system ? builtins.currentSystem, 3 config ? {}, 4 pkgs ? import ../../.. { inherit system config; }, 5 lib ? pkgs.lib 6}: 7 8let 9 inherit (import ./common.nix { inherit pkgs lib; }) mkTestName mariadbPackages mysqlPackages perconaPackages; 10 11 makeTest = import ./../make-test-python.nix; 12 # Setup common users 13 makeMySQLTest = { 14 package, 15 name ? mkTestName package, 16 useSocketAuth ? true, 17 hasMroonga ? true, 18 hasRocksDB ? pkgs.stdenv.hostPlatform.is64bit 19 }: makeTest { 20 inherit name; 21 meta = with lib.maintainers; { 22 maintainers = [ ajs124 das_j ]; 23 }; 24 25 nodes = { 26 ${name} = 27 { pkgs, ... }: { 28 29 users = { 30 groups.testusers = { }; 31 32 users.testuser = { 33 isSystemUser = true; 34 group = "testusers"; 35 }; 36 37 users.testuser2 = { 38 isSystemUser = true; 39 group = "testusers"; 40 }; 41 }; 42 43 services.mysql = { 44 enable = true; 45 initialDatabases = [ 46 { name = "testdb3"; schema = ./testdb.sql; } 47 ]; 48 # note that using pkgs.writeText here is generally not a good idea, 49 # as it will store the password in world-readable /nix/store ;) 50 initialScript = pkgs.writeText "mysql-init.sql" (if (!useSocketAuth) then '' 51 CREATE USER 'testuser3'@'localhost' IDENTIFIED BY 'secure'; 52 GRANT ALL PRIVILEGES ON testdb3.* TO 'testuser3'@'localhost'; 53 '' else '' 54 ALTER USER root@localhost IDENTIFIED WITH unix_socket; 55 DELETE FROM mysql.user WHERE password = ''' AND plugin = '''; 56 DELETE FROM mysql.user WHERE user = '''; 57 FLUSH PRIVILEGES; 58 ''); 59 60 ensureDatabases = [ "testdb" "testdb2" ]; 61 ensureUsers = [{ 62 name = "testuser"; 63 ensurePermissions = { 64 "testdb.*" = "ALL PRIVILEGES"; 65 }; 66 } { 67 name = "testuser2"; 68 ensurePermissions = { 69 "testdb2.*" = "ALL PRIVILEGES"; 70 }; 71 }]; 72 package = package; 73 settings = { 74 mysqld = { 75 plugin-load-add = lib.optional hasMroonga "ha_mroonga.so" 76 ++ lib.optional hasRocksDB "ha_rocksdb.so"; 77 }; 78 }; 79 }; 80 }; 81 }; 82 83 testScript = '' 84 start_all() 85 86 machine = ${name} 87 machine.wait_for_unit("mysql") 88 machine.succeed( 89 "echo 'use testdb; create table tests (test_id INT, PRIMARY KEY (test_id));' | sudo -u testuser mysql -u testuser" 90 ) 91 machine.succeed( 92 "echo 'use testdb; insert into tests values (42);' | sudo -u testuser mysql -u testuser" 93 ) 94 # Ensure testuser2 is not able to insert into testdb as mysql testuser2 95 machine.fail( 96 "echo 'use testdb; insert into tests values (23);' | sudo -u testuser2 mysql -u testuser2" 97 ) 98 # Ensure testuser2 is not able to authenticate as mysql testuser 99 machine.fail( 100 "echo 'use testdb; insert into tests values (23);' | sudo -u testuser2 mysql -u testuser" 101 ) 102 machine.succeed( 103 "echo 'use testdb; select test_id from tests;' | sudo -u testuser mysql -u testuser -N | grep 42" 104 ) 105 106 ${lib.optionalString hasMroonga '' 107 # Check if Mroonga plugin works 108 machine.succeed( 109 "echo 'use testdb; create table mroongadb (test_id INT, PRIMARY KEY (test_id)) ENGINE = Mroonga;' | sudo -u testuser mysql -u testuser" 110 ) 111 machine.succeed( 112 "echo 'use testdb; insert into mroongadb values (25);' | sudo -u testuser mysql -u testuser" 113 ) 114 machine.succeed( 115 "echo 'use testdb; select test_id from mroongadb;' | sudo -u testuser mysql -u testuser -N | grep 25" 116 ) 117 machine.succeed( 118 "echo 'use testdb; drop table mroongadb;' | sudo -u testuser mysql -u testuser" 119 ) 120 ''} 121 122 ${lib.optionalString hasRocksDB '' 123 # Check if RocksDB plugin works 124 machine.succeed( 125 "echo 'use testdb; create table rocksdb (test_id INT, PRIMARY KEY (test_id)) ENGINE = RocksDB;' | sudo -u testuser mysql -u testuser" 126 ) 127 machine.succeed( 128 "echo 'use testdb; insert into rocksdb values (28);' | sudo -u testuser mysql -u testuser" 129 ) 130 machine.succeed( 131 "echo 'use testdb; select test_id from rocksdb;' | sudo -u testuser mysql -u testuser -N | grep 28" 132 ) 133 machine.succeed( 134 "echo 'use testdb; drop table rocksdb;' | sudo -u testuser mysql -u testuser" 135 ) 136 ''} 137 ''; 138 }; 139in 140 lib.mapAttrs (_: package: makeMySQLTest { 141 inherit package; 142 hasRocksDB = false; hasMroonga = false; useSocketAuth = false; 143 }) mysqlPackages 144 // (lib.mapAttrs (_: package: makeMySQLTest { 145 inherit package; 146 }) mariadbPackages) 147 // (lib.mapAttrs (_: package: makeMySQLTest { 148 inherit package; 149 name = "percona_8_0"; 150 hasMroonga = false; useSocketAuth = false; 151 }) perconaPackages)