53 lines
1.9 KiB
MySQL
53 lines
1.9 KiB
MySQL
|
/*
|
||
|
* Test the sys.start_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 );
|
||
|
|
||
|
-- ***** TESTS BEGIN HERE *****
|
||
|
SELECT plan( 5 );
|
||
|
|
||
|
UPDATE sys.status SET maintenance_start = now( ) , current_tick = NULL;
|
||
|
SELECT diag_test_name( 'sys.start_tick() - Ticks do not start if maintenance mode is active' );
|
||
|
SELECT ok( sys.start_tick( ) IS NULL );
|
||
|
|
||
|
UPDATE sys.status SET maintenance_start = NULL , current_tick = next_tick;
|
||
|
SELECT diag_test_name( 'sys.start_tick() - Ticks do not start if current_tick is set' );
|
||
|
SELECT ok( sys.start_tick( ) IS NULL );
|
||
|
|
||
|
UPDATE sys.status SET current_tick = NULL , next_tick = 2;
|
||
|
UPDATE sys.updates SET update_state = 'PROCESSED' , update_last = -1;
|
||
|
UPDATE sys.updates su SET update_last = 514
|
||
|
FROM test.test_updates tu
|
||
|
WHERE su.update_id = tu.update_id
|
||
|
AND tu.test_id = 3;
|
||
|
SELECT diag_test_name( 'sys.start_tick() - Returns next tick identifier when ticks can start' );
|
||
|
SELECT is( sys.start_tick( ) , 2::BIGINT );
|
||
|
SELECT diag_test_name( 'sys.start_tick() - System status is updated' );
|
||
|
SELECT set_eq(
|
||
|
$$ SELECT current_tick , next_tick FROM sys.status $$ ,
|
||
|
$$ VALUES ( 2 , 3 ) $$
|
||
|
);
|
||
|
SELECT diag_test_name( 'sys.start_tick() - Update rows are marked for processing when necessary' );
|
||
|
SELECT set_eq(
|
||
|
$$ SELECT test_id
|
||
|
FROM test.test_updates
|
||
|
INNER JOIN sys.updates
|
||
|
USING ( update_id , updtgt_id , updtype_id )
|
||
|
WHERE update_state = 'FUTURE' AND update_last = 2 $$ ,
|
||
|
$$ VALUES ( 1 ) , ( 2 ) $$
|
||
|
);
|
||
|
|
||
|
SELECT * FROM finish( );
|
||
|
ROLLBACK;
|