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);
237 int main(
int argc,
char* argv[])
239 ::testing::InitGoogleTest(&argc, argv);
241 return RUN_ALL_TESTS();
std::mutex connect_mutex_
TEST_F(PipelineTest, get_product_from_stopped_pipeline)
bool waitForConsumer(int milliseconds=100)
std::unique_ptr< comm::Pipeline< rtde_interface::RTDEPackage > > pipeline_
The stream is an abstraction of the TCPSocket that offers reading a full UR data package out of the s...
std::condition_variable consumed_cv_
Wrapper class for a TCP socket server.
int main(int argc, char *argv[])
std::mutex consumed_mutex_
Parent class for for arbitrary consumers.
bool waitForConnectionCallback(int milliseconds=100)
virtual bool consume(std::shared_ptr< rtde_interface::RTDEPackage > product)
Consumes a product, utilizing it's contents.
Parent class for notifiers.
The RTDE specific parser. Interprets a given byte stream as serialized RTDE packages and parses it ac...
std::condition_variable connect_cv_
void connectionCallback(const int filedescriptor)
std::unique_ptr< comm::URStream< rtde_interface::RTDEPackage > > stream_
std::unique_ptr< comm::URProducer< rtde_interface::RTDEPackage > > producer_
The DataPackage class handles communication in the form of RTDE data packages both to and from the ro...
comm::INotifier notifier_
std::unique_ptr< rtde_interface::RTDEParser > parser_
The Pipepline manages the production and optionally consumption of packages. Cyclically the producer ...
A general producer for URPackages. Implements funcionality to produce packages by reading and parsing...
std::unique_ptr< comm::TCPServer > server_