lol

nixos/tests/mariadb-galera: test multiple mariadb versions

merge both tests and completely refactor

ajs124 65dfe147 38998112

+262 -463
+1 -2
nixos/tests/all-tests.nix
··· 268 268 mailcatcher = handleTest ./mailcatcher.nix {}; 269 269 mailhog = handleTest ./mailhog.nix {}; 270 270 man = handleTest ./man.nix {}; 271 - mariadb-galera-mariabackup = handleTest ./mysql/mariadb-galera-mariabackup.nix {}; 272 - mariadb-galera-rsync = handleTest ./mysql/mariadb-galera-rsync.nix {}; 271 + mariadb-galera = handleTest ./mysql/mariadb-galera.nix {}; 273 272 matomo = handleTest ./matomo.nix {}; 274 273 matrix-appservice-irc = handleTest ./matrix-appservice-irc.nix {}; 275 274 matrix-conduit = handleTest ./matrix-conduit.nix {};
+10
nixos/tests/mysql/common.nix
··· 1 + { lib, pkgs }: { 2 + mariadbPackages = lib.filterAttrs (n: _: lib.hasPrefix "mariadb" n) (pkgs.callPackage ../../../pkgs/servers/sql/mariadb { 3 + inherit (pkgs.darwin) cctools; 4 + inherit (pkgs.darwin.apple_sdk.frameworks) CoreServices; 5 + }); 6 + mysqlPackage = { 7 + inherit (pkgs) mysql57 mysql80; 8 + }; 9 + mkTestName = pkg: "mariadb_${builtins.replaceStrings ["."] [""] (lib.versions.majorMinor pkg.version)}"; 10 + }
-233
nixos/tests/mysql/mariadb-galera-mariabackup.nix
··· 1 - import ./../make-test-python.nix ({ pkgs, ...} : 2 - 3 - let 4 - mysqlenv-common = pkgs.buildEnv { name = "mysql-path-env-common"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ bash gawk gnutar inetutils which ]; }; 5 - mysqlenv-mariabackup = pkgs.buildEnv { name = "mysql-path-env-mariabackup"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ gzip iproute2 netcat procps pv socat ]; }; 6 - 7 - # Common user configuration 8 - users = { ... }: 9 - { 10 - users.users.testuser = { 11 - isSystemUser = true; 12 - group = "testusers"; 13 - }; 14 - users.groups.testusers = { }; 15 - }; 16 - 17 - in { 18 - name = "mariadb-galera-mariabackup"; 19 - meta = with pkgs.lib.maintainers; { 20 - maintainers = [ izorkin ]; 21 - }; 22 - 23 - # The test creates a Galera cluster with 3 nodes and is checking if mariabackup-based SST works. The cluster is tested by creating a DB and an empty table on one node, 24 - # and checking the table's presence on the other node. 25 - 26 - nodes = { 27 - galera_01 = 28 - { pkgs, ... }: 29 - { 30 - imports = [ users ]; 31 - networking = { 32 - interfaces.eth1 = { 33 - ipv4.addresses = [ 34 - { address = "192.168.1.1"; prefixLength = 24; } 35 - ]; 36 - }; 37 - extraHosts = '' 38 - 192.168.1.1 galera_01 39 - 192.168.1.2 galera_02 40 - 192.168.1.3 galera_03 41 - ''; 42 - firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 43 - firewall.allowedUDPPorts = [ 4567 ]; 44 - }; 45 - systemd.services.mysql = with pkgs; { 46 - path = [ mysqlenv-common mysqlenv-mariabackup ]; 47 - }; 48 - services.mysql = { 49 - enable = true; 50 - package = pkgs.mariadb; 51 - ensureDatabases = [ "testdb" ]; 52 - ensureUsers = [{ 53 - name = "testuser"; 54 - ensurePermissions = { 55 - "testdb.*" = "ALL PRIVILEGES"; 56 - }; 57 - }]; 58 - initialScript = pkgs.writeText "mariadb-init.sql" '' 59 - GRANT ALL PRIVILEGES ON *.* TO 'check_repl'@'localhost' IDENTIFIED BY 'check_pass' WITH GRANT OPTION; 60 - FLUSH PRIVILEGES; 61 - ''; 62 - settings = { 63 - mysqld = { 64 - bind_address = "0.0.0.0"; 65 - }; 66 - galera = { 67 - wsrep_on = "ON"; 68 - wsrep_debug = "NONE"; 69 - wsrep_retry_autocommit = "3"; 70 - wsrep_provider = "${pkgs.mariadb-galera}/lib/galera/libgalera_smm.so"; 71 - wsrep_cluster_address = "gcomm://"; 72 - wsrep_cluster_name = "galera"; 73 - wsrep_node_address = "192.168.1.1"; 74 - wsrep_node_name = "galera_01"; 75 - wsrep_sst_method = "mariabackup"; 76 - wsrep_sst_auth = "check_repl:check_pass"; 77 - binlog_format = "ROW"; 78 - enforce_storage_engine = "InnoDB"; 79 - innodb_autoinc_lock_mode = "2"; 80 - }; 81 - }; 82 - }; 83 - }; 84 - 85 - galera_02 = 86 - { pkgs, ... }: 87 - { 88 - imports = [ users ]; 89 - networking = { 90 - interfaces.eth1 = { 91 - ipv4.addresses = [ 92 - { address = "192.168.1.2"; prefixLength = 24; } 93 - ]; 94 - }; 95 - extraHosts = '' 96 - 192.168.1.1 galera_01 97 - 192.168.1.2 galera_02 98 - 192.168.1.3 galera_03 99 - ''; 100 - firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 101 - firewall.allowedUDPPorts = [ 4567 ]; 102 - }; 103 - systemd.services.mysql = with pkgs; { 104 - path = [ mysqlenv-common mysqlenv-mariabackup ]; 105 - }; 106 - services.mysql = { 107 - enable = true; 108 - package = pkgs.mariadb; 109 - settings = { 110 - mysqld = { 111 - bind_address = "0.0.0.0"; 112 - }; 113 - galera = { 114 - wsrep_on = "ON"; 115 - wsrep_debug = "NONE"; 116 - wsrep_retry_autocommit = "3"; 117 - wsrep_provider = "${pkgs.mariadb-galera}/lib/galera/libgalera_smm.so"; 118 - wsrep_cluster_address = "gcomm://galera_01,galera_02,galera_03"; 119 - wsrep_cluster_name = "galera"; 120 - wsrep_node_address = "192.168.1.2"; 121 - wsrep_node_name = "galera_02"; 122 - wsrep_sst_method = "mariabackup"; 123 - wsrep_sst_auth = "check_repl:check_pass"; 124 - binlog_format = "ROW"; 125 - enforce_storage_engine = "InnoDB"; 126 - innodb_autoinc_lock_mode = "2"; 127 - }; 128 - }; 129 - }; 130 - }; 131 - 132 - galera_03 = 133 - { pkgs, ... }: 134 - { 135 - imports = [ users ]; 136 - networking = { 137 - interfaces.eth1 = { 138 - ipv4.addresses = [ 139 - { address = "192.168.1.3"; prefixLength = 24; } 140 - ]; 141 - }; 142 - extraHosts = '' 143 - 192.168.1.1 galera_01 144 - 192.168.1.2 galera_02 145 - 192.168.1.3 galera_03 146 - ''; 147 - firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 148 - firewall.allowedUDPPorts = [ 4567 ]; 149 - }; 150 - systemd.services.mysql = with pkgs; { 151 - path = [ mysqlenv-common mysqlenv-mariabackup ]; 152 - }; 153 - services.mysql = { 154 - enable = true; 155 - package = pkgs.mariadb; 156 - settings = { 157 - mysqld = { 158 - bind_address = "0.0.0.0"; 159 - }; 160 - galera = { 161 - wsrep_on = "ON"; 162 - wsrep_debug = "NONE"; 163 - wsrep_retry_autocommit = "3"; 164 - wsrep_provider = "${pkgs.mariadb-galera}/lib/galera/libgalera_smm.so"; 165 - wsrep_cluster_address = "gcomm://galera_01,galera_02,galera_03"; 166 - wsrep_cluster_name = "galera"; 167 - wsrep_node_address = "192.168.1.3"; 168 - wsrep_node_name = "galera_03"; 169 - wsrep_sst_method = "mariabackup"; 170 - wsrep_sst_auth = "check_repl:check_pass"; 171 - binlog_format = "ROW"; 172 - enforce_storage_engine = "InnoDB"; 173 - innodb_autoinc_lock_mode = "2"; 174 - }; 175 - }; 176 - }; 177 - }; 178 - }; 179 - 180 - testScript = '' 181 - galera_01.start() 182 - galera_01.wait_for_unit("mysql") 183 - galera_01.wait_for_open_port(3306) 184 - galera_01.succeed( 185 - "sudo -u testuser mysql -u testuser -e 'use testdb; create table db1 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 186 - ) 187 - galera_01.succeed( 188 - "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db1 values (37);'" 189 - ) 190 - galera_02.start() 191 - galera_02.wait_for_unit("mysql") 192 - galera_02.wait_for_open_port(3306) 193 - galera_03.start() 194 - galera_03.wait_for_unit("mysql") 195 - galera_03.wait_for_open_port(3306) 196 - galera_02.succeed( 197 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 37" 198 - ) 199 - galera_02.succeed( 200 - "sudo -u testuser mysql -u testuser -e 'use testdb; create table db2 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 201 - ) 202 - galera_02.succeed("systemctl stop mysql") 203 - galera_01.succeed( 204 - "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db2 values (38);'" 205 - ) 206 - galera_03.succeed( 207 - "sudo -u testuser mysql -u testuser -e 'use testdb; create table db3 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 208 - ) 209 - galera_01.succeed( 210 - "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db3 values (39);'" 211 - ) 212 - galera_02.succeed("systemctl start mysql") 213 - galera_02.wait_for_open_port(3306) 214 - galera_02.succeed( 215 - "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_cluster_size.*3'" 216 - ) 217 - galera_03.succeed( 218 - "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_local_state_comment.*Synced'" 219 - ) 220 - galera_01.succeed( 221 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db3;' -N | grep 39" 222 - ) 223 - galera_02.succeed( 224 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db2;' -N | grep 38" 225 - ) 226 - galera_03.succeed( 227 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 37" 228 - ) 229 - galera_01.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db3;'") 230 - galera_02.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db2;'") 231 - galera_03.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db1;'") 232 - ''; 233 - })
-226
nixos/tests/mysql/mariadb-galera-rsync.nix
··· 1 - import ./../make-test-python.nix ({ pkgs, ...} : 2 - 3 - let 4 - mysqlenv-common = pkgs.buildEnv { name = "mysql-path-env-common"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ bash gawk gnutar inetutils which ]; }; 5 - mysqlenv-rsync = pkgs.buildEnv { name = "mysql-path-env-rsync"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ lsof procps rsync stunnel ]; }; 6 - 7 - # Common user configuration 8 - users = { ... }: 9 - { 10 - users.users.testuser = { 11 - isSystemUser = true; 12 - group = "testusers"; 13 - }; 14 - users.groups.testusers = { }; 15 - }; 16 - 17 - in { 18 - name = "mariadb-galera-rsync"; 19 - meta = with pkgs.lib.maintainers; { 20 - maintainers = [ izorkin ]; 21 - }; 22 - 23 - # The test creates a Galera cluster with 3 nodes and is checking if rsync-based SST works. The cluster is tested by creating a DB and an empty table on one node, 24 - # and checking the table's presence on the other node. 25 - 26 - nodes = { 27 - galera_04 = 28 - { pkgs, ... }: 29 - { 30 - imports = [ users ]; 31 - networking = { 32 - interfaces.eth1 = { 33 - ipv4.addresses = [ 34 - { address = "192.168.2.1"; prefixLength = 24; } 35 - ]; 36 - }; 37 - extraHosts = '' 38 - 192.168.2.1 galera_04 39 - 192.168.2.2 galera_05 40 - 192.168.2.3 galera_06 41 - ''; 42 - firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 43 - firewall.allowedUDPPorts = [ 4567 ]; 44 - }; 45 - systemd.services.mysql = with pkgs; { 46 - path = [ mysqlenv-common mysqlenv-rsync ]; 47 - }; 48 - services.mysql = { 49 - enable = true; 50 - package = pkgs.mariadb; 51 - ensureDatabases = [ "testdb" ]; 52 - ensureUsers = [{ 53 - name = "testuser"; 54 - ensurePermissions = { 55 - "testdb.*" = "ALL PRIVILEGES"; 56 - }; 57 - }]; 58 - settings = { 59 - mysqld = { 60 - bind_address = "0.0.0.0"; 61 - }; 62 - galera = { 63 - wsrep_on = "ON"; 64 - wsrep_debug = "NONE"; 65 - wsrep_retry_autocommit = "3"; 66 - wsrep_provider = "${pkgs.mariadb-galera}/lib/galera/libgalera_smm.so"; 67 - wsrep_cluster_address = "gcomm://"; 68 - wsrep_cluster_name = "galera-rsync"; 69 - wsrep_node_address = "192.168.2.1"; 70 - wsrep_node_name = "galera_04"; 71 - wsrep_sst_method = "rsync"; 72 - binlog_format = "ROW"; 73 - enforce_storage_engine = "InnoDB"; 74 - innodb_autoinc_lock_mode = "2"; 75 - }; 76 - }; 77 - }; 78 - }; 79 - 80 - galera_05 = 81 - { pkgs, ... }: 82 - { 83 - imports = [ users ]; 84 - networking = { 85 - interfaces.eth1 = { 86 - ipv4.addresses = [ 87 - { address = "192.168.2.2"; prefixLength = 24; } 88 - ]; 89 - }; 90 - extraHosts = '' 91 - 192.168.2.1 galera_04 92 - 192.168.2.2 galera_05 93 - 192.168.2.3 galera_06 94 - ''; 95 - firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 96 - firewall.allowedUDPPorts = [ 4567 ]; 97 - }; 98 - systemd.services.mysql = with pkgs; { 99 - path = [ mysqlenv-common mysqlenv-rsync ]; 100 - }; 101 - services.mysql = { 102 - enable = true; 103 - package = pkgs.mariadb; 104 - settings = { 105 - mysqld = { 106 - bind_address = "0.0.0.0"; 107 - }; 108 - galera = { 109 - wsrep_on = "ON"; 110 - wsrep_debug = "NONE"; 111 - wsrep_retry_autocommit = "3"; 112 - wsrep_provider = "${pkgs.mariadb-galera}/lib/galera/libgalera_smm.so"; 113 - wsrep_cluster_address = "gcomm://galera_04,galera_05,galera_06"; 114 - wsrep_cluster_name = "galera-rsync"; 115 - wsrep_node_address = "192.168.2.2"; 116 - wsrep_node_name = "galera_05"; 117 - wsrep_sst_method = "rsync"; 118 - binlog_format = "ROW"; 119 - enforce_storage_engine = "InnoDB"; 120 - innodb_autoinc_lock_mode = "2"; 121 - }; 122 - }; 123 - }; 124 - }; 125 - 126 - galera_06 = 127 - { pkgs, ... }: 128 - { 129 - imports = [ users ]; 130 - networking = { 131 - interfaces.eth1 = { 132 - ipv4.addresses = [ 133 - { address = "192.168.2.3"; prefixLength = 24; } 134 - ]; 135 - }; 136 - extraHosts = '' 137 - 192.168.2.1 galera_04 138 - 192.168.2.2 galera_05 139 - 192.168.2.3 galera_06 140 - ''; 141 - firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 142 - firewall.allowedUDPPorts = [ 4567 ]; 143 - }; 144 - systemd.services.mysql = with pkgs; { 145 - path = [ mysqlenv-common mysqlenv-rsync ]; 146 - }; 147 - services.mysql = { 148 - enable = true; 149 - package = pkgs.mariadb; 150 - settings = { 151 - mysqld = { 152 - bind_address = "0.0.0.0"; 153 - }; 154 - galera = { 155 - wsrep_on = "ON"; 156 - wsrep_debug = "NONE"; 157 - wsrep_retry_autocommit = "3"; 158 - wsrep_provider = "${pkgs.mariadb-galera}/lib/galera/libgalera_smm.so"; 159 - wsrep_cluster_address = "gcomm://galera_04,galera_05,galera_06"; 160 - wsrep_cluster_name = "galera-rsync"; 161 - wsrep_node_address = "192.168.2.3"; 162 - wsrep_node_name = "galera_06"; 163 - wsrep_sst_method = "rsync"; 164 - binlog_format = "ROW"; 165 - enforce_storage_engine = "InnoDB"; 166 - innodb_autoinc_lock_mode = "2"; 167 - }; 168 - }; 169 - }; 170 - }; 171 - }; 172 - 173 - testScript = '' 174 - galera_04.start() 175 - galera_04.wait_for_unit("mysql") 176 - galera_04.wait_for_open_port(3306) 177 - galera_04.succeed( 178 - "sudo -u testuser mysql -u testuser -e 'use testdb; create table db1 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 179 - ) 180 - galera_04.succeed( 181 - "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db1 values (41);'" 182 - ) 183 - galera_05.start() 184 - galera_05.wait_for_unit("mysql") 185 - galera_05.wait_for_open_port(3306) 186 - galera_06.start() 187 - galera_06.wait_for_unit("mysql") 188 - galera_06.wait_for_open_port(3306) 189 - galera_05.succeed( 190 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 41" 191 - ) 192 - galera_05.succeed( 193 - "sudo -u testuser mysql -u testuser -e 'use testdb; create table db2 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 194 - ) 195 - galera_05.succeed("systemctl stop mysql") 196 - galera_04.succeed( 197 - "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db2 values (42);'" 198 - ) 199 - galera_06.succeed( 200 - "sudo -u testuser mysql -u testuser -e 'use testdb; create table db3 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 201 - ) 202 - galera_04.succeed( 203 - "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db3 values (43);'" 204 - ) 205 - galera_05.succeed("systemctl start mysql") 206 - galera_05.wait_for_open_port(3306) 207 - galera_05.succeed( 208 - "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_cluster_size.*3'" 209 - ) 210 - galera_06.succeed( 211 - "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_local_state_comment.*Synced'" 212 - ) 213 - galera_04.succeed( 214 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db3;' -N | grep 43" 215 - ) 216 - galera_05.succeed( 217 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db2;' -N | grep 42" 218 - ) 219 - galera_06.succeed( 220 - "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 41" 221 - ) 222 - galera_04.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db3;'") 223 - galera_05.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db2;'") 224 - galera_06.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db1;'") 225 - ''; 226 - })
+250
nixos/tests/mysql/mariadb-galera.nix
··· 1 + { 2 + system ? builtins.currentSystem, 3 + config ? {}, 4 + pkgs ? import ../../.. { inherit system config; }, 5 + lib ? pkgs.lib 6 + }: 7 + 8 + let 9 + inherit (import ./common.nix { inherit pkgs lib; }) mkTestName mariadbPackages; 10 + 11 + makeTest = import ./../make-test-python.nix; 12 + 13 + # Common user configuration 14 + makeGaleraTest = { 15 + mariadbPackage, 16 + name ? mkTestName mariadbPackage, 17 + galeraPackage ? pkgs.mariadb-galera 18 + }: makeTest { 19 + name = "${name}-galera-mariabackup"; 20 + meta = with pkgs.lib.maintainers; { 21 + maintainers = [ izorkin ajs124 das_j ]; 22 + }; 23 + 24 + # The test creates a Galera cluster with 3 nodes and is checking if mariabackup-based SST works. The cluster is tested by creating a DB and an empty table on one node, 25 + # and checking the table's presence on the other node. 26 + nodes = let 27 + mkGaleraNode = { 28 + id, 29 + method 30 + }: let 31 + address = "192.168.1.${toString id}"; 32 + isFirstClusterNode = id == 1 || id == 4; 33 + in { 34 + users = { 35 + users.testuser = { 36 + isSystemUser = true; 37 + group = "testusers"; 38 + }; 39 + groups.testusers = { }; 40 + }; 41 + 42 + networking = { 43 + interfaces.eth1 = { 44 + ipv4.addresses = [ 45 + { inherit address; prefixLength = 24; } 46 + ]; 47 + }; 48 + extraHosts = lib.concatMapStringsSep "\n" (i: "192.168.1.${toString i} galera_0${toString i}") (lib.range 1 6); 49 + firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ]; 50 + firewall.allowedUDPPorts = [ 4567 ]; 51 + }; 52 + systemd.services.mysql = with pkgs; { 53 + path = with pkgs; [ 54 + bash 55 + gawk 56 + gnutar 57 + gzip 58 + inetutils 59 + iproute2 60 + netcat 61 + procps 62 + pv 63 + rsync 64 + socat 65 + stunnel 66 + which 67 + ]; 68 + }; 69 + services.mysql = { 70 + enable = true; 71 + package = mariadbPackage; 72 + ensureDatabases = lib.mkIf isFirstClusterNode [ "testdb" ]; 73 + ensureUsers = lib.mkIf isFirstClusterNode [{ 74 + name = "testuser"; 75 + ensurePermissions = { 76 + "testdb.*" = "ALL PRIVILEGES"; 77 + }; 78 + }]; 79 + initialScript = lib.mkIf isFirstClusterNode (pkgs.writeText "mariadb-init.sql" '' 80 + GRANT ALL PRIVILEGES ON *.* TO 'check_repl'@'localhost' IDENTIFIED BY 'check_pass' WITH GRANT OPTION; 81 + FLUSH PRIVILEGES; 82 + ''); 83 + settings = { 84 + mysqld = { 85 + bind_address = "0.0.0.0"; 86 + }; 87 + galera = { 88 + wsrep_on = "ON"; 89 + wsrep_debug = "NONE"; 90 + wsrep_retry_autocommit = "3"; 91 + wsrep_provider = "${galeraPackage}/lib/galera/libgalera_smm.so"; 92 + wsrep_cluster_address = "gcomm://" 93 + + lib.optionalString (id == 2 || id == 3) "galera_01,galera_02,galera_03" 94 + + lib.optionalString (id == 5 || id == 6) "galera_04,galera_05,galera_06"; 95 + wsrep_cluster_name = "galera"; 96 + wsrep_node_address = address; 97 + wsrep_node_name = "galera_0${toString id}"; 98 + wsrep_sst_method = method; 99 + wsrep_sst_auth = "check_repl:check_pass"; 100 + binlog_format = "ROW"; 101 + enforce_storage_engine = "InnoDB"; 102 + innodb_autoinc_lock_mode = "2"; 103 + }; 104 + }; 105 + }; 106 + }; 107 + in { 108 + galera_01 = mkGaleraNode { 109 + id = 1; 110 + method = "mariabackup"; 111 + }; 112 + 113 + galera_02 = mkGaleraNode { 114 + id = 2; 115 + method = "mariabackup"; 116 + }; 117 + 118 + galera_03 = mkGaleraNode { 119 + id = 3; 120 + method = "mariabackup"; 121 + }; 122 + 123 + galera_04 = mkGaleraNode { 124 + id = 4; 125 + method = "rsync"; 126 + }; 127 + 128 + galera_05 = mkGaleraNode { 129 + id = 5; 130 + method = "rsync"; 131 + }; 132 + 133 + galera_06 = mkGaleraNode { 134 + id = 6; 135 + method = "rsync"; 136 + }; 137 + 138 + }; 139 + 140 + testScript = '' 141 + galera_01.start() 142 + galera_01.wait_for_unit("mysql") 143 + galera_01.wait_for_open_port(3306) 144 + galera_01.succeed( 145 + "sudo -u testuser mysql -u testuser -e 'use testdb; create table db1 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 146 + ) 147 + galera_01.succeed( 148 + "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db1 values (37);'" 149 + ) 150 + galera_02.start() 151 + galera_02.wait_for_unit("mysql") 152 + galera_02.wait_for_open_port(3306) 153 + galera_03.start() 154 + galera_03.wait_for_unit("mysql") 155 + galera_03.wait_for_open_port(3306) 156 + galera_02.succeed( 157 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 37" 158 + ) 159 + galera_02.succeed( 160 + "sudo -u testuser mysql -u testuser -e 'use testdb; create table db2 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 161 + ) 162 + galera_02.succeed("systemctl stop mysql") 163 + galera_01.succeed( 164 + "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db2 values (38);'" 165 + ) 166 + galera_03.succeed( 167 + "sudo -u testuser mysql -u testuser -e 'use testdb; create table db3 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 168 + ) 169 + galera_01.succeed( 170 + "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db3 values (39);'" 171 + ) 172 + galera_02.succeed("systemctl start mysql") 173 + galera_02.wait_for_open_port(3306) 174 + galera_02.succeed( 175 + "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_cluster_size.*3'" 176 + ) 177 + galera_03.succeed( 178 + "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_local_state_comment.*Synced'" 179 + ) 180 + galera_01.succeed( 181 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db3;' -N | grep 39" 182 + ) 183 + galera_02.succeed( 184 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db2;' -N | grep 38" 185 + ) 186 + galera_03.succeed( 187 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 37" 188 + ) 189 + galera_01.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db3;'") 190 + galera_02.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db2;'") 191 + galera_03.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db1;'") 192 + galera_01.crash() 193 + galera_02.crash() 194 + galera_03.crash() 195 + 196 + galera_04.start() 197 + galera_04.wait_for_unit("mysql") 198 + galera_04.wait_for_open_port(3306) 199 + galera_04.succeed( 200 + "sudo -u testuser mysql -u testuser -e 'use testdb; create table db1 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 201 + ) 202 + galera_04.succeed( 203 + "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db1 values (41);'" 204 + ) 205 + galera_05.start() 206 + galera_05.wait_for_unit("mysql") 207 + galera_05.wait_for_open_port(3306) 208 + galera_06.start() 209 + galera_06.wait_for_unit("mysql") 210 + galera_06.wait_for_open_port(3306) 211 + galera_05.succeed( 212 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 41" 213 + ) 214 + galera_05.succeed( 215 + "sudo -u testuser mysql -u testuser -e 'use testdb; create table db2 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 216 + ) 217 + galera_05.succeed("systemctl stop mysql") 218 + galera_04.succeed( 219 + "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db2 values (42);'" 220 + ) 221 + galera_06.succeed( 222 + "sudo -u testuser mysql -u testuser -e 'use testdb; create table db3 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'" 223 + ) 224 + galera_04.succeed( 225 + "sudo -u testuser mysql -u testuser -e 'use testdb; insert into db3 values (43);'" 226 + ) 227 + galera_05.succeed("systemctl start mysql") 228 + galera_05.wait_for_open_port(3306) 229 + galera_05.succeed( 230 + "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_cluster_size.*3'" 231 + ) 232 + galera_06.succeed( 233 + "sudo -u testuser mysql -u testuser -e 'show status' -N | grep 'wsrep_local_state_comment.*Synced'" 234 + ) 235 + galera_04.succeed( 236 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db3;' -N | grep 43" 237 + ) 238 + galera_05.succeed( 239 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db2;' -N | grep 42" 240 + ) 241 + galera_06.succeed( 242 + "sudo -u testuser mysql -u testuser -e 'use testdb; select test_id from db1;' -N | grep 41" 243 + ) 244 + galera_04.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db3;'") 245 + galera_05.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db2;'") 246 + galera_06.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db1;'") 247 + ''; 248 + }; 249 + in 250 + lib.mapAttrs (_: mariadbPackage: makeGaleraTest { inherit mariadbPackage; }) mariadbPackages
+1 -2
pkgs/servers/sql/mariadb/default.nix
··· 112 112 passthru.tests = let 113 113 testVersion = "mariadb_${builtins.replaceStrings ["."] [""] (lib.versions.majorMinor (packageSettings.version))}"; 114 114 in { 115 - mariadb-galera-mariabackup = nixosTests.mariadb-galera-mariabackup.${testVersion}; 116 - mariadb-galera-rsync = nixosTests.mariadb-galera-rsync.${testVersion}; 115 + mariadb-galera-rsync = nixosTests.mariadb-galera.${testVersion}; 117 116 mysql = nixosTests.mysql.${testVersion}; 118 117 mysql-autobackup = nixosTests.mysql-autobackup.${testVersion}; 119 118 mysql-backup = nixosTests.mysql-backup.${testVersion};