[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 15/16] mg-schema-test-database: Safety catch in JobDB database open
When we open the `osstest' database, see whether this is a parent DB (main DB) from which a test DB has been spawned by this user. If it has, bomb out, unless the user has specified a suitable regexp matching the DB name in the env var OSSTEST_DB_USEREAL_IGNORETEST This means that when a test database is in play, the user who created it cannot accidentally operate on the real DB. The safety catch does not affect Tcl programs, which get the DB config directly, but in general that just means sg-execute-flight and sg-run-job which already have a fair amount of safety catch because they demand flight numbers. mg-schema-test-database hits this feature over the head. We assume that the caller of mg-schema-test-database knows what they are doing; particularly, that if they create nested test DBs (!), they do not need the assitance of this feature to stop themselves operating mg-schema-test-database incorrectly. Anyone who creates nested test DBs will hopefully recognise the potential for confusion! Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> --- Osstest/JobDB/Executive.pm | 33 ++++++++++++++++++++++++++++++++- mg-schema-test-database | 2 ++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Osstest/JobDB/Executive.pm b/Osstest/JobDB/Executive.pm index 2572f5f..29dbc6f 100644 --- a/Osstest/JobDB/Executive.pm +++ b/Osstest/JobDB/Executive.pm @@ -51,8 +51,39 @@ sub current_flight ($) { #method return $ENV{'OSSTEST_FLIGHT'}; } +sub _check_testdbs ($) { + my ($dbh) = @_; + + my $re = $ENV{OSSTEST_DB_USEREAL_IGNORETEST} // ''; + return if $re eq '.*'; # needed by mg-schema-test-database during setup + + # mg-schema-test-database creates a task + # xdbref/DBNAME with username ${Username}@ + my $sth = $dbh->prepare(<<END); + SELECT refkey AS dbname, + username, comment + FROM tasks + WHERE type = 'xdbref' + AND live + AND username LIKE (? || '@%') +END + $sth->execute($c{Username}); + my $allok = 1; + while (my $row = $sth->fetchrow_hashref()) { + next if $row->{dbname} =~ m/^$re$/o; + $allok = 0; + print STDERR <<END; +Test DB exists: $row->{dbname} ($row->{username}, "$row->{comment}") +END + } + die "Test dbs exist. Set OSSTEST_DB_USEREAL_IGNORETEST to regexp ?\n" + unless $allok; +} + sub open ($) { #method - return opendb('osstestdb'); + my $dbh = opendb('osstestdb'); + _check_testdbs($dbh); + return $dbh; } sub dbfl_check ($$) { #method diff --git a/mg-schema-test-database b/mg-schema-test-database index b41a99b..90a361b 100755 --- a/mg-schema-test-database +++ b/mg-schema-test-database @@ -47,6 +47,8 @@ cmd="$1"; shift localconfig=local-config.test-database +export OSSTEST_DB_USEREAL_IGNORETEST='.*' + maindbname=$(perl -we ' use Osstest; use Osstest::Executive; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |