SQL logging fixes

* Added user mapping on the "remote" logging database for the
administrative user. This allows calls to sys.write_sql_log() to succeed
when they are executed by code with administrative privileges.

* Added test suites for both the link to the database and the function
itself.

* Replaced RAISE NOTICE with actual logging in the universe generator
This commit is contained in:
Emmanuel BENOîT 2012-01-07 11:14:17 +01:00
parent e50775ec76
commit 3e109b13bc
9 changed files with 177 additions and 64 deletions
legacyworlds-server-data/db-structure/tests/admin
020-extensions
040-functions/005-logs

View file

@ -0,0 +1,40 @@
/*
* Test the presence and configuration of the dblink
* extension
*/
BEGIN;
SELECT plan( 6 );
SELECT diag_test_name( 'dblink - dblink_connect() exists' );
SELECT has_function( 'dblink_connect' );
SELECT diag_test_name( 'dblink - Foreign data wrapper defined' );
SELECT is( p.proname , 'postgresql_fdw_validator' )
FROM pg_foreign_data_wrapper w
INNER JOIN pg_proc p ON w.fdwvalidator = p.oid
WHERE w.fdwname = 'pgsql';
SELECT diag_test_name( 'dblink - Foreign server defined' );
SELECT is ( w.fdwname , 'pgsql' )
FROM pg_foreign_server s
INNER JOIN pg_foreign_data_wrapper w
ON s.srvfdw = w.oid
WHERE s.srvname = 'srv_logging';
SELECT diag_test_name( 'dblink - Connection' );
SELECT lives_ok(
$$ SELECT dblink_connect( 'cn_logging' , 'srv_logging' ) $$
);
SELECT diag_test_name( 'dblink - Remote user is not the administrator' );
SELECT isnt( username , current_user::TEXT )
FROM dblink( 'cn_logging' , 'SELECT current_user' )
AS ( username TEXT );
SELECT diag_test_name( 'dblink - Disconnection' );
SELECT lives_ok(
$$ SELECT dblink_disconnect( 'cn_logging' ) $$
);
SELECT * FROM finish( );
ROLLBACK;

View file

@ -0,0 +1,32 @@
/*
* Test the sys.write_sql_log( ) function
*/
BEGIN;
DELETE FROM sys.logs;
SELECT plan( 4 );
SELECT diag_test_name( 'sys.write_sql_log( ) - Initial call' );
SELECT lives_ok(
$$ SELECT sys.write_sql_log( 'test' , 'WARNING'::log_level , 'test' ) $$
);
SELECT diag_test_name( 'sys.write_sql_log( ) - Contents of system log after call' );
SELECT is( COUNT(*)::INT , 1 ) FROM sys.logs;
DELETE FROM sys.logs;
SELECT diag_test_name( 'sys.write_sql_log( ) - Two calls in sequence' );
SELECT lives_ok(
$$ SELECT sys.write_sql_log( 'test' , 'WARNING'::log_level , 'test' );
SELECT sys.write_sql_log( 'test' , 'WARNING'::log_level , 'test' ) $$
);
DELETE FROM sys.logs;
SELECT diag_test_name( 'sys.write_sql_log( ) - Calling and rolling back' );
SAVEPOINT before_log;
SELECT sys.write_sql_log( 'test' , 'WARNING'::log_level , 'test' );
SELECT sys.write_log( 'test' , 'WARNING'::log_level , 'test' );
ROLLBACK TO SAVEPOINT before_log;
SELECT is( COUNT(*)::INT , 1 ) FROM sys.logs;
DELETE FROM sys.logs;
SELECT * FROM finish( );
ROLLBACK;