This repository has been archived on 2025-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
lwb6/legacyworlds-server-data/db-structure/tests/admin/050-updates/000-updates-ctrl/020-check-stuck-tick.sql

60 lines
2.7 KiB
MySQL
Raw Permalink Normal View History

/*
* Tests of the sys.check_stuck_tick() function
*/
BEGIN;
-- Delete all registered update types and targets
DELETE FROM sys.update_types;
DELETE FROM sys.update_targets;
-- Create a new update target / type which will be used in tests
CREATE SCHEMA test
CREATE TABLE test( test_id INT NOT NULL PRIMARY KEY );
INSERT INTO sys.update_targets VALUES ( 1 , 'Test' , 'test' , 'test' );
INSERT INTO sys.update_types VALUES ( 1 , 1 , 'Test' , 2 , '' , NULL , NULL );
-- Insert a few update rows
INSERT INTO test.test VALUES ( 1 ) , ( 2 ) , ( 3 );
-- Replace sys.end_tick() with a function that inserts into some table
CREATE TABLE end_tick_calls( tick_id BIGINT NOT NULL );
CREATE OR REPLACE FUNCTION sys.end_tick( tick_id BIGINT )
RETURNS VOID LANGUAGE SQL
AS 'INSERT INTO end_tick_calls VALUES( $1 );';
-- ***** TESTS BEGIN HERE *****
SELECT plan( 8 );
UPDATE sys.status SET maintenance_start = NULL , current_tick = NULL;
SELECT diag_test_name( 'sys.check_stuck_tick() - Returns NULL if no tick is in progress' );
SELECT ok( sys.check_stuck_tick() IS NULL );
SELECT diag_test_name( 'sys.check_stuck_tick() - Does not call sys.end_tick() if no tick is in progress' );
SELECT is_empty( $$ SELECT * FROM end_tick_calls $$ );
DELETE FROM end_tick_calls;
UPDATE sys.status SET maintenance_start = now( ) , current_tick = 2;
SELECT diag_test_name( 'sys.check_stuck_tick() - Returns NULL if maintenance mode is enabled' );
SELECT ok( sys.check_stuck_tick() IS NULL );
SELECT diag_test_name( 'sys.check_stuck_tick() - Does not call sys.end_tick() if maintenance mode is enabled' );
SELECT is_empty( $$ SELECT * FROM end_tick_calls $$ );
DELETE FROM end_tick_calls;
UPDATE sys.status SET maintenance_start = NULL , current_tick = 2;
UPDATE sys.updates SET update_state = 'PROCESSED' , update_last = 2;
SELECT diag_test_name( 'sys.check_stuck_tick() - Returns NULL if a tick is in progress but there are no updates left' );
SELECT ok( sys.check_stuck_tick() IS NULL );
SELECT diag_test_name( 'sys.check_stuck_tick() - Calls sys.end_tick() if a tick is in progress but there are no updates left' );
SELECT set_eq(
$$ SELECT * FROM end_tick_calls $$ ,
$$ VALUES ( 2 ) $$
);
DELETE FROM end_tick_calls;
UPDATE sys.status SET maintenance_start = NULL , current_tick = 2;
UPDATE sys.updates SET update_state = 'FUTURE' , update_last = 2;
SELECT diag_test_name( 'sys.check_stuck_tick() - Returns tick identifier if a tick is in progress and there are updates left' );
SELECT is( sys.check_stuck_tick() , 2::BIGINT );
SELECT diag_test_name( 'sys.check_stuck_tick() - Does not call sys.end_tick() if a tick is in progress and there are updates left' );
SELECT is_empty( $$ SELECT * FROM end_tick_calls $$ );
SELECT * FROM finish( );
ROLLBACK;