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/010-start-tick.sql
Emmanuel BENOîT 56eddcc4f0 Game updates improvements
* Added a set of tables which define game updates and their targets.
These definitions replace the old enumerate type. Added a set of
triggers which automatically create specific update tables, insert
missing entries, etc... when game update types are being manipulated.

* Removed manual insertion of game updates from empire creation
function and universe generator.

* Added registration of core update targets (i.e. planets and empires),
updated all existing game update processing functions and added type
registrations

* Created Maven project for game updates control components, moved
existing components from the -simple project, rewritten most of what
they contained, added new components for server-side update batch
processing
2012-02-03 16:25:03 +01:00

53 lines
No EOL
1.9 KiB
PL/PgSQL

/*
* 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;