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 }
int rosserial_string_cb_count
ROSCPP_DECL void start()
static void rosserial_string_cb(const rosserial::std_msgs::String &msg)
void publish(const boost::shared_ptr< M > &message) const
XmlRpcServer s
bool sleep() const
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
int main(int argc, char **argv)
Msg last_msg
Definition: helpers.h:15
int times_called
Definition: helpers.h:16
std::string last_string
int data
void callback(const Msg msg)
Definition: helpers.h:9
TEST_F(SingleClientFixture, single_publish)
ROSCPP_DECL void spinOnce()


rosserial_test
Author(s):
autogenerated on Fri Jun 7 2019 22:03:01