[lvm-devel] master - test: Implement flavours in the runner.
Petr Rockai
mornfall at fedoraproject.org
Thu Feb 5 13:41:14 UTC 2015
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=d27833ba7ca2e6e80a01923e311b263681d4279d
Commit: d27833ba7ca2e6e80a01923e311b263681d4279d
Parent: f3bf89ebcc98a1e03c1687d6b292be3274a9bc8a
Author: Petr Rockai <prockai at redhat.com>
AuthorDate: Fri Jun 27 01:13:14 2014 +0200
Committer: Petr Rockai <prockai at redhat.com>
CommitterDate: Thu Feb 5 13:47:17 2015 +0100
test: Implement flavours in the runner.
---
test/lib/runner.cpp | 56 ++++++++++++++++++++++++++++++++++++--------------
1 files changed, 40 insertions(+), 16 deletions(-)
diff --git a/test/lib/runner.cpp b/test/lib/runner.cpp
index 14c7d9f..1a91738 100644
--- a/test/lib/runner.cpp
+++ b/test/lib/runner.cpp
@@ -60,6 +60,7 @@ bool interrupt = false;
struct Options {
bool verbose, quiet, interactive, cont;
std::string testdir, outdir;
+ std::vector< std::string > flavours;
Options() : verbose( false ), quiet( false ), interactive( false ), cont( false ) {}
};
@@ -105,7 +106,7 @@ struct TestProcess
struct TestCase {
TestProcess child;
- std::string name;
+ std::string name, flavour;
IO io;
struct rusage usage;
@@ -119,6 +120,14 @@ struct TestCase {
Journal *journal;
+ std::string pretty() {
+ return "[" + flavour + "] " + name;
+ }
+
+ std::string id() {
+ return flavour + ":" + name;
+ }
+
void pipe() {
int fds[2];
@@ -164,7 +173,7 @@ struct TestCase {
wait.tv_usec = 500000; /* timeout 0.5s */
if ( !options.verbose && !options.interactive )
- progress( Update ) << tag( "running" ) << name << " " << end - start << std::flush;
+ progress( Update ) << tag( "running" ) << pretty() << " " << end - start << std::flush;
if ( select( io.fd + 1, &set, NULL, NULL, &wait ) <= 0 )
{
@@ -234,8 +243,8 @@ struct TestCase {
close(fd_debuglog);
} */
- journal->done( name, r );
- progress( Last ) << tag( r ) << name << std::endl;
+ journal->done( id(), r );
+ progress( Last ) << tag( r ) << pretty() << std::endl;
}
void run() {
@@ -246,11 +255,12 @@ struct TestCase {
exit(201);
} else if (pid == 0) {
io.close();
+ setenv("LVM_TEST_FLAVOUR", flavour.c_str(), 1);
child.exec();
} else {
::close( child.fd );
- journal->started( name );
- progress( First ) << tag( "running" ) << name << std::flush;
+ journal->started( id() );
+ progress( First ) << tag( "running" ) << pretty() << std::flush;
if ( options.verbose || options.interactive )
progress() << std::endl;
start = time( 0 );
@@ -258,8 +268,8 @@ struct TestCase {
}
}
- TestCase( Journal &j, Options opt, std::string path, std::string name )
- : timeout( false ), silent_ctr( 0 ), child( path ), name( name ), options( opt ), journal( &j )
+ TestCase( Journal &j, Options opt, std::string path, std::string name, std::string flavour )
+ : timeout( false ), child( path ), name( name ), flavour( flavour ), options( opt ), journal( &j )
{
if ( opt.verbose )
io.sinks.push_back( new FdSink( 1 ) );
@@ -271,6 +281,7 @@ struct Main {
time_t start;
typedef std::vector< TestCase > Cases;
+ typedef std::vector< std::string > Flavours;
Journal journal;
Options options;
@@ -280,13 +291,17 @@ struct Main {
Listing l = listdir( options.testdir, true );
std::sort( l.begin(), l.end() );
- for ( Listing::iterator i = l.begin(); i != l.end(); ++i ) {
- if ( i->substr( i->length() - 3, i->length() ) != ".sh" )
- continue;
- if ( i->substr( 0, 4 ) == "lib/" )
- continue;
- cases.push_back( TestCase( journal, options, options.testdir + *i, *i ) );
- cases.back().options = options;
+ for ( Flavours::iterator flav = options.flavours.begin();
+ flav != options.flavours.end(); ++flav ) {
+
+ for ( Listing::iterator i = l.begin(); i != l.end(); ++i ) {
+ if ( i->substr( i->length() - 3, i->length() ) != ".sh" )
+ continue;
+ if ( i->substr( 0, 4 ) == "lib/" )
+ continue;
+ cases.push_back( TestCase( journal, options, options.testdir + *i, *i, *flav ) );
+ cases.back().options = options;
+ }
}
if ( options.cont )
@@ -300,7 +315,7 @@ struct Main {
for ( Cases::iterator i = cases.begin(); i != cases.end(); ++i ) {
- if ( options.cont && journal.done( i->name ) )
+ if ( options.cont && journal.done( i->id() ) )
continue;
i->run();
@@ -316,6 +331,7 @@ struct Main {
journal.banner();
journal.write( options.outdir + "/list" );
+ fsync_name( options.outdir + "/list" );
if ( die || fatal_signal )
exit( 1 );
}
@@ -424,6 +440,14 @@ int main(int argc, char **argv)
opt.interactive = true;
}
+ if ( args.has( "--flavours" ) ) {
+ std::stringstream ss( args.opt( "--flavours" ) );
+ std::string item;
+ while ( std::getline( ss, item, ',' ) )
+ opt.flavours.push_back( item );
+ } else
+ opt.flavours.push_back( "vanilla" );
+
opt.outdir = args.opt( "--outdir" );
opt.testdir = args.opt( "--testdir" );
More information about the lvm-devel
mailing list