taskstates_test.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002   tag: Peter Soetens  Mon Jun 26 13:26:02 CEST 2006  generictask_test.cpp
00003 
00004                         generictask_test_3.cpp -  description
00005                            -------------------
00006     begin                : Mon June 26 2006
00007     copyright            : (C) 2006 Peter Soetens
00008     email                : peter.soetens@fmtc.be
00009 
00010  ***************************************************************************
00011  *                                                                         *
00012  *   This program is free software; you can redistribute it and/or modify  *
00013  *   it under the terms of the GNU General Public License as published by  *
00014  *   the Free Software Foundation; either version 2 of the License, or     *
00015  *   (at your option) any later version.                                   *
00016  *                                                                         *
00017  ***************************************************************************/
00018 
00019 #include "unit.hpp"
00020 
00021 #include <iostream>
00022 
00023 #include <TaskContext.hpp>
00024 #include <extras/SlaveActivity.hpp>
00025 #include <extras/SequentialActivity.hpp>
00026 #include <extras/SimulationActivity.hpp>
00027 #include <extras/SimulationThread.hpp>
00028 
00029 #include <boost/function_types/function_type.hpp>
00030 #include <OperationCaller.hpp>
00031 
00032 using namespace std;
00033 using namespace RTT;
00034 using namespace RTT::detail;
00035 
00036 struct A {};
00037 
00038 
00039 // Test TaskContext states.
00040 class StatesTC
00041     : public RTT::TaskContext
00042 {
00043 public:
00044     StatesTC()
00045         : TaskContext("TC", PreOperational)
00046     {
00047         BOOST_CHECK( this->getTaskState() == TaskContext::PreOperational );
00048         BOOST_CHECK( this->getTargetState() == TaskContext::PreOperational );
00049 
00050         this->resetFlags();
00051         validconfig = true;
00052         validstart = true;
00053         do_error = false;
00054         do_fatal = false;
00055         do_throw=false;
00056         do_throw2=false;
00057         do_throw3=false;
00058         do_trigger=false;
00059         do_breakUH=false;
00060         do_block=false;
00061         do_checks=true;
00062         do_stop=false;
00063     }
00064 
00065     void resetFlags()
00066     {
00067         didconfig = false;
00068         didstart = false;
00069         didstop = false;
00070         didcleanup = false;
00071         didupdate = false;
00072         diderror = false;
00073         didexcept = false;
00074         didbreakUH = false;
00075         updatecount=0;
00076         do_stop=false;
00077     }
00078 
00079     bool configureHook() {
00080         if (do_checks) {
00081             BOOST_CHECK( mTaskState <= Stopped );
00082             BOOST_CHECK( getTargetState() == Stopped );
00083         }
00084         didconfig = true;
00085         return validconfig;
00086     }
00087 
00088     bool startHook() {
00089         if (do_checks) {
00090             BOOST_CHECK( mTaskState == Stopped);
00091             BOOST_CHECK( getTargetState() == Running );
00092         }
00093         didstart = true;
00094         return validstart;
00095     }
00096 
00097     void stopHook() {
00098         if (do_checks) {
00099             BOOST_CHECK( mTaskState >= Running || mTaskState == Exception);
00100             BOOST_CHECK( getTargetState() == Stopped || getTargetState() == Exception );
00101         }
00102         didstop = true;
00103     }
00104 
00105     void cleanupHook() {
00106         if (do_checks) {
00107             BOOST_CHECK( mTaskState == Stopped || mTaskState == Exception);
00108             BOOST_CHECK( getTargetState() == PreOperational || getTargetState() == Exception );
00109         }
00110         didcleanup = true;
00111     }
00112 
00113     void exceptionHook() {
00114         if (do_checks) {
00115             BOOST_CHECK( mTaskState == Exception);
00116             BOOST_CHECK( getTargetState() == Exception );
00117         }
00118         didexcept = true;
00119         if (do_throw3)
00120             throw A();
00121     }
00122 
00123     void updateHook() {
00124         if (do_checks) {
00125             BOOST_CHECK( mTaskState == Running );
00126             BOOST_CHECK( getTargetState() == Running );
00127         }
00128         didupdate = true;
00129         updatecount++;
00130         if (do_fatal)
00131             this->fatal();
00132         if (do_error)
00133             this->error();
00134         if (do_throw)
00135             throw A();
00136         if (do_trigger) {
00137             this->trigger();
00138             do_trigger = false; //avoid endless loop
00139         }
00140         if (do_block)
00141             usleep(1*1000*1000);
00142         if (do_stop)
00143             this->stop();
00144     }
00145 
00146     bool breakUpdateHook() {
00147         didbreakUH = true;
00148         return do_breakUH;
00149     }
00150 
00151     void errorHook() {
00152         if (do_checks) {
00153             BOOST_CHECK( mTaskState == RunTimeError );
00154             BOOST_CHECK( getTargetState() == RunTimeError );
00155         }
00156         diderror = true;
00157         if (do_fatal)
00158             this->fatal();
00159         if (do_throw2)
00160             throw A();
00161     }
00162 
00163     bool validconfig, didconfig;
00164     bool validstart, didstart;
00165     bool didstop;
00166     bool didcleanup;
00167     bool didupdate,diderror,didexcept, didbreakUH;
00168     bool do_fatal, do_error, do_throw,do_throw2,do_throw3, do_trigger, do_breakUH, do_block, do_checks, do_stop;
00169     int  updatecount;
00170 };
00171 
00175 class TaskStates_Test
00176 {
00177 public:
00178     TaskContext* tc;
00179     StatesTC* stc;
00180     ActivityInterface* tsim;
00181     ActivityInterface* stsim;
00182 
00183 public:
00184     TaskStates_Test()
00185     {
00186         tc =  new TaskContext( "root", TaskContext::Stopped );
00187         stc = new StatesTC();
00188         tc->setActivity( new SimulationActivity(0.001) );
00189         stc->setActivity( new SimulationActivity(0.001) );
00190         tsim = tc->getActivity();
00191         stsim = stc->getActivity();
00192         SimulationThread::Instance()->stop();
00193     }
00194 
00195     ~TaskStates_Test()
00196     {
00197         tsim->stop();
00198         stsim->stop();
00199         delete tc;
00200         delete stc;
00201     }
00202 };
00203 
00204 
00205 // Registers the fixture into the 'registry'
00206 BOOST_FIXTURE_TEST_SUITE(  TaskStatesSuite,  TaskStates_Test )
00207 
00208 
00209 
00212 BOOST_AUTO_TEST_CASE( testPeriod)
00213 {
00214     // check unconfigured TC
00215     TaskContext pertc("PerTC");
00216     BOOST_CHECK( pertc.getPeriod() == 0.0 );
00217     BOOST_CHECK( pertc.isActive() );
00218 
00219     // check periodic TC
00220     pertc.setActivity( new SlaveActivity(1.0) );
00221     BOOST_CHECK( pertc.engine()->getActivity()->getPeriod() == 1.0 );
00222     BOOST_CHECK( pertc.getPeriod() == 1.0 );
00223 
00224     // check non periodic TC
00225     pertc.setActivity( new SlaveActivity(0.0) );
00226     BOOST_CHECK( pertc.engine()->getActivity()->getPeriod() == 0.0 );
00227     BOOST_CHECK( pertc.getPeriod() == 0.0 );
00228 }
00229 
00233 BOOST_AUTO_TEST_CASE( testTrigger )
00234 {
00235     // Check default TC
00236     StatesTC trigtc;
00237     trigtc.do_checks = false;
00238     BOOST_CHECK( trigtc.getPeriod() == 0.0 );
00239     BOOST_CHECK( trigtc.isActive() );
00240     BOOST_CHECK( trigtc.trigger() == true );
00241     usleep(100*1000);
00242     // don't call updatehook when not running:
00243     BOOST_CHECK_EQUAL( trigtc.updatecount, 0 );
00244 
00245     BOOST_CHECK( trigtc.configure() );
00246     BOOST_CHECK( trigtc.trigger() == true );
00247     usleep(100*1000);
00248     // don't call updatehook when not running:
00249     BOOST_CHECK_EQUAL( trigtc.updatecount, 0 );
00250     BOOST_CHECK( trigtc.start() );
00251     BOOST_CHECK( trigtc.didstart == true );
00252     usleep(100*1000);
00253 
00254     // test updateHook() after start():
00255     BOOST_CHECK_EQUAL( trigtc.updatecount, 1 );
00256 
00257     trigtc.resetFlags();
00258 
00259     // trigger() after start():
00260     BOOST_CHECK( trigtc.trigger() );
00261     usleep(100*1000);
00262     BOOST_CHECK( trigtc.didstart == false );
00263     BOOST_CHECK_EQUAL( trigtc.updatecount, 1 );
00264 
00265     // again:
00266     BOOST_CHECK( trigtc.trigger() );
00267     usleep(100*1000);
00268     BOOST_CHECK_EQUAL( trigtc.updatecount, 2 );
00269 
00270     // this calls trigger() twice: once ourselves,
00271     // and once from updateHook().
00272     trigtc.do_trigger = true;
00273     BOOST_CHECK( trigtc.trigger() );
00274     usleep(100*1000);
00275     BOOST_CHECK_EQUAL( trigtc.updatecount, 4 );
00276     BOOST_CHECK( trigtc.do_trigger == false );
00277 
00278     // Check periodic TC ( rejects trigger() ):
00279     TaskContext pertc("test");
00280     pertc.setPeriod( 0.1 );
00281     BOOST_CHECK_EQUAL( pertc.getPeriod(), 0.1 );
00282     BOOST_CHECK( pertc.trigger() == false );
00283     BOOST_CHECK( pertc.configure() == true );
00284     BOOST_CHECK( pertc.trigger() == false );
00285     BOOST_CHECK( pertc.start() == true );
00286     BOOST_CHECK( pertc.trigger() == false );
00287 }
00288 
00292 BOOST_AUTO_TEST_CASE( testBreakUpdateHook )
00293 {
00294     // Check default TC + blocking updateHook
00295     StatesTC breaktc;
00296     breaktc.do_checks = false;
00297     BOOST_CHECK( breaktc.getPeriod() == 0.0 );
00298     BOOST_CHECK( breaktc.isActive() );
00299     breaktc.do_block = true;
00300     BOOST_CHECK( breaktc.configure() );
00301     BOOST_CHECK( breaktc.start() );
00302     usleep(100*1000);
00303     // we're blocking + breakUpdateHook() == false, so stop() fails:
00304     BOOST_CHECK_EQUAL( breaktc.didupdate, true );
00305     BOOST_CHECK_EQUAL( breaktc.stop(), false );
00306     BOOST_CHECK_EQUAL( breaktc.didbreakUH, true);
00307     BOOST_CHECK_EQUAL( breaktc.didstop, false);
00308     breaktc.didbreakUH = false;
00309     breaktc.do_breakUH = true;
00310     breaktc.do_trigger = true;
00311     // we're blocking *and* implementing breakUpdateHook():
00312     BOOST_CHECK_EQUAL( breaktc.stop(), true );
00313     BOOST_CHECK_EQUAL( breaktc.didbreakUH, true);
00314     BOOST_CHECK_EQUAL( breaktc.didstop, true);
00315 }
00316 
00320 BOOST_AUTO_TEST_CASE( testStopInUpdateHook )
00321 {
00322     // Check default TC + stop in UH
00323     StatesTC breaktc;
00324     breaktc.do_checks = false;
00325     breaktc.do_stop = true;
00326     BOOST_CHECK( breaktc.getPeriod() == 0.0 );
00327     BOOST_CHECK( breaktc.isActive() );
00328     BOOST_CHECK( breaktc.configure() );
00329     BOOST_CHECK( breaktc.start() );
00330     usleep(100*1000);
00331     // check a failed stop() from UH:
00332     breaktc.do_breakUH = false;
00333     BOOST_CHECK_EQUAL( breaktc.didupdate, true );
00334     BOOST_CHECK_EQUAL( breaktc.didbreakUH, true);
00335     BOOST_CHECK_EQUAL( breaktc.didstop, false);
00336     BOOST_CHECK_EQUAL( breaktc.isRunning(), true);
00337 
00338     // check a succesful stop() from UH:
00339     breaktc.do_breakUH = true;
00340     breaktc.didbreakUH = false;
00341     breaktc.didstop = false;
00342     breaktc.didupdate = false;
00343     BOOST_CHECK( breaktc.trigger() );
00344     usleep(100*1000);
00345     BOOST_CHECK_EQUAL( breaktc.didupdate, true );
00346     BOOST_CHECK_EQUAL( breaktc.didbreakUH, true);
00347     BOOST_CHECK_EQUAL( breaktc.didstop, true);
00348     BOOST_CHECK_EQUAL( breaktc.isRunning(), false);
00349 }
00350 
00354 BOOST_AUTO_TEST_CASE( testSetPeriod )
00355 {
00356     TaskContext pertc("test");
00357     BOOST_CHECK( pertc.setPeriod( 0.1 ) );
00358     BOOST_CHECK_EQUAL( pertc.getPeriod(), 0.1 );
00359     BOOST_CHECK( pertc.configure() == true);
00360     BOOST_CHECK( pertc.setPeriod( 0.2 ) );
00361     BOOST_CHECK_EQUAL( pertc.getPeriod(), 0.2 );
00362     BOOST_CHECK( pertc.start() == true );
00363 
00364     BOOST_CHECK( pertc.setPeriod( 0.5 ) );
00365     BOOST_CHECK_EQUAL( pertc.getPeriod(), 0.5 );
00366 }
00367 
00371 BOOST_AUTO_TEST_CASE( testTCStates)
00372 {
00373     // Test the states of a Default TC, no user methods.
00374     BOOST_CHECK( tc->getTaskState() == TaskContext::Stopped );
00375 
00376     // Configure in Stop
00377     BOOST_CHECK( tc->isConfigured() == true );
00378     BOOST_CHECK( tc->isRunning() == false );
00379     BOOST_CHECK( tc->isActive() == true );
00380     BOOST_CHECK( tc->configure() == true );
00381 
00382     // Stop to Running
00383     BOOST_CHECK( tc->start() == true );
00384     BOOST_CHECK( tc->isRunning() == true );
00385     BOOST_CHECK( tc->isActive() == true );
00386     BOOST_CHECK( tc->configure() == false );
00387     BOOST_CHECK( tc->start() == false );
00388     BOOST_CHECK( tc->cleanup() == false );
00389 
00390     // Running to Stop
00391     BOOST_CHECK( tc->stop() == true );
00392     BOOST_CHECK( tc->isRunning() == false);
00393     BOOST_CHECK( tc->isActive() == true );
00394     BOOST_CHECK( tc->stop() == false );
00395     BOOST_CHECK( tc->configure() == true );
00396     BOOST_CHECK( tc->isConfigured() == true );
00397 
00398     // Engine Stop to Active to Stop
00399     BOOST_CHECK( tc->engine()->getActivity()->stop() == true);
00400     BOOST_CHECK( tc->isActive() == false);
00401     BOOST_CHECK( tc->activate() == true );
00402     BOOST_CHECK( tc->isActive() == true);
00403     BOOST_CHECK( tc->isRunning() == false );
00404     BOOST_CHECK( tc->configure() == true );
00405     BOOST_CHECK( tc->isConfigured() == true );
00406 
00407     // Stop to PreOp
00408     BOOST_CHECK( tc->cleanup() == true );
00409     BOOST_CHECK( tc->isConfigured() == false);
00410     BOOST_CHECK( tc->isRunning() == false);
00411 
00412     // PreOp to stop
00413     BOOST_CHECK( tc->configure() == true );
00414     BOOST_CHECK( tc->isConfigured() == true);
00415     BOOST_CHECK( tc->isRunning() == false);
00416     BOOST_CHECK( tc->isActive() == true );
00417 
00418 }
00419 
00423 BOOST_AUTO_TEST_CASE( testSpecialTCStates)
00424 {
00425     // Test the states of a Specially crafted TC, requiring configure etc.
00426     BOOST_CHECK( stc->getTaskState() == TaskContext::PreOperational );
00427 
00428     // PreOperational state:
00429     BOOST_CHECK( stc->configure() == true );
00430     BOOST_CHECK( stc->didconfig == true );
00431     BOOST_CHECK( stc->isConfigured() == true );
00432     // test flags
00433     BOOST_CHECK( stc->didstart == false );
00434     BOOST_CHECK( stc->didupdate == false );
00435     BOOST_CHECK( stc->diderror == false );
00436     BOOST_CHECK( stc->didexcept == false );
00437     BOOST_CHECK( stc->didstop == false );
00438     BOOST_CHECK( stc->didcleanup == false );
00439     stc->resetFlags();
00440 
00441     // Stopped state:
00442     BOOST_CHECK( stc->start() == true );
00443     BOOST_CHECK( stc->didstart == true );
00444     BOOST_CHECK( stc->isRunning() == true );
00445     // test flags
00446     BOOST_CHECK( stc->didconfig == false );
00447     BOOST_CHECK( stc->didupdate == false );
00448     BOOST_CHECK( stc->diderror == false );
00449     BOOST_CHECK( stc->didexcept == false );
00450     BOOST_CHECK( stc->didstop == false );
00451     BOOST_CHECK( stc->didcleanup == false );
00452     stc->resetFlags();
00453 
00454 
00455     // Running state / updateHook :
00456     SimulationThread::Instance()->run(1);
00457     // test flags
00458     BOOST_CHECK( stc->didconfig == false );
00459     BOOST_CHECK( stc->didstart == false );
00460     BOOST_CHECK( stc->didupdate == true );
00461     BOOST_CHECK( stc->diderror == false );
00462     BOOST_CHECK( stc->didexcept == false );
00463     BOOST_CHECK( stc->didstop == false );
00464     BOOST_CHECK( stc->didcleanup == false );
00465     stc->resetFlags();
00466 
00467     // Back to stopped
00468     BOOST_CHECK( stc->stop() == true );
00469     BOOST_CHECK( stc->didstop == true );
00470     BOOST_CHECK( stc->isRunning() == false );
00471     // test flags
00472     BOOST_CHECK( stc->didconfig == false );
00473     BOOST_CHECK( stc->didstart == false );
00474     BOOST_CHECK( stc->didupdate == false );
00475     BOOST_CHECK( stc->diderror == false );
00476     BOOST_CHECK( stc->didexcept == false );
00477     BOOST_CHECK( stc->didcleanup == false );
00478     stc->resetFlags();
00479 
00480     // Reconfigure in stopped
00481     BOOST_CHECK( stc->configure() == true );
00482     BOOST_CHECK( stc->didconfig == true );
00483     BOOST_CHECK( stc->isConfigured() == true );
00484     // test flags
00485     BOOST_CHECK( stc->didstart == false );
00486     BOOST_CHECK( stc->didupdate == false );
00487     BOOST_CHECK( stc->diderror == false );
00488     BOOST_CHECK( stc->didexcept == false );
00489     BOOST_CHECK( stc->didstop == false );
00490     BOOST_CHECK( stc->didcleanup == false );
00491     stc->resetFlags();
00492 
00493     // Stopped to PreOp state:
00494     BOOST_CHECK( stc->cleanup() == true );
00495     BOOST_CHECK( stc->didcleanup == true );
00496     BOOST_CHECK( stc->isConfigured() == false);
00497     // test flags
00498     BOOST_CHECK( stc->didconfig == false );
00499     BOOST_CHECK( stc->didstart == false );
00500     BOOST_CHECK( stc->didupdate == false );
00501     BOOST_CHECK( stc->diderror == false );
00502     BOOST_CHECK( stc->didexcept == false );
00503     BOOST_CHECK( stc->didstop == false );
00504     stc->resetFlags();
00505 }
00506 
00510 BOOST_AUTO_TEST_CASE( testFailingTCStates)
00511 {
00512     // Test the states of a TC failing in transitions
00513     stc->validconfig = false;
00514     stc->validstart = false;
00515 
00516     // Failed configure() in PreOperational state:
00517     BOOST_CHECK( stc->isConfigured() == false );
00518     BOOST_CHECK( stc->isRunning() == false );
00519     BOOST_CHECK( stc->configure() == false );
00520     BOOST_CHECK( stc->didconfig == true );
00521     BOOST_CHECK( stc->isConfigured() == false );
00522     BOOST_CHECK( stc->isRunning() == false );
00523     BOOST_CHECK( stc->isActive() == true );
00524     stc->resetFlags();
00525 
00526     // Retry:
00527     stc->validconfig = true;
00528     BOOST_CHECK( stc->configure() == true );
00529     BOOST_CHECK( stc->didconfig == true );
00530     BOOST_CHECK( stc->isConfigured() == true );
00531     BOOST_CHECK( stc->isRunning() == false );
00532     BOOST_CHECK( stc->isActive() == true );
00533     stc->resetFlags();
00534 
00535     // Failed start() in Stopped state:
00536     BOOST_CHECK( stc->start() == false );
00537     BOOST_CHECK( stc->didstart == true );
00538     BOOST_CHECK( stc->isRunning() == false );
00539     BOOST_CHECK( stc->isActive() == true );
00540     BOOST_CHECK( stc->isConfigured() == true );
00541     stc->resetFlags();
00542 
00543     // Retry:
00544     stc->validstart = true;
00545     BOOST_CHECK( stc->start() == true );
00546     BOOST_CHECK( stc->didstart == true );
00547     BOOST_CHECK( stc->isConfigured() == true );
00548     BOOST_CHECK( stc->isRunning() == true );
00549     BOOST_CHECK( stc->isActive() == true );
00550     stc->resetFlags();
00551 
00552     // Error state by calling error().
00553     stc->do_error = true;
00554     // Running state / updateHook :
00555     SimulationThread::Instance()->run(1);
00556     BOOST_CHECK( stc->inRunTimeError() == true );
00557     BOOST_CHECK( stc->diderror == true );
00558     BOOST_CHECK( stc->didexcept == false );
00559     BOOST_CHECK( stc->isActive() == true );  // still active
00560     stc->resetFlags();
00561     stc->do_error = false;
00562     stc->recover();
00563     SimulationThread::Instance()->run(1);
00564     BOOST_CHECK( stc->isRunning() == true );
00565     BOOST_CHECK( stc->diderror == false );
00566     BOOST_CHECK( stc->didupdate == true );
00567 
00568     // Error state by throwing in updateHook()
00569     stc->do_throw = true;
00570     // Running state / updateHook :
00571     SimulationThread::Instance()->run(1);
00572     BOOST_CHECK( stc->inRunTimeError() == false );
00573     BOOST_CHECK( stc->inException() == true );
00574     BOOST_CHECK( stc->didexcept == true );
00575     BOOST_CHECK( stc->isActive() == true );  // still active
00576     stc->resetFlags();
00577     stc->do_throw = false;
00578     stc->recover();
00579     SimulationThread::Instance()->run(1);
00580     BOOST_CHECK( stc->isConfigured() == false );
00581     BOOST_CHECK( stc->diderror == false );
00582     BOOST_CHECK( stc->didupdate == false );
00583     stc->resetFlags();
00584     stc->configure();
00585     stc->start();
00586 
00587     // Fatal Error state by throwing in exceptionHook()
00588     stc->do_error = false;
00589     stc->do_throw = true;
00590     stc->do_throw3 = true;
00591     // Running state / updateHook :
00592     SimulationThread::Instance()->run(1);
00593     BOOST_CHECK( stc->inRunTimeError() == false );
00594     BOOST_CHECK( stc->inFatalError() == true );
00595     BOOST_CHECK( stc->diderror == false );
00596     BOOST_CHECK( stc->didexcept == true );
00597     BOOST_CHECK( stc->didstop == true );
00598     BOOST_CHECK( stc->didcleanup == true );
00599     BOOST_CHECK( stc->isActive() == false );
00600     BOOST_CHECK( stc->isRunning() == false );
00601     BOOST_CHECK( stc->isConfigured() == false );
00602     stc->resetFlags();
00603 
00604     // Component stuck in fatal error state.
00605     BOOST_CHECK( stc->configure() == false );
00606     BOOST_CHECK( stc->start() == false );
00607 }
00608 
00609 BOOST_AUTO_TEST_CASE( testExecutionEngine)
00610 {
00611     // no owner:
00612     ExecutionEngine ee1(0);
00613     ExecutionEngine ee2(0);
00614 
00615     // test setActivity:
00616     BOOST_CHECK( tsim->stop() );
00617     BOOST_CHECK( tsim->run(&ee1) );
00618     BOOST_CHECK(tsim->start() );
00619     BOOST_CHECK( SimulationThread::Instance()->run(5) );
00620 
00621     // this also tests setActivity:
00622     BOOST_CHECK( tsim->stop() );
00623     BOOST_CHECK( tsim->run(&ee2) );
00624     BOOST_CHECK(tsim->start() );
00625     BOOST_CHECK( SimulationThread::Instance()->run(5) );
00626 
00627     {
00628         TaskCore tc1(&ee2);
00629         TaskCore tc2(&ee2);
00630 
00631         // run with two children.
00632         BOOST_CHECK( SimulationThread::Instance()->run(5) );
00633     }
00634     // children removed again:
00635     BOOST_CHECK( SimulationThread::Instance()->run(5) );
00636     BOOST_CHECK(tsim->stop() );
00637     tsim->run(0);
00638 }
00639 
00640 BOOST_AUTO_TEST_SUITE_END()
00641 


rtt
Author(s): RTT Developers
autogenerated on Wed Aug 26 2015 16:16:19