at 23.05-pre 5.0 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; 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 ? true 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 mariadb = { 83 }; 84 }; 85 86 testScript = '' 87 start_all() 88 89 machine = ${name} 90 machine.wait_for_unit("mysql") 91 machine.succeed( 92 "echo 'use testdb; create table tests (test_id INT, PRIMARY KEY (test_id));' | sudo -u testuser mysql -u testuser" 93 ) 94 machine.succeed( 95 "echo 'use testdb; insert into tests values (42);' | sudo -u testuser mysql -u testuser" 96 ) 97 # Ensure testuser2 is not able to insert into testdb as mysql testuser2 98 machine.fail( 99 "echo 'use testdb; insert into tests values (23);' | sudo -u testuser2 mysql -u testuser2" 100 ) 101 # Ensure testuser2 is not able to authenticate as mysql testuser 102 machine.fail( 103 "echo 'use testdb; insert into tests values (23);' | sudo -u testuser2 mysql -u testuser" 104 ) 105 machine.succeed( 106 "echo 'use testdb; select test_id from tests;' | sudo -u testuser mysql -u testuser -N | grep 42" 107 ) 108 109 ${lib.optionalString hasMroonga '' 110 # Check if Mroonga plugin works 111 machine.succeed( 112 "echo 'use testdb; create table mroongadb (test_id INT, PRIMARY KEY (test_id)) ENGINE = Mroonga;' | sudo -u testuser mysql -u testuser" 113 ) 114 machine.succeed( 115 "echo 'use testdb; insert into mroongadb values (25);' | sudo -u testuser mysql -u testuser" 116 ) 117 machine.succeed( 118 "echo 'use testdb; select test_id from mroongadb;' | sudo -u testuser mysql -u testuser -N | grep 25" 119 ) 120 machine.succeed( 121 "echo 'use testdb; drop table mroongadb;' | sudo -u testuser mysql -u testuser" 122 ) 123 ''} 124 125 ${lib.optionalString hasRocksDB '' 126 # Check if RocksDB plugin works 127 machine.succeed( 128 "echo 'use testdb; create table rocksdb (test_id INT, PRIMARY KEY (test_id)) ENGINE = RocksDB;' | sudo -u testuser mysql -u testuser" 129 ) 130 machine.succeed( 131 "echo 'use testdb; insert into rocksdb values (28);' | sudo -u testuser mysql -u testuser" 132 ) 133 machine.succeed( 134 "echo 'use testdb; select test_id from rocksdb;' | sudo -u testuser mysql -u testuser -N | grep 28" 135 ) 136 machine.succeed( 137 "echo 'use testdb; drop table rocksdb;' | sudo -u testuser mysql -u testuser" 138 ) 139 ''} 140 ''; 141 }; 142in 143 lib.mapAttrs (_: package: makeMySQLTest { 144 inherit package; 145 hasRocksDB = false; hasMroonga = false; useSocketAuth = false; 146 }) mysqlPackages 147 // (lib.mapAttrs (_: package: makeMySQLTest { 148 inherit package; 149 }) mariadbPackages)