create_and_iterate_bag.cpp
Go to the documentation of this file.
1 #include "ros/time.h"
2 #include "rosbag/bag.h"
3 #include "rosbag/view.h"
4 #include "std_msgs/Int8.h"
5 #include "std_msgs/UInt16.h"
6 #include "std_msgs/Int32.h"
7 #include "std_msgs/UInt64.h"
8 #include "std_msgs/String.h"
9 
10 #include <string>
11 #include <vector>
12 
13 #include "boost/foreach.hpp"
14 #include <gtest/gtest.h>
15 
16 template<typename T>
17 T make_std_msg(const typename T::_data_type& data) {
18  T msg;
19  msg.data = data;
20  return msg;
21 }
22 
23 void create_test_bag(const std::string &filename)
24 {
25  rosbag::Bag bag;
26  bag.open(filename, rosbag::bagmode::Write);
27 
28  bag.write("chatter", ros::Time::now(), make_std_msg<std_msgs::String>("foo"));
29  bag.write("numbers", ros::Time::now(), make_std_msg<std_msgs::Int32>(42));
30 
31  bag.close();
32 }
33 
34 void create_a_different_test_bag(const std::string &filename)
35 {
36  rosbag::Bag bag;
37  bag.open(filename, rosbag::bagmode::Write);
38 
39  bag.write("a", ros::Time::now(), make_std_msg<std_msgs::String>("Hello World!"));
40  bag.write("b", ros::Time::now(), make_std_msg<std_msgs::Int8>(1));
41  bag.write("c", ros::Time::now(), make_std_msg<std_msgs::UInt16>(2));
42  bag.write("d", ros::Time::now(), make_std_msg<std_msgs::Int32>(3));
43  bag.write("e", ros::Time::now(), make_std_msg<std_msgs::UInt64>(4));
44 
45  bag.close();
46 }
47 
48 const char* bag_filename = "/tmp/rosbag_storage_create_and_iterate_bag.bag";
49 const char* bag_filename2 = "/tmp/rosbag_storage_create_and_iterate_bag2.bag";
50 
51 TEST(rosbag_storage, iterator_copy_constructor)
52 {
53  // copy ctor
54  rosbag::Bag bag;
56  rosbag::View view(bag, rosbag::TopicQuery("numbers"));
58  EXPECT_EQ(42, it0->instantiate<std_msgs::Int32>()->data);
60  EXPECT_EQ(it0, it1);
61  EXPECT_EQ(42, it1->instantiate<std_msgs::Int32>()->data);
62  ++it1;
63  EXPECT_NE(it0, it1);
64  EXPECT_EQ(42, it0->instantiate<std_msgs::Int32>()->data);
65 }
66 
67 TEST(rosbag_storage, iterator_copy_assignment)
68 {
69  // copy assignment
70  rosbag::Bag bag;
72  rosbag::View view(bag, rosbag::TopicQuery("numbers"));
74  EXPECT_EQ(42, it0->instantiate<std_msgs::Int32>()->data);
76  it1 = it0;
77  EXPECT_EQ(it0, it1);
78  EXPECT_EQ(42, it1->instantiate<std_msgs::Int32>()->data);
79  ++it1;
80  EXPECT_NE(it0, it1);
81  EXPECT_EQ(42, it0->instantiate<std_msgs::Int32>()->data);
82 }
83 
84 TEST(rosbag_storage, iterate_bag)
85 {
86  rosbag::Bag bag;
88 
89  std::vector<std::string> topics;
90  topics.push_back(std::string("chatter"));
91  topics.push_back(std::string("numbers"));
92 
93  rosbag::View view(bag, rosbag::TopicQuery(topics));
94 
95  BOOST_FOREACH(rosbag::MessageInstance const m, view)
96  {
97  std_msgs::String::ConstPtr s = m.instantiate<std_msgs::String>();
98  if (s != NULL)
99  {
100  if(s->data == std::string("foo")) {
101  printf("Successfully checked string foo\n");
102  }
103  else
104  {
105  printf("Failed checked string foo\n");
106  FAIL();
107  }
108  }
109 
110  std_msgs::Int32::ConstPtr i = m.instantiate<std_msgs::Int32>();
111  if (i != NULL)
112  {
113  if (i->data == 42) {
114  printf("Successfully checked value 42\n");
115  }
116  else
117  {
118  printf("Failed checked value 42.\n");
119  FAIL();
120  }
121  }
122  }
123 
124  bag.close();
125 }
126 
127 void serialize_bag(rosbag::Bag& bag, const char* filename)
128 {
129  bag.open(filename);
130 
131  rosbag::View bag_view(bag);
132  std::vector<uint8_t> buffer;
133 
134  BOOST_FOREACH(const rosbag::MessageInstance& msg_instance, bag_view)
135  {
136  const size_t msg_size = msg_instance.size();
137  buffer.resize(msg_size);
138  ros::serialization::OStream stream(buffer.data(), buffer.size());
139  msg_instance.write(stream);
140 
141  printf("reading: %s\n", msg_instance.getTopic().c_str() );
142  }
143  bag.close();
144 }
145 
146 TEST(rosbag_storage, reuse_bag)
147 {
148  rosbag::Bag bag;
149 
152 }
153 
154 int main(int argc, char **argv) {
155  ros::Time::init();
158 
159  testing::InitGoogleTest(&argc, argv);
160  return RUN_ALL_TESTS();
161 }
T make_std_msg(const typename T::_data_type &data)
void serialize_bag(rosbag::Bag &bag, const char *filename)
void create_a_different_test_bag(const std::string &filename)
void create_test_bag(const std::string &filename)
void open(std::string const &filename, uint32_t mode=bagmode::Read)
void close()
const char * bag_filename2
const char * bag_filename
uint32_t size() const
int main(int argc, char **argv)
static void init()
boost::shared_ptr< T > instantiate() const
iterator const_iterator
TEST(rosbag_storage, iterator_copy_constructor)
std::string const & getTopic() const
iterator begin()
static Time now()
void write(std::string const &topic, ros::MessageEvent< T > const &event)
void write(Stream &stream) const


test_rosbag_storage
Author(s):
autogenerated on Sun Feb 3 2019 03:29:50