00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <string>
00038 #include <gtest/gtest.h>
00039 #include <ros/ros.h>
00040 #include <boost/thread.hpp>
00041 #include <cstdlib>
00042
00043 #include <pr2_mechanism_msgs/LoadController.h>
00044 #include <pr2_mechanism_msgs/UnloadController.h>
00045 #include <pr2_mechanism_msgs/ListControllers.h>
00046 #include <pr2_mechanism_msgs/SwitchController.h>
00047 #include <sensor_msgs/JointState.h>
00048 #include <pr2_mechanism_msgs/MechanismStatistics.h>
00049 #include <diagnostic_msgs/DiagnosticArray.h>
00050
00051 static const unsigned int _failure = 0;
00052 static const unsigned int _unloaded = 1;
00053 static const unsigned int _stopped = 2;
00054 static const unsigned int _running = 3;
00055
00056
00057 int g_argc;
00058 char** g_argv;
00059
00060 static bool bombardment_started_ = false;
00061
00062
00063 class TestController : public testing::Test
00064 {
00065 public:
00066 ros::NodeHandle node_;
00067 ros::ServiceClient load_srv_, unload_srv_, switch_srv_, list_srv_;
00068 std::string callback1_name_, callback4_name_;
00069 unsigned int callback1_counter_, callback_js_counter_, callback_ms_counter_;
00070 std::vector<ros::Time> callback1_timing_;
00071 unsigned int joint_diagnostic_counter_, controller_diagnostic_counter_;
00072 double callback1_effort_;
00073
00074 void callbackDiagnostic(const diagnostic_msgs::DiagnosticArrayConstPtr& msg)
00075 {
00076 if (!msg->status.empty()){
00077 bool found_joint = false;
00078 bool found_controller = false;
00079 for (unsigned int i=0; i<msg->status.size(); i++){
00080 if (!found_joint && msg->status[i].name.substr(0,5) == "Joint")
00081 joint_diagnostic_counter_++;
00082 if (!found_controller && msg->status[i].name.substr(0,10) == "Controller")
00083 controller_diagnostic_counter_++;
00084 }
00085 }
00086 }
00087
00088 void callbackJs(const sensor_msgs::JointStateConstPtr& msg)
00089 {
00090 if (!msg->name.empty())
00091 callback_js_counter_++;
00092 }
00093
00094 void callbackMs(const pr2_mechanism_msgs::MechanismStatisticsConstPtr& msg)
00095 {
00096 callback_ms_counter_++;
00097 }
00098
00099 void callback1(const sensor_msgs::JointStateConstPtr& msg)
00100 {
00101 if (callback1_counter_ < 1000){
00102 callback1_timing_[callback1_counter_] = ros::Time::now();
00103 }
00104 callback1_name_ = msg->name[0];
00105 callback1_effort_ = msg->effort[0];
00106 callback1_counter_++;
00107 }
00108
00109 void callback4(const sensor_msgs::JointStateConstPtr& msg)
00110 {
00111 callback4_name_ = msg->name[0];
00112 }
00113
00114 bool loadController(const std::string& name)
00115 {
00116
00117 pr2_mechanism_msgs::LoadController srv_msg;
00118 srv_msg.request.name = name;
00119 if (!load_srv_.call(srv_msg)) return false;
00120 return srv_msg.response.ok;
00121 }
00122
00123 bool unloadController(const std::string& name)
00124 {
00125
00126 pr2_mechanism_msgs::UnloadController srv_msg;
00127 srv_msg.request.name = name;
00128 if (!unload_srv_.call(srv_msg)) return false;
00129 return srv_msg.response.ok;
00130 }
00131
00132 bool switchController(const std::vector<std::string>& start, const std::vector<std::string>& stop, int strictness)
00133 {
00134
00135 pr2_mechanism_msgs::SwitchController srv_msg;
00136 srv_msg.request.start_controllers = start;
00137 srv_msg.request.stop_controllers = stop;
00138 srv_msg.request.strictness = strictness;
00139 if (!switch_srv_.call(srv_msg)) return false;
00140 return srv_msg.response.ok;
00141 }
00142
00143 unsigned int nrControllers()
00144 {
00145
00146 pr2_mechanism_msgs::ListControllers srv_msg;
00147 if (!list_srv_.call(srv_msg)) return 0;;
00148 return srv_msg.response.controllers.size();
00149 }
00150
00151 unsigned int controllerState(const std::string& name)
00152 {
00153
00154 pr2_mechanism_msgs::ListControllers srv_msg;
00155 if (!list_srv_.call(srv_msg)) return _failure;
00156 for (unsigned int i=0; i<srv_msg.response.controllers.size(); i++){
00157 if (name == srv_msg.response.controllers[i]){
00158 if (srv_msg.response.state[i] == "running") return _running;
00159 else if (srv_msg.response.state[i] == "stopped") return _stopped;
00160 else return _failure;
00161 }
00162 }
00163 return _unloaded;
00164 }
00165
00166 std::string randomController()
00167 {
00168 unsigned int random = rand();
00169 random = random % 10;
00170 std::stringstream s;
00171 s << random;
00172 return "controller" + s.str();
00173 }
00174
00175 void randomBombardment(unsigned int times)
00176 {
00177 while (!bombardment_started_)
00178 ros::Duration(0.1).sleep();
00179
00180 for (unsigned int i=0; i<times; i++){
00181 unsigned int random = rand();
00182 random = random % 4;
00183 switch (random){
00184 case 0:{
00185 loadController(randomController());
00186 break;
00187 }
00188 case 1:{
00189 unloadController(randomController());
00190 break;
00191 }
00192 case 2:{
00193 std::vector<std::string> start, stop;
00194 unsigned int start_size = rand() %10;
00195 unsigned int stop_size = rand() %10;
00196 for (unsigned int i=0; i<start_size; i++)
00197 start.push_back(randomController());
00198 for (unsigned int i=0; i<stop_size; i++)
00199 stop.push_back(randomController());
00200 if (rand() %1 == 0)
00201 switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT);
00202 else
00203 switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::BEST_EFFORT);
00204 break;
00205 }
00206 case 3:{
00207 controllerState(randomController());
00208 break;
00209 }
00210 }
00211 }
00212 }
00213
00214
00215 protected:
00217 TestController()
00218 : callback1_timing_(1000)
00219 {
00220 }
00221
00223 ~TestController()
00224 {
00225 }
00226
00227 void SetUp()
00228 {
00229 ros::service::waitForService("pr2_controller_manager/load_controller");
00230 ros::service::waitForService("pr2_controller_manager/unload_controller");
00231 ros::service::waitForService("pr2_controller_manager/switch_controller");
00232 ros::service::waitForService("pr2_controller_manager/list_controllers");
00233 ros::service::waitForService("pr2_controller_manager/list_controllers");
00234
00235 load_srv_ = node_.serviceClient<pr2_mechanism_msgs::LoadController>("pr2_controller_manager/load_controller");
00236 unload_srv_ = node_.serviceClient<pr2_mechanism_msgs::UnloadController>("pr2_controller_manager/unload_controller");
00237 switch_srv_ = node_.serviceClient<pr2_mechanism_msgs::SwitchController>("pr2_controller_manager/switch_controller");
00238 list_srv_ = node_.serviceClient<pr2_mechanism_msgs::ListControllers>("pr2_controller_manager/list_controllers");
00239 }
00240
00241 void TearDown()
00242 {
00243 load_srv_.shutdown();
00244 }
00245 };
00246
00247
00248
00249
00250
00251 TEST_F(TestController, spawner)
00252 {
00253
00254 ros::Time start = ros::Time::now();
00255 ros::Duration timeout(60.0);
00256 while (nrControllers() != 6 && ros::Time::now() - start < timeout)
00257 ros::Duration(1.0).sleep();
00258 EXPECT_TRUE(ros::Time::now() - start < timeout);
00259
00260
00261 EXPECT_EQ(controllerState("controller1"), _running);
00262 EXPECT_EQ(controllerState("controller2"), _stopped);
00263 EXPECT_EQ(controllerState("controller3"), _running);
00264 EXPECT_EQ(controllerState("controller4"), _running);
00265 EXPECT_EQ(controllerState("controller5"), _stopped);
00266 EXPECT_EQ(controllerState("controller6"), _stopped);
00267 EXPECT_EQ(controllerState("controller7"), _unloaded);
00268 EXPECT_EQ(controllerState("controller8"), _unloaded);
00269 EXPECT_EQ(controllerState("controller9"), _unloaded);
00270 SUCCEED();
00271 }
00272
00273
00274 TEST_F(TestController, loading)
00275 {
00276
00277 EXPECT_EQ(controllerState("controller1"), _running);
00278 EXPECT_EQ(controllerState("controller2"), _stopped);
00279 EXPECT_EQ(controllerState("controller3"), _running);
00280 EXPECT_EQ(controllerState("controller4"), _running);
00281 EXPECT_EQ(controllerState("controller5"), _stopped);
00282 EXPECT_EQ(controllerState("controller6"), _stopped);
00283 EXPECT_EQ(controllerState("controller7"), _unloaded);
00284 EXPECT_EQ(controllerState("controller8"), _unloaded);
00285 EXPECT_EQ(controllerState("controller9"), _unloaded);
00286
00287
00288 EXPECT_FALSE(loadController("controller1"));
00289 EXPECT_FALSE(loadController("controller2"));
00290 EXPECT_FALSE(loadController("controller3"));
00291 EXPECT_FALSE(loadController("controller4"));
00292 EXPECT_FALSE(loadController("controller5"));
00293 EXPECT_FALSE(loadController("controller6"));
00294
00295
00296 EXPECT_TRUE(loadController("controller7"));
00297
00298
00299 EXPECT_FALSE(loadController("controller9"));
00300 EXPECT_FALSE(loadController("controller11"));
00301 EXPECT_FALSE(loadController("controller12"));
00302 EXPECT_FALSE(loadController("controller13"));
00303 EXPECT_FALSE(loadController("controller14"));
00304 EXPECT_FALSE(loadController("controller15"));
00305 EXPECT_FALSE(loadController("controller16"));
00306 EXPECT_FALSE(loadController("controller17"));
00307 EXPECT_FALSE(loadController("controller18"));
00308 EXPECT_FALSE(loadController("controller19"));
00309
00310
00311 EXPECT_FALSE(loadController("controller10"));
00312
00313
00314 EXPECT_EQ(controllerState("controller1"), _running);
00315 EXPECT_EQ(controllerState("controller2"), _stopped);
00316 EXPECT_EQ(controllerState("controller3"), _running);
00317 EXPECT_EQ(controllerState("controller4"), _running);
00318 EXPECT_EQ(controllerState("controller5"), _stopped);
00319 EXPECT_EQ(controllerState("controller6"), _stopped);
00320 EXPECT_EQ(controllerState("controller7"), _stopped);
00321 EXPECT_EQ(controllerState("controller8"), _unloaded);
00322 EXPECT_EQ(controllerState("controller9"), _unloaded);
00323
00324 SUCCEED();
00325 }
00326
00327 TEST_F(TestController, unloading)
00328 {
00329
00330 EXPECT_EQ(controllerState("controller1"), _running);
00331 EXPECT_EQ(controllerState("controller2"), _stopped);
00332 EXPECT_EQ(controllerState("controller3"), _running);
00333 EXPECT_EQ(controllerState("controller4"), _running);
00334 EXPECT_EQ(controllerState("controller5"), _stopped);
00335 EXPECT_EQ(controllerState("controller6"), _stopped);
00336 EXPECT_EQ(controllerState("controller7"), _stopped);
00337 EXPECT_EQ(controllerState("controller8"), _unloaded);
00338 EXPECT_EQ(controllerState("controller9"), _unloaded);
00339
00340
00341 EXPECT_FALSE(unloadController("controller1"));
00342 EXPECT_FALSE(unloadController("controller3"));
00343 EXPECT_FALSE(unloadController("controller4"));
00344
00345
00346 EXPECT_TRUE(unloadController("controller2"));
00347 EXPECT_TRUE(unloadController("controller5"));
00348 EXPECT_TRUE(unloadController("controller6"));
00349 EXPECT_TRUE(unloadController("controller7"));
00350
00351
00352 EXPECT_FALSE(unloadController("controller8"));
00353
00354
00355 EXPECT_EQ(controllerState("controller1"), _running);
00356 EXPECT_EQ(controllerState("controller2"), _unloaded);
00357 EXPECT_EQ(controllerState("controller3"), _running);
00358 EXPECT_EQ(controllerState("controller4"), _running);
00359 EXPECT_EQ(controllerState("controller5"), _unloaded);
00360 EXPECT_EQ(controllerState("controller6"), _unloaded);
00361 EXPECT_EQ(controllerState("controller7"), _unloaded);
00362 EXPECT_EQ(controllerState("controller8"), _unloaded);
00363 EXPECT_EQ(controllerState("controller9"), _unloaded);
00364
00365 SUCCEED();
00366 }
00367
00368 TEST_F(TestController, start_stop_strict)
00369 {
00370
00371 EXPECT_EQ(controllerState("controller1"), _running);
00372 EXPECT_EQ(controllerState("controller2"), _unloaded);
00373 EXPECT_EQ(controllerState("controller3"), _running);
00374 EXPECT_EQ(controllerState("controller4"), _running);
00375 EXPECT_EQ(controllerState("controller5"), _unloaded);
00376 EXPECT_EQ(controllerState("controller6"), _unloaded);
00377 EXPECT_EQ(controllerState("controller7"), _unloaded);
00378 EXPECT_EQ(controllerState("controller8"), _unloaded);
00379 EXPECT_EQ(controllerState("controller9"), _unloaded);
00380
00381
00382 std::vector<std::string> start, stop;
00383 start.push_back("controller1");
00384 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00385 EXPECT_EQ(controllerState("controller1"), _running);
00386
00387
00388 start.push_back("controller2");
00389 EXPECT_FALSE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00390 EXPECT_EQ(controllerState("controller1"), _running);
00391 EXPECT_EQ(controllerState("controller2"), _unloaded);
00392
00393
00394 EXPECT_TRUE(loadController("controller2"));
00395 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00396 EXPECT_EQ(controllerState("controller1"), _running);
00397 EXPECT_EQ(controllerState("controller2"), _running);
00398
00399
00400 stop.push_back("controller2");
00401 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00402 EXPECT_EQ(controllerState("controller1"), _running);
00403 EXPECT_EQ(controllerState("controller2"), _running);
00404
00405
00406 stop.push_back("controller5");
00407 EXPECT_FALSE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00408 EXPECT_EQ(controllerState("controller1"), _running);
00409 EXPECT_EQ(controllerState("controller2"), _running);
00410 EXPECT_EQ(controllerState("controller5"), _unloaded);
00411
00412
00413 stop.push_back("controller4");
00414 EXPECT_FALSE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00415 EXPECT_EQ(controllerState("controller1"), _running);
00416 EXPECT_EQ(controllerState("controller2"), _running);
00417 EXPECT_EQ(controllerState("controller4"), _running);
00418 EXPECT_EQ(controllerState("controller5"), _unloaded);
00419
00420
00421 EXPECT_TRUE(loadController("controller5"));
00422 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00423 EXPECT_EQ(controllerState("controller1"), _running);
00424 EXPECT_EQ(controllerState("controller2"), _running);
00425 EXPECT_EQ(controllerState("controller4"), _stopped);
00426 EXPECT_EQ(controllerState("controller5"), _stopped);
00427
00428
00429 stop.push_back("controller3");
00430 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::STRICT));
00431 EXPECT_EQ(controllerState("controller1"), _running);
00432 EXPECT_EQ(controllerState("controller2"), _running);
00433 EXPECT_EQ(controllerState("controller3"), _stopped);
00434 EXPECT_EQ(controllerState("controller4"), _stopped);
00435 EXPECT_EQ(controllerState("controller5"), _stopped);
00436
00437 SUCCEED();
00438 }
00439
00440
00441 TEST_F(TestController, start_stop_best_effort)
00442 {
00443
00444 EXPECT_EQ(controllerState("controller1"), _running);
00445 EXPECT_EQ(controllerState("controller2"), _running);
00446 EXPECT_EQ(controllerState("controller3"), _stopped);
00447 EXPECT_EQ(controllerState("controller4"), _stopped);
00448 EXPECT_EQ(controllerState("controller5"), _stopped);
00449 EXPECT_EQ(controllerState("controller6"), _unloaded);
00450 EXPECT_EQ(controllerState("controller7"), _unloaded);
00451 EXPECT_EQ(controllerState("controller8"), _unloaded);
00452 EXPECT_EQ(controllerState("controller9"), _unloaded);
00453
00454
00455 std::vector<std::string> start, stop;
00456 start.push_back("controller1");
00457 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::BEST_EFFORT));
00458 EXPECT_EQ(controllerState("controller1"), _running);
00459
00460
00461 start.push_back("controller3");
00462 start.push_back("controller6");
00463 EXPECT_TRUE(switchController(start, stop, pr2_mechanism_msgs::SwitchController::Request::BEST_EFFORT));
00464 EXPECT_EQ(controllerState("controller1"), _running);
00465 EXPECT_EQ(controllerState("controller3"), _running);
00466 EXPECT_EQ(controllerState("controller6"), _unloaded);
00467
00468 SUCCEED();
00469 }
00470
00471
00472
00473 TEST_F(TestController, service_and_realtime_publisher)
00474 {
00475 EXPECT_EQ(controllerState("controller1"), _running);
00476 EXPECT_EQ(controllerState("controller4"), _stopped);
00477
00478 callback1_timing_.resize(1000);
00479 callback1_counter_ = 0;
00480
00481
00482 ros::Subscriber sub1 = node_.subscribe<sensor_msgs::JointState>("controller1/my_topic", 100,
00483 boost::bind(&TestController_service_and_realtime_publisher_Test::callback1, this, _1));
00484 ros::Subscriber sub4 = node_.subscribe<sensor_msgs::JointState>("controller4/my_topic", 100,
00485 boost::bind(&TestController_service_and_realtime_publisher_Test::callback4, this, _1));
00486
00487 std::string not_started = "not_started";
00488 callback1_name_ = not_started;
00489 callback4_name_ = not_started;
00490
00491 ros::Time start = ros::Time::now();
00492 ros::Duration timeout(5.0);
00493 while (callback1_name_ == "not_started" && ros::Time::now() - start < timeout)
00494 ros::Duration(0.1).sleep();
00495 ros::Duration(1.0).sleep();
00496 EXPECT_EQ(callback1_name_, "");
00497 EXPECT_EQ(callback4_name_, not_started);
00498
00499
00500 for (unsigned int i=0; i<1000; i++){
00501 EXPECT_LE(callback1_effort_, 0.0);
00502 ros::Duration(0.01).sleep();
00503 }
00504
00505 std::string test_message = "Hoe gaat het met Wim?";
00506 ros::ServiceClient srv_client1 = node_.serviceClient<pr2_mechanism_msgs::LoadController>("controller1/my_service");
00507 ros::ServiceClient srv_client4 = node_.serviceClient<pr2_mechanism_msgs::LoadController>("controller1/my_service");
00508 pr2_mechanism_msgs::LoadController srv_msg;
00509 srv_msg.request.name = test_message;
00510 EXPECT_TRUE(srv_client1.call(srv_msg));
00511 EXPECT_TRUE(srv_client4.call(srv_msg));
00512
00513 ros::Duration(1.0).sleep();
00514 EXPECT_EQ(callback1_name_, test_message);
00515 EXPECT_EQ(callback4_name_, not_started);
00516
00517 sub1.shutdown();
00518 sub4.shutdown();
00519
00520 SUCCEED();
00521 }
00522
00523
00524 TEST_F(TestController, publisher_hz)
00525 {
00526 EXPECT_EQ(controllerState("controller1"), _running);
00527
00528
00529 ros::Subscriber sub1 = node_.subscribe<sensor_msgs::JointState>("controller1/my_topic", 100,
00530 boost::bind(&TestController_publisher_hz_Test::callback1, this, _1));
00531
00532 callback1_counter_ = 0;
00533 ros::Time start = ros::Time::now();
00534 ros::Duration timeout(5.0);
00535 while (callback1_counter_ == 0 && ros::Time::now() - start < timeout)
00536 ros::Duration(0.01).sleep();
00537 callback1_counter_ = 0;
00538 ros::Duration(5.0).sleep();
00539
00540 if (callback1_counter_ < 450){
00541 unsigned int nr = callback1_counter_;
00542 ROS_ERROR("Only received %u callbacks between start time %f and end time %f", nr, start.toSec(), ros::Time::now().toSec());
00543 for (unsigned int i=0; i<nr-1; i++){
00544 ROS_ERROR(" - %u: time %f, delta time %f", i, callback1_timing_[i].toSec(), (callback1_timing_[i+1]-callback1_timing_[i]).toSec());
00545 }
00546 }
00547 EXPECT_NEAR(callback1_counter_, 500, 50);
00548
00549 sub1.shutdown();
00550 SUCCEED();
00551 }
00552
00553
00554 TEST_F(TestController, manager_hz)
00555 {
00556
00557 ros::Subscriber sub_js = node_.subscribe<sensor_msgs::JointState>("joint_states", 100,
00558 boost::bind(&TestController_manager_hz_Test::callbackJs, this, _1));
00559 callback_js_counter_ = 0;
00560 ros::Time start = ros::Time::now();
00561 ros::Duration timeout(5.0);
00562 while (callback_js_counter_ == 0 && ros::Time::now() - start < timeout)
00563 ros::Duration(0.1).sleep();
00564 callback_js_counter_ = 0;
00565 ros::Duration(5.0).sleep();
00566 EXPECT_NEAR(callback_js_counter_, 1000, 40);
00567 sub_js.shutdown();
00568
00569
00570 ros::Subscriber sub_ms = node_.subscribe<pr2_mechanism_msgs::MechanismStatistics>("mechanism_statistics", 100,
00571 boost::bind(&TestController_manager_hz_Test::callbackMs, this, _1));
00572 callback_ms_counter_ = 0;
00573 start = ros::Time::now();
00574 while (callback_ms_counter_ == 0 && ros::Time::now() - start < timeout)
00575 ros::Duration(0.1).sleep();
00576 callback_ms_counter_ = 0;
00577 ros::Duration(5.0).sleep();
00578 EXPECT_NEAR(callback_ms_counter_, 10, 2);
00579 sub_ms.shutdown();
00580
00581 SUCCEED();
00582 }
00583
00584
00585 TEST_F(TestController, diagnostic_hz)
00586 {
00587
00588 ros::Subscriber sub_diagnostics = node_.subscribe<diagnostic_msgs::DiagnosticArray>("/diagnostics", 100,
00589 boost::bind(&TestController_manager_hz_Test::callbackDiagnostic, this, _1));
00590 joint_diagnostic_counter_ = 0;
00591 controller_diagnostic_counter_ = 0;
00592 ros::Duration(5.0).sleep();
00593 EXPECT_GT(joint_diagnostic_counter_, (unsigned int)1);
00594 EXPECT_GT(controller_diagnostic_counter_, (unsigned int)1);
00595 sub_diagnostics.shutdown();
00596
00597 SUCCEED();
00598 }
00599
00600
00601
00602 TEST_F(TestController, singlethread_bombardment)
00603 {
00604 bombardment_started_ = true;
00605 randomBombardment(1000);
00606 bombardment_started_ = false;
00607 SUCCEED();
00608 }
00609
00610 TEST_F(TestController, multithread_bombardment)
00611 {
00612 boost::thread bomb1(boost::bind(&TestController_multithread_bombardment_Test::randomBombardment, this, 500));
00613 boost::thread bomb2(boost::bind(&TestController_multithread_bombardment_Test::randomBombardment, this, 500));
00614 boost::thread bomb3(boost::bind(&TestController_multithread_bombardment_Test::randomBombardment, this, 500));
00615 boost::thread bomb4(boost::bind(&TestController_multithread_bombardment_Test::randomBombardment, this, 500));
00616 bombardment_started_ = true;
00617 bomb1.join();
00618 bomb2.join();
00619 bomb3.join();
00620 bomb4.join();
00621
00622 SUCCEED();
00623 }
00624
00625
00626 int main(int argc, char** argv)
00627 {
00628 testing::InitGoogleTest(&argc, argv);
00629 g_argc = argc;
00630 g_argv = argv;
00631
00632 ros::init(g_argc, g_argv, "testControllers");
00633
00634 boost::thread spinner(boost::bind(&ros::spin));
00635
00636 int res = RUN_ALL_TESTS();
00637 spinner.interrupt();
00638 spinner.join();
00639
00640 return res;
00641 }