31 #include <gtest/gtest.h>
32 #include <condition_variable>
54 std::vector<std::string> recipe = {
"timestamp" };
56 parser_->setProtocolVersion(2);
73 std::lock_guard<std::mutex> lk(connect_mutex_);
74 client_fd_ = filedescriptor;
75 connect_cv_.notify_one();
76 connection_callback_ =
true;
81 std::unique_lock<std::mutex> lk(connect_mutex_);
82 if (connect_cv_.wait_for(lk, std::chrono::milliseconds(milliseconds)) == std::cv_status::no_timeout ||
83 connection_callback_ ==
true)
85 connection_callback_ =
false;
94 std::unique_ptr<comm::URStream<rtde_interface::RTDEPackage>>
stream_;
95 std::unique_ptr<rtde_interface::RTDEParser>
parser_;
96 std::unique_ptr<comm::URProducer<rtde_interface::RTDEPackage>>
producer_;
97 std::unique_ptr<comm::Pipeline<rtde_interface::RTDEPackage>>
pipeline_;
109 std::unique_lock<std::mutex> lk(consumed_mutex);
110 if (consumed_cv.wait_for(lk, std::chrono::milliseconds(milliseconds)) == std::cv_status::no_timeout ||
111 consumed_callback ==
true)
113 consumed_callback =
true;
120 virtual bool consume(std::shared_ptr<rtde_interface::RTDEPackage> product)
122 std::lock_guard<std::mutex> lk(consumed_mutex);
125 data->getData(
"timestamp", timestamp);
127 consumed_cv.notify_one();
128 consumed_callback =
true;
132 double timestamp = 0.0;
135 bool consumed_callback =
false;
142 bool connection_callback_ =
false;
147 std::unique_ptr<rtde_interface::RTDEPackage> urpackage;
148 std::chrono::milliseconds timeout{ 100 };
149 EXPECT_EQ(pipeline_->getLatestProduct(urpackage, timeout),
false);
154 waitForConnectionCallback();
158 uint8_t data_package[] = { 0x00, 0x0c, 0x55, 0x01, 0x40, 0xbb, 0xbf, 0xdb, 0xa5, 0xe3, 0x53, 0xf7 };
160 server_->write(client_fd_, data_package,
sizeof(data_package), written);
162 std::unique_ptr<rtde_interface::RTDEPackage> urpackage;
163 std::chrono::milliseconds timeout{ 500 };
164 EXPECT_EQ(pipeline_->getLatestProduct(urpackage, timeout),
true);
168 double expected_timestamp = 7103.8579;
169 data->getData(
"timestamp", timestamp);
170 EXPECT_FLOAT_EQ(timestamp, expected_timestamp);
174 std::cout <<
"Failed to get data package data" << std::endl;
181 waitForConnectionCallback();
185 uint8_t data_package[] = { 0x00, 0x0c, 0x55, 0x01, 0x40, 0xbb, 0xbf, 0xdb, 0xa5, 0xe3, 0x53, 0xf7 };
187 server_->write(client_fd_, data_package,
sizeof(data_package), written);
189 std::unique_ptr<rtde_interface::RTDEPackage> urpackage;
190 std::chrono::milliseconds timeout{ 500 };
192 EXPECT_EQ(pipeline_->getLatestProduct(urpackage, timeout),
true);
197 EXPECT_EQ(pipeline_->getLatestProduct(urpackage, timeout),
false);
204 TestConsumer consumer;
208 waitForConnectionCallback();
212 uint8_t data_package[] = { 0x00, 0x0c, 0x55, 0x01, 0x40, 0xbb, 0xbf, 0xdb, 0xa5, 0xe3, 0x53, 0xf7 };
214 server_->write(client_fd_, data_package,
sizeof(data_package), written);
219 while (consumer.waitForConsumer(500) ==
false)
221 if (count >= max_retries)
225 server_->write(client_fd_, data_package,
sizeof(data_package), written);
228 EXPECT_LT(count, max_retries);
231 double expected_timestamp = 7103.8579;
232 EXPECT_FLOAT_EQ(consumer.timestamp, expected_timestamp);
241 TestConsumer consumer;
245 auto start = std::chrono::system_clock::now();
246 EXPECT_THROW(pipeline_->init(2, std::chrono::milliseconds(500)),
UrException);
247 auto end = std::chrono::system_clock::now();
248 auto elapsed = end - start;
250 EXPECT_LT(elapsed, std::chrono::milliseconds(7500));
253 int main(
int argc,
char* argv[])
255 ::testing::InitGoogleTest(&argc, argv);
257 return RUN_ALL_TESTS();