diff --git a/lib/testing/classes/util.php b/lib/testing/classes/util.php index 737c7532472f9..0f656a38776cd 100644 --- a/lib/testing/classes/util.php +++ b/lib/testing/classes/util.php @@ -643,20 +643,19 @@ public static function reset_database() { $borkedmysql = false; if ($DB->get_dbfamily() === 'mysql') { $version = $DB->get_server_info(); - if (version_compare($version['version'], '5.6.0') == 1 and version_compare($version['version'], '5.6.16') == -1) { - // Everything that comes from Oracle is evil! - // - // See http://dev.mysql.com/doc/refman/5.6/en/alter-table.html - // You cannot reset the counter to a value less than or equal to to the value that is currently in use. - // - // From 5.6.16 release notes: - // InnoDB: The ALTER TABLE INPLACE algorithm would fail to decrease the auto-increment value. - // (Bug #17250787, Bug #69882) + // Everything that comes from Oracle is evil! + // + // See http://dev.mysql.com/doc/refman/5.6/en/alter-table.html + // You cannot reset the counter to a value less than or equal to to the value that is currently in use. + // + // From 5.6.16 release notes: + // InnoDB: The ALTER TABLE INPLACE algorithm would fail to decrease the auto-increment value. + // (Bug #17250787, Bug #69882) + if (version_compare($version['version'], '5.6.0', '>=') && version_compare($version['version'], '5.6.16', '<')) { $borkedmysql = true; + } - } else if (version_compare($version['version'], '10.0.0') == 1) { - // And MariaDB is no better! - // Let's hope they pick the patch sometime later... + if (version_compare($version['version'], '5.7.0', '>=') && version_compare($version['version'], '5.7.4', '<')) { $borkedmysql = true; } } diff --git a/lib/testing/tests/util_test.php b/lib/testing/tests/util_test.php new file mode 100644 index 0000000000000..68f8b0f8a5446 --- /dev/null +++ b/lib/testing/tests/util_test.php @@ -0,0 +1,85 @@ +. + +namespace core\testing; + +/** + * Testing util tests. + * + * @package core + * @category phpunit + * @copyright 2023 Andrew Lyons + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class util_test extends \advanced_testcase { + /** + * Note: This test is required for the other two parts because the first time + * a table is written to it may not have had the initial value reset. + * + * @coversNothing + */ + public function test_increment_reset_part_one(): void { + global $DB; + + switch ($DB->get_dbfamily()) { + case 'mssql': + $this->markTestSkipped('MSSQL does not support sequences'); + return; + case 'mysql': + $version = $DB->get_server_info(); + if (version_compare($version['version'], '5.7.4', '<')) { + return; + } + } + + $this->resetAfterTest(); + $DB->insert_record('config_plugins', [ + 'plugin' => 'example', + 'name' => 'test_increment', + 'value' => 0, + ]); + } + + /** + * @coversNothing + * @depends test_increment_reset_part_one + */ + public function test_increment_reset_part_two(): int { + global $DB; + + $this->resetAfterTest(); + return $DB->insert_record('config_plugins', [ + 'plugin' => 'example', + 'name' => 'test_increment', + 'value' => 0, + ]); + } + + /** + * @depends test_increment_reset_part_two + */ + public function test_increment_reset_part_three(int $previousid): void { + global $DB; + + $this->resetAfterTest(); + $id = $DB->insert_record('config_plugins', [ + 'plugin' => 'example', + 'name' => 'test_increment', + 'value' => 0, + ]); + $this->assertEquals($previousid, $id); + } +}