improve and steamline the subsystem testcases

This commit is contained in:
Fischlurch 2009-09-29 02:11:34 +02:00
parent 3b1e2f00a8
commit ad6d5cc7ef
2 changed files with 15 additions and 47 deletions

View file

@ -22,6 +22,7 @@
#include "lib/test/run.hpp" #include "lib/test/run.hpp"
#include "lib/test/test-helper.hpp"
#include "common/subsys.hpp" #include "common/subsys.hpp"
#include "common/subsystem-runner.hpp" #include "common/subsystem-runner.hpp"
#include "common/option.hpp" #include "common/option.hpp"
@ -47,7 +48,7 @@ using backend::Thread;
namespace lumiera { namespace lumiera {
namespace test { namespace test {
namespace { // private test classes and data... namespace { // private test classes and data...
@ -56,7 +57,7 @@ namespace lumiera {
/** limit for the randomly selected duration of /** limit for the randomly selected duration of
* subsystem's running phase (milliseconds) */ * subsystem's running phase (milliseconds) */
const uint MAX_RUNNING_TIME_ms = 80; const uint MAX_RUNNING_TIME_ms = 80;
const uint MIN_RUNNING_TIME_ms = 10; const uint MIN_RUNNING_TIME_ms = 20;
/** the "running" subsystem checks for a /** the "running" subsystem checks for a
* shutdown request every XX milliseconds */ * shutdown request every XX milliseconds */
@ -69,6 +70,8 @@ namespace lumiera {
/** marker for simulated failure exceptions */ /** marker for simulated failure exceptions */
LUMIERA_ERROR_DEFINE( TEST, "simulated failure."); LUMIERA_ERROR_DEFINE( TEST, "simulated failure.");
using error::LUMIERA_ERROR_LOGIC;
@ -294,40 +297,14 @@ namespace lumiera {
MockSys unit1 ("U1", "start(false), run(false)."); MockSys unit1 ("U1", "start(false), run(false).");
MockSys unit2 ("U2", "start(throw), run(false)."); MockSys unit2 ("U2", "start(throw), run(false).");
MockSys unit3 ("U3", "start(fail), run(false)."); // simulates incorrect behaviour MockSys unit3 ("U3", "start(fail), run(false)."); // simulates incorrect behaviour
MockSys unit4 ("U4", "start(true), run(false)."); MockSys unit4 ("U4", "start(true), run(fail)." ); // simulates failure immediately after start
SubsystemRunner runner(dummyOpt); SubsystemRunner runner(dummyOpt);
runner.maybeRun (unit1); // this one doesn't start at all, which isn't considered an error runner.maybeRun (unit1); // this one doesn't start at all, which isn't considered an error
try VERIFY_ERROR (TEST, runner.maybeRun (unit2) );
{ VERIFY_ERROR (LOGIC, runner.maybeRun (unit3) ); // incorrect behaviour trapped
runner.maybeRun (unit2); VERIFY_ERROR (LOGIC, runner.maybeRun (unit4) ); // detected that the subsystem didn't come up
NOTREACHED();
}
catch (lumiera::Error&)
{
ASSERT (lumiera_error() == LUMIERA_ERROR_TEST);
}
try
{
runner.maybeRun (unit3);
NOTREACHED();
}
catch (lumiera::Error&)
{
ASSERT (lumiera_error() == error::LUMIERA_ERROR_LOGIC); // incorrect behaviour trapped
}
try
{
runner.maybeRun (unit4);
}
catch (lumiera::Error&)
{
ASSERT (lumiera_error() == error::LUMIERA_ERROR_LOGIC); // detected that the subsystem didn't come up
} // (due to the way the test subsystem is written,
// this may not always be detected, because there
// is a short time window where isUp_==true )
runner.wait(); runner.wait();
@ -338,7 +315,7 @@ namespace lumiera {
ASSERT (!unit1.didRun()); ASSERT (!unit1.didRun());
ASSERT (!unit2.didRun()); ASSERT (!unit2.didRun());
ASSERT (!unit3.didRun()); ASSERT (!unit3.didRun());
ASSERT (!unit4.didRun()); ASSERT ( unit4.didRun()); // ...but it failed immediately
} }
@ -347,7 +324,7 @@ namespace lumiera {
{ {
cout << "-----singleSubsys_emegency_exit-----\n"; cout << "-----singleSubsys_emegency_exit-----\n";
MockSys unit ("one", "start(true), run(fail)."); MockSys unit ("one", "start(true), run(throw).");
SubsystemRunner runner(dummyOpt); SubsystemRunner runner(dummyOpt);
runner.maybeRun (unit); runner.maybeRun (unit);
@ -409,15 +386,7 @@ namespace lumiera {
unit3.depends (unit2); unit3.depends (unit2);
SubsystemRunner runner(dummyOpt); SubsystemRunner runner(dummyOpt);
try VERIFY_ERROR (LOGIC, runner.maybeRun (unit4) ); // failure to bring up prerequisites is detected
{
runner.maybeRun (unit4);
NOTREACHED();
}
catch (lumiera::Error&)
{
ASSERT (lumiera_error() == error::LUMIERA_ERROR_LOGIC); // failure to bring up prerequisites is detected
}
ASSERT ( unit1.isRunning()); ASSERT ( unit1.isRunning());
ASSERT ( unit2.isRunning()); ASSERT ( unit2.isRunning());
ASSERT (!unit3.isRunning()); ASSERT (!unit3.isRunning());
@ -444,6 +413,4 @@ namespace lumiera {
} // namespace test }} // namespace lumiera::test
} // namespace lumiera

View file

@ -58,7 +58,8 @@ namespace lib {
{ {
Lock guard (this); // note recursive lock Lock guard (this); // note recursive lock
for ( uint i=0, lim=(rand() % MAX_PAUSE); i<lim; ++i); for ( uint i=0, lim=(rand() % MAX_PAUSE); i<lim; ++i)
;
} }
void void