publish_subscribe.cpp
Go to the documentation of this file.
1 #include "ros/ros.h"
2 #include "std_msgs/String.h"
3 
4 namespace rosserial {
5 #include "rosserial_test/ros.h"
6 #include "rosserial/std_msgs/String.h"
7 }
8 
9 #include <gtest/gtest.h>
10 #include "rosserial_test/fixture.h"
11 #include "rosserial_test/helpers.h"
12 
17 TEST_F(SingleClientFixture, single_publish) {
18  // Rosserial client set up to publish simple message.
19  rosserial::std_msgs::String string_msg;
20  rosserial::ros::Publisher client_pub("chatter", &string_msg);
21  client_nh.advertise(client_pub);
22  client_nh.initNode();
23  char s[] = "from-rosserial-client";
24  string_msg.data = s;
25 
26  // Roscpp subscriber to receive the message from the client.
27  StringCallback str_callback;
28  ros::Subscriber check_sub = nh.subscribe("chatter", 1, &StringCallback::callback, &str_callback);
29 
30  for(int attempt = 0; attempt < 50; attempt++) {
31  client_pub.publish(&string_msg);
32  client_nh.spinOnce();
33  ros::spinOnce();
34  if (str_callback.times_called > 0) break;
35  ros::Duration(0.1).sleep();
36  }
37  EXPECT_GT(str_callback.times_called, 0);
38  EXPECT_STREQ(s, str_callback.last_msg.data.c_str());
39 }
40 
42 std::string last_string;
43 
44 static void rosserial_string_cb(const rosserial::std_msgs::String& msg)
45 {
47  last_string = std::string(msg.data);
48 }
49 
54 TEST_F(SingleClientFixture, single_subscribe) {
55  rosserial::ros::Subscriber<rosserial::std_msgs::String> client_sub("chatter", rosserial_string_cb);
56  client_nh.subscribe(client_sub);
57  client_nh.initNode();
58 
59  ros::Publisher pub = nh.advertise<std_msgs::String>("chatter", 1);
60 
61  std_msgs::String string_msg;
62  string_msg.data = "to-rosserial-client";
63  for(int attempt = 0; attempt < 50; attempt++) {
64  pub.publish(string_msg);
65  ros::spinOnce();
66  client_nh.spinOnce();
67  if (rosserial_string_cb_count > 0) break;
68  ros::Duration(0.1).sleep();
69  }
70  EXPECT_GT(rosserial_string_cb_count, 0);
71  EXPECT_EQ(string_msg.data, last_string);
72 }
73 
74 int main(int argc, char **argv){
75  ros::init(argc, argv, "test_publish_subscribe");
76  ros::start();
77  testing::InitGoogleTest(&argc, argv);
78  return RUN_ALL_TESTS();
79 }
Callback::callback
void callback(const Msg msg)
Definition: helpers.h:9
SingleClientFixture
Definition: fixture.h:75
ros::Publisher
ros::init
ROSCPP_DECL void init(const M_string &remappings, const std::string &name, uint32_t options=0)
ros.h
ros::spinOnce
ROSCPP_DECL void spinOnce()
Msg::data
int data
ros::Publisher::publish
void publish(const boost::shared_ptr< M > &message) const
last_string
std::string last_string
Definition: publish_subscribe.cpp:42
fixture.h
generate_client_ros_lib.s
s
Definition: generate_client_ros_lib.py:54
rosserial_string_cb
static void rosserial_string_cb(const rosserial::std_msgs::String &msg)
Definition: publish_subscribe.cpp:44
rosserial_string_cb_count
int rosserial_string_cb_count
Definition: publish_subscribe.cpp:41
ros.h
argv
argv
helpers.h
Callback::times_called
int times_called
Definition: helpers.h:16
Callback
Definition: helpers.h:3
Callback::last_msg
Msg last_msg
Definition: helpers.h:15
ros::start
ROSCPP_DECL void start()
main
int main(int argc, char **argv)
Definition: publish_subscribe.cpp:74
rosserial
Definition: fixture.h:11
ros::Duration::sleep
bool sleep() const
ros::Duration
ros::Subscriber
TEST_F
TEST_F(SingleClientFixture, single_publish)
Definition: publish_subscribe.cpp:17


rosserial_test
Author(s):
autogenerated on Wed Mar 2 2022 00:58:17