|
[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 |