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 #include <ros/ros.h>
00032 #include <ros/console.h>
00033
00034 #include <gtest/gtest.h>
00035
00036 #include <tf/transform_listener.h>
00037
00038 #include <interactive_markers/interactive_marker_server.h>
00039 #include <interactive_markers/interactive_marker_client.h>
00040
00041 #define DBG_MSG( ... ) printf( __VA_ARGS__ ); printf("\n");
00042 #define DBG_MSG_STREAM( ... ) std::cout << __VA_ARGS__ << std::endl;
00043
00044 using namespace interactive_markers;
00045
00046 struct Msg
00047 {
00048 enum {
00049 INIT,
00050 KEEP_ALIVE,
00051 UPDATE,
00052 POSE,
00053 DELETE,
00054 TF_INFO
00055 } type;
00056
00057 Msg()
00058 {
00059 type = INIT;
00060 seq_num = 0;
00061 }
00062
00063 uint64_t seq_num;
00064
00065 std::string server_id;
00066 std::string frame_id;
00067 ros::Time stamp;
00068
00069 std::vector<std::string> expect_reset_calls;
00070 std::vector<int> expect_init_seq_num;
00071 std::vector<int> expect_update_seq_num;
00072 };
00073
00074 std::string target_frame = "target_frame";
00075
00076
00077 class SequenceTest
00078 {
00079 typedef visualization_msgs::InteractiveMarkerInitConstPtr InitConstPtr;
00080 typedef visualization_msgs::InteractiveMarkerUpdateConstPtr UpdateConstPtr;
00081
00082 std::vector<visualization_msgs::InteractiveMarkerInit> recv_init_msgs;
00083 std::vector<visualization_msgs::InteractiveMarkerUpdate> recv_update_msgs;
00084 std::vector<std::string> recv_reset_calls;
00085
00086 void resetReceivedMsgs()
00087 {
00088 recv_init_msgs.clear();
00089 recv_update_msgs.clear();
00090 recv_reset_calls.clear();
00091 }
00092
00093 void updateCb( const UpdateConstPtr& msg )
00094 {
00095 DBG_MSG_STREAM( "updateCb called." );
00096 recv_update_msgs.push_back( *msg );
00097 }
00098
00099 void initCb( const InitConstPtr& msg )
00100 {
00101 DBG_MSG_STREAM( "initCb called." );
00102 recv_init_msgs.push_back( *msg );
00103 }
00104
00105 void statusCb( InteractiveMarkerClient::StatusT status,
00106 const std::string& server_id,
00107 const std::string& msg )
00108 {
00109 std::string status_string[]={"INFO","WARN","ERROR"};
00110 ASSERT_TRUE( (unsigned)status < 3 );
00111 DBG_MSG_STREAM( "(" << status_string[(unsigned)status] << ") " << server_id << ": " << msg );
00112 }
00113
00114 void resetCb( const std::string& server_id )
00115 {
00116 DBG_MSG_STREAM( "resetCb called." );
00117 recv_reset_calls.push_back(server_id);
00118 }
00119
00120 public:
00121 void test( std::vector<Msg> messages )
00122 {
00123 tf::Transformer tf;
00124
00125
00126
00127
00128
00129 visualization_msgs::InteractiveMarker int_marker;
00130 int_marker.pose.orientation.w=1;
00131
00132 std::string topic_ns ="im_client_test";
00133
00134 interactive_markers::InteractiveMarkerClient client(tf, target_frame, topic_ns );
00135
00136 client.setInitCb( boost::bind(&SequenceTest::initCb, this, _1 ) );
00137 client.setUpdateCb( boost::bind(&SequenceTest::updateCb, this, _1 ) );
00138 client.setResetCb( boost::bind(&SequenceTest::resetCb, this, _1 ) );
00139 client.setStatusCb( boost::bind(&SequenceTest::statusCb, this, _1, _2, _3 ) );
00140
00141 std::map< int, visualization_msgs::InteractiveMarkerInit > sent_init_msgs;
00142 std::map< int, visualization_msgs::InteractiveMarkerUpdate > sent_update_msgs;
00143
00144 for ( size_t i=0; i<messages.size(); i++ )
00145 {
00146 resetReceivedMsgs();
00147
00148 Msg& msg = messages[i];
00149
00150 int_marker.header.frame_id=msg.frame_id;
00151 int_marker.header.stamp=msg.stamp;
00152
00153 std::ostringstream s;
00154 s << i;
00155 int_marker.name=s.str();
00156
00157 switch( msg.type )
00158 {
00159 case Msg::INIT:
00160 {
00161 DBG_MSG_STREAM( i << " INIT: seq_num=" << msg.seq_num << " frame=" << msg.frame_id << " stamp=" << msg.stamp );
00162 visualization_msgs::InteractiveMarkerInitPtr init_msg_out( new visualization_msgs::InteractiveMarkerInit() );
00163 init_msg_out->server_id=msg.server_id;
00164 init_msg_out->seq_num=msg.seq_num;
00165 init_msg_out->markers.push_back( int_marker );
00166 client.processInit( init_msg_out );
00167 sent_init_msgs[msg.seq_num]=*init_msg_out;
00168 break;
00169 }
00170 case Msg::KEEP_ALIVE:
00171 {
00172 DBG_MSG_STREAM( i << " KEEP_ALIVE: seq_num=" << msg.seq_num );
00173 visualization_msgs::InteractiveMarkerUpdatePtr update_msg_out( new visualization_msgs::InteractiveMarkerUpdate() );
00174 update_msg_out->server_id=msg.server_id;
00175 update_msg_out->type = visualization_msgs::InteractiveMarkerUpdate::KEEP_ALIVE;
00176 update_msg_out->seq_num=msg.seq_num;
00177
00178 client.processUpdate( update_msg_out );
00179 sent_update_msgs[msg.seq_num]=*update_msg_out;
00180 break;
00181 }
00182 case Msg::UPDATE:
00183 {
00184 DBG_MSG_STREAM( i << " UPDATE: seq_num=" << msg.seq_num << " frame=" << msg.frame_id << " stamp=" << msg.stamp );
00185 visualization_msgs::InteractiveMarkerUpdatePtr update_msg_out( new visualization_msgs::InteractiveMarkerUpdate() );
00186 update_msg_out->server_id=msg.server_id;
00187 update_msg_out->type = visualization_msgs::InteractiveMarkerUpdate::UPDATE;
00188 update_msg_out->seq_num=msg.seq_num;
00189
00190 update_msg_out->markers.push_back( int_marker );
00191 client.processUpdate( update_msg_out );
00192 sent_update_msgs[msg.seq_num]=*update_msg_out;
00193 break;
00194 }
00195 case Msg::POSE:
00196 {
00197 DBG_MSG_STREAM( i << " POSE: seq_num=" << msg.seq_num << " frame=" << msg.frame_id << " stamp=" << msg.stamp );
00198 visualization_msgs::InteractiveMarkerUpdatePtr update_msg_out( new visualization_msgs::InteractiveMarkerUpdate() );
00199 update_msg_out->server_id=msg.server_id;
00200 update_msg_out->type = visualization_msgs::InteractiveMarkerUpdate::UPDATE;
00201 update_msg_out->seq_num=msg.seq_num;
00202
00203 visualization_msgs::InteractiveMarkerPose pose;
00204 pose.header=int_marker.header;
00205 pose.name=int_marker.name;
00206 pose.pose=int_marker.pose;
00207 update_msg_out->poses.push_back( pose );
00208 client.processUpdate( update_msg_out );
00209 sent_update_msgs[msg.seq_num]=*update_msg_out;
00210 break;
00211 }
00212 case Msg::DELETE:
00213 {
00214 DBG_MSG_STREAM( i << " DELETE: seq_num=" << msg.seq_num );
00215 visualization_msgs::InteractiveMarkerUpdatePtr update_msg_out( new visualization_msgs::InteractiveMarkerUpdate() );
00216 update_msg_out->server_id="/im_client_test/test_server";
00217 update_msg_out->type = visualization_msgs::InteractiveMarkerUpdate::UPDATE;
00218 update_msg_out->seq_num=msg.seq_num;
00219
00220 update_msg_out->erases.push_back( int_marker.name );
00221 client.processUpdate( update_msg_out );
00222 sent_update_msgs[msg.seq_num]=*update_msg_out;
00223 break;
00224 }
00225 case Msg::TF_INFO:
00226 {
00227 DBG_MSG_STREAM( i << " TF_INFO: " << msg.frame_id << " -> " << target_frame << " at time " << msg.stamp.toSec() );
00228 tf::StampedTransform stf;
00229 stf.frame_id_=msg.frame_id;
00230 stf.child_frame_id_=target_frame;
00231 stf.stamp_=msg.stamp;
00232 tf.setTransform( stf, msg.server_id );
00233 break;
00234 }
00235 }
00236
00237
00238
00239
00240
00241
00242
00243 client.update();
00244
00245 ASSERT_EQ( msg.expect_update_seq_num.size(), recv_update_msgs.size() );
00246 ASSERT_EQ( msg.expect_init_seq_num.size(), recv_init_msgs.size() );
00247 ASSERT_EQ( msg.expect_reset_calls.size(), recv_reset_calls.size() );
00248
00249 for ( size_t u=0; u<msg.expect_update_seq_num.size(); u++ )
00250 {
00251 ASSERT_TRUE( sent_update_msgs.find(msg.expect_update_seq_num[u]) != sent_update_msgs.end() );
00252
00253 visualization_msgs::InteractiveMarkerUpdate sent_msg = sent_update_msgs[msg.expect_update_seq_num[u]];
00254 visualization_msgs::InteractiveMarkerUpdate recv_msg = recv_update_msgs[ u ];
00255
00256
00257 ASSERT_EQ( sent_msg.seq_num, msg.expect_update_seq_num[u] );
00258
00259
00260 ASSERT_EQ( recv_msg.seq_num, msg.expect_update_seq_num[u] );
00261
00262
00263 ASSERT_EQ( recv_msg.markers.size(), sent_msg.markers.size() );
00264 ASSERT_EQ( recv_msg.poses.size(), sent_msg.poses.size() );
00265 ASSERT_EQ( recv_msg.erases.size(), sent_msg.erases.size() );
00266
00267
00268
00269 for ( size_t m=0; m<sent_msg.markers.size(); m++ )
00270 {
00271 ASSERT_EQ( recv_msg.markers[m].name, sent_msg.markers[m].name );
00272 ASSERT_EQ( recv_msg.markers[m].header.stamp, sent_msg.markers[m].header.stamp );
00273 if ( sent_msg.markers[m].header.stamp == ros::Time(0) )
00274 {
00275 ASSERT_EQ( target_frame, sent_msg.markers[m].header.frame_id );
00276 }
00277 else
00278 {
00279 ASSERT_EQ( target_frame, recv_msg.markers[m].header.frame_id );
00280 }
00281 }
00282 for ( size_t p=0; p<sent_msg.poses.size(); p++ )
00283 {
00284 ASSERT_EQ( recv_msg.poses[p].name, sent_msg.poses[p].name );
00285 ASSERT_EQ( recv_msg.poses[p].header.stamp, sent_msg.poses[p].header.stamp );
00286 if ( sent_msg.poses[p].header.stamp == ros::Time(0) )
00287 {
00288 ASSERT_EQ( target_frame, sent_msg.poses[p].header.frame_id );
00289 }
00290 else
00291 {
00292 ASSERT_EQ( target_frame, recv_msg.poses[p].header.frame_id );
00293 }
00294 }
00295 for ( size_t e=0; e<sent_msg.erases.size(); e++ )
00296 {
00297 ASSERT_EQ( recv_msg.erases[e], sent_msg.erases[e] );
00298 }
00299 }
00300
00301
00302 for ( size_t u=0; u<msg.expect_init_seq_num.size(); u++ )
00303 {
00304 ASSERT_TRUE( sent_init_msgs.find(msg.expect_init_seq_num[u]) != sent_init_msgs.end() );
00305
00306 visualization_msgs::InteractiveMarkerInit sent_msg = sent_init_msgs[msg.expect_init_seq_num[u]];
00307 visualization_msgs::InteractiveMarkerInit recv_msg = recv_init_msgs[ u ];
00308
00309
00310 ASSERT_EQ( sent_msg.seq_num, msg.expect_init_seq_num[u] );
00311
00312
00313 ASSERT_EQ( recv_msg.seq_num, msg.expect_init_seq_num[u] );
00314
00315
00316 ASSERT_EQ( recv_msg.markers.size(), sent_msg.markers.size() );
00317
00318
00319
00320 for ( size_t m=0; m<sent_msg.markers.size(); m++ )
00321 {
00322 ASSERT_EQ( recv_msg.markers[m].name, sent_msg.markers[m].name );
00323 ASSERT_EQ( recv_msg.markers[m].header.stamp, sent_msg.markers[m].header.stamp );
00324 if ( sent_msg.markers[m].header.stamp == ros::Time(0) )
00325 {
00326
00327 ASSERT_TRUE( tf.canTransform( target_frame, sent_msg.markers[m].header.frame_id, ros::Time(0) ) );
00328 }
00329 else
00330 {
00331
00332 ASSERT_EQ( target_frame, recv_msg.markers[m].header.frame_id );
00333 }
00334 }
00335 }
00336 }
00337 }
00338 };
00339
00340 TEST(InteractiveMarkerClient, init_simple1)
00341 {
00342 Msg msg;
00343
00344 std::vector<Msg> seq;
00345
00346 msg.type=Msg::INIT;
00347 msg.seq_num=0;
00348 msg.server_id="server1";
00349 msg.frame_id=target_frame;
00350 seq.push_back(msg);
00351
00352 msg.type=Msg::KEEP_ALIVE;
00353 msg.expect_init_seq_num.push_back(0);
00354 seq.push_back(msg);
00355
00356 SequenceTest t;
00357 t.test(seq);
00358 }
00359
00360 TEST(InteractiveMarkerClient, init_simple2)
00361 {
00362 Msg msg;
00363
00364 std::vector<Msg> seq;
00365
00366 msg.type=Msg::INIT;
00367 msg.seq_num=0;
00368 msg.server_id="server1";
00369 msg.frame_id=target_frame;
00370 seq.push_back(msg);
00371
00372 msg.type=Msg::UPDATE;
00373 msg.expect_init_seq_num.push_back(0);
00374 seq.push_back(msg);
00375
00376 SequenceTest t;
00377 t.test(seq);
00378 }
00379
00380
00381 TEST(InteractiveMarkerClient, init_many_inits)
00382 {
00383 Msg msg;
00384
00385 std::vector<Msg> seq;
00386
00387 for ( int i=0; i<200; i++ )
00388 {
00389 msg.type=Msg::INIT;
00390 msg.seq_num=i;
00391 msg.server_id="server1";
00392 msg.frame_id=target_frame;
00393 seq.push_back(msg);
00394 }
00395
00396
00397 msg.type=Msg::UPDATE;
00398 msg.expect_init_seq_num.push_back(msg.seq_num);
00399 seq.push_back(msg);
00400
00401
00402 msg.seq_num++;
00403 msg.expect_init_seq_num.clear();
00404 msg.expect_update_seq_num.push_back(msg.seq_num);
00405 seq.push_back(msg);
00406
00407 SequenceTest t;
00408 t.test(seq);
00409 }
00410
00411 TEST(InteractiveMarkerClient, init_many_updates)
00412 {
00413 Msg msg;
00414
00415 std::vector<Msg> seq;
00416
00417 for ( int i=0; i<200; i++ )
00418 {
00419 msg.type=Msg::UPDATE;
00420 msg.seq_num=i;
00421 msg.server_id="server1";
00422 msg.frame_id=target_frame;
00423 seq.push_back(msg);
00424 }
00425
00426 msg.type=Msg::INIT;
00427 msg.seq_num=190;
00428 msg.expect_init_seq_num.push_back(msg.seq_num);
00429 for ( int i=191; i<200; i++ )
00430 {
00431 msg.expect_update_seq_num.push_back(i);
00432 }
00433 seq.push_back(msg);
00434
00435 SequenceTest t;
00436 t.test(seq);
00437 }
00438
00439 TEST(InteractiveMarkerClient, init_invalid_tf)
00440 {
00441 Msg msg;
00442
00443 std::vector<Msg> seq;
00444
00445 msg.type=Msg::INIT;
00446 msg.seq_num=0;
00447 msg.server_id="server1";
00448 msg.frame_id="invalid_frame";
00449 seq.push_back(msg);
00450
00451 msg.type=Msg::INIT;
00452 msg.seq_num=1;
00453 msg.server_id="server1";
00454 msg.frame_id=target_frame;
00455 seq.push_back(msg);
00456
00457 msg.type=Msg::KEEP_ALIVE;
00458 msg.expect_init_seq_num.push_back(1);
00459 seq.push_back(msg);
00460
00461 SequenceTest t;
00462 t.test(seq);
00463 }
00464
00465 TEST(InteractiveMarkerClient, init_wait_tf)
00466 {
00467 Msg msg;
00468
00469 std::vector<Msg> seq;
00470
00471
00472 msg.type=Msg::TF_INFO;
00473 msg.server_id="server1";
00474 msg.frame_id="wait_frame";
00475 msg.stamp=ros::Time(1.0);
00476 seq.push_back(msg);
00477
00478
00479 msg.type=Msg::INIT;
00480 msg.seq_num=0;
00481 msg.stamp=ros::Time(2.0);
00482 seq.push_back(msg);
00483
00484 msg.type=Msg::KEEP_ALIVE;
00485 seq.push_back(msg);
00486
00487
00488 msg.type=Msg::TF_INFO;
00489 msg.expect_init_seq_num.push_back(0);
00490 seq.push_back(msg);
00491
00492
00493 msg.type=Msg::UPDATE;
00494 msg.seq_num=1;
00495 msg.stamp=ros::Time(3.0);
00496 msg.expect_init_seq_num.clear();
00497 seq.push_back(msg);
00498
00499
00500 msg.type=Msg::TF_INFO;
00501 msg.expect_update_seq_num.push_back(1);
00502 seq.push_back(msg);
00503
00504
00505 msg.type=Msg::POSE;
00506 msg.seq_num=2;
00507 msg.stamp=ros::Time(4.0);
00508 msg.expect_update_seq_num.clear();
00509 seq.push_back(msg);
00510
00511
00512 msg.type=Msg::TF_INFO;
00513 msg.expect_update_seq_num.push_back(2);
00514 seq.push_back(msg);
00515
00516 SequenceTest t;
00517 t.test(seq);
00518 }
00519
00520
00521 TEST(InteractiveMarkerClient, init_wait_tf_zerotime)
00522 {
00523 Msg msg;
00524
00525 std::vector<Msg> seq;
00526
00527
00528 msg.type=Msg::INIT;
00529 msg.server_id="server1";
00530 msg.frame_id="wait_frame";
00531 msg.seq_num=0;
00532 msg.stamp=ros::Time(0.0);
00533 seq.push_back(msg);
00534
00535 msg.type=Msg::KEEP_ALIVE;
00536 seq.push_back(msg);
00537
00538
00539 msg.type=Msg::TF_INFO;
00540 msg.stamp=ros::Time(1.0);
00541 msg.expect_init_seq_num.push_back(0);
00542 seq.push_back(msg);
00543
00544 SequenceTest t;
00545 t.test(seq);
00546 }
00547
00548
00549 TEST(InteractiveMarkerClient, init_wait_tf_inverse)
00550 {
00551
00552
00553
00554
00555 Msg msg;
00556
00557 std::vector<Msg> seq;
00558
00559
00560 msg.type=Msg::TF_INFO;
00561 msg.server_id="server1";
00562 msg.frame_id="wait_frame";
00563 msg.stamp=ros::Time(1.0);
00564 seq.push_back(msg);
00565
00566 msg.type=Msg::INIT;
00567 msg.seq_num=0;
00568 msg.stamp=ros::Time(6);
00569 seq.push_back(msg);
00570
00571 msg.type=Msg::INIT;
00572 msg.seq_num=1;
00573 msg.stamp=ros::Time(5);
00574 seq.push_back(msg);
00575
00576 msg.type=Msg::KEEP_ALIVE;
00577 msg.seq_num=0;
00578 seq.push_back(msg);
00579
00580 msg.type=Msg::UPDATE;
00581 msg.seq_num=1;
00582 msg.stamp=ros::Time(5);
00583 seq.push_back(msg);
00584
00585 msg.type=Msg::UPDATE;
00586 msg.seq_num=2;
00587 msg.stamp=ros::Time(4);
00588 seq.push_back(msg);
00589
00590 msg.type=Msg::UPDATE;
00591 msg.seq_num=3;
00592 msg.stamp=ros::Time(3);
00593 seq.push_back(msg);
00594
00595 msg.type=Msg::TF_INFO;
00596 msg.stamp=ros::Time(2);
00597 seq.push_back(msg);
00598
00599 msg.type=Msg::TF_INFO;
00600 msg.stamp=ros::Time(3);
00601 seq.push_back(msg);
00602
00603 msg.type=Msg::TF_INFO;
00604 msg.stamp=ros::Time(4);
00605 seq.push_back(msg);
00606
00607
00608
00609 msg.stamp=ros::Time(5);
00610 msg.expect_init_seq_num.push_back(1);
00611 msg.expect_update_seq_num.push_back(2);
00612 msg.expect_update_seq_num.push_back(3);
00613 seq.push_back(msg);
00614
00615 SequenceTest t;
00616 t.test(seq);
00617 }
00618
00619 TEST(InteractiveMarkerClient, wait_tf_inverse)
00620 {
00621
00622
00623
00624
00625 Msg msg;
00626
00627 std::vector<Msg> seq;
00628
00629
00630 msg.type=Msg::TF_INFO;
00631 msg.server_id="server1";
00632 msg.frame_id="wait_frame";
00633 msg.stamp=ros::Time(1);
00634 seq.push_back(msg);
00635
00636 msg.type=Msg::INIT;
00637 msg.seq_num=0;
00638 seq.push_back(msg);
00639
00640 msg.type=Msg::KEEP_ALIVE;
00641 msg.seq_num=0;
00642 msg.expect_init_seq_num.push_back(0);
00643 seq.push_back(msg);
00644
00645 msg.expect_init_seq_num.clear();
00646
00647
00648
00649 msg.type=Msg::UPDATE;
00650 msg.seq_num=1;
00651 msg.stamp=ros::Time(5);
00652 seq.push_back(msg);
00653
00654 msg.type=Msg::UPDATE;
00655 msg.seq_num=2;
00656 msg.stamp=ros::Time(4);
00657 seq.push_back(msg);
00658
00659 msg.type=Msg::UPDATE;
00660 msg.seq_num=3;
00661 msg.stamp=ros::Time(3);
00662 seq.push_back(msg);
00663
00664 msg.type=Msg::TF_INFO;
00665 msg.stamp=ros::Time(3);
00666 seq.push_back(msg);
00667
00668 msg.type=Msg::TF_INFO;
00669 msg.stamp=ros::Time(4);
00670 seq.push_back(msg);
00671
00672
00673 msg.type=Msg::TF_INFO;
00674 msg.stamp=ros::Time(5);
00675 msg.expect_update_seq_num.push_back(1);
00676 msg.expect_update_seq_num.push_back(2);
00677 msg.expect_update_seq_num.push_back(3);
00678 seq.push_back(msg);
00679
00680 SequenceTest t;
00681 t.test(seq);
00682 }
00683
00684
00685 TEST(InteractiveMarkerClient, wrong_seq_num1)
00686 {
00687 Msg msg;
00688
00689 std::vector<Msg> seq;
00690
00691 msg.type=Msg::INIT;
00692 msg.seq_num=0;
00693 msg.server_id="server1";
00694 msg.frame_id=target_frame;
00695 seq.push_back(msg);
00696
00697 msg.type=Msg::KEEP_ALIVE;
00698 msg.expect_init_seq_num.push_back(0);
00699 seq.push_back(msg);
00700
00701 msg.expect_init_seq_num.clear();
00702
00703 msg.type=Msg::KEEP_ALIVE;
00704 msg.seq_num=1;
00705 msg.expect_reset_calls.push_back(msg.server_id);
00706 seq.push_back(msg);
00707
00708 SequenceTest t;
00709 t.test(seq);
00710 }
00711
00712 TEST(InteractiveMarkerClient, wrong_seq_num2)
00713 {
00714 Msg msg;
00715
00716 std::vector<Msg> seq;
00717
00718 msg.type=Msg::INIT;
00719 msg.seq_num=1;
00720 msg.server_id="server1";
00721 msg.frame_id=target_frame;
00722 seq.push_back(msg);
00723
00724 msg.type=Msg::KEEP_ALIVE;
00725 msg.expect_init_seq_num.push_back(1);
00726 seq.push_back(msg);
00727
00728 msg.expect_init_seq_num.clear();
00729
00730 msg.type=Msg::KEEP_ALIVE;
00731 msg.seq_num=0;
00732 msg.expect_reset_calls.push_back(msg.server_id);
00733 seq.push_back(msg);
00734
00735 SequenceTest t;
00736 t.test(seq);
00737 }
00738
00739 TEST(InteractiveMarkerClient, wrong_seq_num3)
00740 {
00741 Msg msg;
00742
00743 std::vector<Msg> seq;
00744
00745 msg.type=Msg::INIT;
00746 msg.seq_num=1;
00747 msg.server_id="server1";
00748 msg.frame_id=target_frame;
00749 seq.push_back(msg);
00750
00751 msg.type=Msg::KEEP_ALIVE;
00752 msg.expect_init_seq_num.push_back(1);
00753 seq.push_back(msg);
00754
00755 msg.expect_init_seq_num.clear();
00756
00757 msg.type=Msg::UPDATE;
00758 msg.seq_num=1;
00759 msg.expect_reset_calls.push_back(msg.server_id);
00760 seq.push_back(msg);
00761
00762 SequenceTest t;
00763 t.test(seq);
00764 }
00765
00766 TEST(InteractiveMarkerClient, wrong_seq_num4)
00767 {
00768 Msg msg;
00769
00770 std::vector<Msg> seq;
00771
00772 msg.type=Msg::INIT;
00773 msg.seq_num=1;
00774 msg.server_id="server1";
00775 msg.frame_id=target_frame;
00776 seq.push_back(msg);
00777
00778 msg.type=Msg::KEEP_ALIVE;
00779 msg.expect_init_seq_num.push_back(1);
00780 seq.push_back(msg);
00781
00782 msg.expect_init_seq_num.clear();
00783
00784 msg.type=Msg::UPDATE;
00785 msg.seq_num=2;
00786 msg.expect_update_seq_num.push_back(2);
00787 seq.push_back(msg);
00788
00789 msg.expect_update_seq_num.clear();
00790
00791 msg.type=Msg::UPDATE;
00792 msg.seq_num=2;
00793 msg.expect_reset_calls.push_back(msg.server_id);
00794 seq.push_back(msg);
00795
00796 SequenceTest t;
00797 t.test(seq);
00798 }
00799
00800 TEST(InteractiveMarkerClient, wrong_seq_num5)
00801 {
00802 Msg msg;
00803
00804 std::vector<Msg> seq;
00805
00806 msg.type=Msg::INIT;
00807 msg.seq_num=1;
00808 msg.server_id="server1";
00809 msg.frame_id=target_frame;
00810 seq.push_back(msg);
00811
00812 msg.type=Msg::KEEP_ALIVE;
00813 msg.expect_init_seq_num.push_back(1);
00814 seq.push_back(msg);
00815
00816 msg.expect_init_seq_num.clear();
00817
00818 msg.type=Msg::UPDATE;
00819 msg.seq_num=2;
00820 msg.expect_update_seq_num.push_back(2);
00821 seq.push_back(msg);
00822
00823 msg.expect_update_seq_num.clear();
00824
00825 msg.type=Msg::UPDATE;
00826 msg.seq_num=1;
00827 msg.expect_reset_calls.push_back(msg.server_id);
00828 seq.push_back(msg);
00829
00830 SequenceTest t;
00831 t.test(seq);
00832 }
00833
00834 TEST(InteractiveMarkerClient, wrong_seq_num6)
00835 {
00836 Msg msg;
00837
00838 std::vector<Msg> seq;
00839
00840 msg.type=Msg::INIT;
00841 msg.seq_num=1;
00842 msg.server_id="server1";
00843 msg.frame_id=target_frame;
00844 seq.push_back(msg);
00845
00846 msg.type=Msg::KEEP_ALIVE;
00847 msg.expect_init_seq_num.push_back(1);
00848 seq.push_back(msg);
00849
00850 msg.expect_init_seq_num.clear();
00851
00852 msg.type=Msg::UPDATE;
00853 msg.seq_num=2;
00854 msg.expect_update_seq_num.push_back(2);
00855 seq.push_back(msg);
00856
00857 msg.expect_update_seq_num.clear();
00858
00859 msg.type=Msg::UPDATE;
00860 msg.seq_num=4;
00861 msg.expect_reset_calls.push_back(msg.server_id);
00862 seq.push_back(msg);
00863
00864 SequenceTest t;
00865 t.test(seq);
00866 }
00867
00868
00869 TEST(InteractiveMarkerClient, init_twoservers)
00870 {
00871 Msg msg;
00872
00873 std::vector<Msg> seq;
00874
00875 msg.type=Msg::INIT;
00876 msg.seq_num=0;
00877 msg.server_id="server1";
00878 msg.frame_id=target_frame;
00879 seq.push_back(msg);
00880
00881 msg.type=Msg::KEEP_ALIVE;
00882 msg.expect_init_seq_num.push_back(0);
00883 seq.push_back(msg);
00884
00885 msg.expect_init_seq_num.clear();
00886
00887 msg.type=Msg::UPDATE;
00888 msg.seq_num=1;
00889 msg.expect_update_seq_num.push_back(1);
00890 seq.push_back(msg);
00891
00892 msg.expect_update_seq_num.clear();
00893
00894 msg.type=Msg::INIT;
00895 msg.seq_num=0;
00896 msg.server_id="server2";
00897 msg.frame_id=target_frame;
00898 seq.push_back(msg);
00899
00900 msg.type=Msg::KEEP_ALIVE;
00901 msg.expect_init_seq_num.push_back(0);
00902 seq.push_back(msg);
00903
00904 msg.expect_init_seq_num.clear();
00905
00906 msg.type=Msg::UPDATE;
00907 msg.seq_num=1;
00908 msg.expect_update_seq_num.push_back(1);
00909 seq.push_back(msg);
00910
00911 SequenceTest t;
00912 t.test(seq);
00913 }
00914
00915
00916
00917 int main(int argc, char **argv)
00918 {
00919 testing::InitGoogleTest(&argc, argv);
00920 ros::init(argc, argv, "im_client_test");
00921
00922 return RUN_ALL_TESTS();
00923 }