32
32
#include < ur_client_library/control/reverse_interface.h>
33
33
#include < ur_client_library/comm/tcp_socket.h>
34
34
#include < ur_client_library/exceptions.h>
35
+ #include " ur_client_library/log.h"
35
36
36
37
using namespace urcl ;
38
+ std::mutex g_connection_mutex;
39
+ std::condition_variable g_connection_condition;
40
+
41
+ class TestableReverseInterface : public control ::ReverseInterface
42
+ {
43
+ public:
44
+ TestableReverseInterface (const control::ReverseInterfaceConfig& config) : control::ReverseInterface(config)
45
+ {
46
+ }
47
+
48
+ virtual void connectionCallback (const socket_t filedescriptor)
49
+ {
50
+ control::ReverseInterface::connectionCallback (filedescriptor);
51
+ connected = true ;
52
+ std::lock_guard<std::mutex> lk (g_connection_mutex);
53
+ g_connection_condition.notify_one ();
54
+ }
55
+
56
+ virtual void disconnectionCallback (const socket_t filedescriptor)
57
+ {
58
+ URCL_LOG_DEBUG (" There are %zu disconnection callbacks registered." , disconnect_callbacks_.size ());
59
+ control::ReverseInterface::disconnectionCallback (filedescriptor);
60
+ connected = false ;
61
+ std::lock_guard<std::mutex> lk (g_connection_mutex);
62
+ g_connection_condition.notify_one ();
63
+ }
64
+
65
+ std::atomic<bool > connected = false ;
66
+ };
37
67
38
68
class ReverseIntefaceTest : public ::testing::Test
39
69
{
@@ -153,8 +183,11 @@ class ReverseIntefaceTest : public ::testing::Test
153
183
control::ReverseInterfaceConfig config;
154
184
config.port = 50001 ;
155
185
config.handle_program_state = std::bind (&ReverseIntefaceTest::handleProgramState, this , std::placeholders::_1);
156
- reverse_interface_.reset (new control::ReverseInterface (config));
186
+ reverse_interface_.reset (new TestableReverseInterface (config));
157
187
client_.reset (new Client (50001 ));
188
+ std::unique_lock<std::mutex> lk (g_connection_mutex);
189
+ g_connection_condition.wait_for (lk, std::chrono::seconds (1 ),
190
+ [&]() { return reverse_interface_->connected .load (); });
158
191
}
159
192
160
193
void TearDown ()
@@ -187,7 +220,7 @@ class ReverseIntefaceTest : public ::testing::Test
187
220
return false ;
188
221
}
189
222
190
- std::unique_ptr<control::ReverseInterface > reverse_interface_;
223
+ std::unique_ptr<TestableReverseInterface > reverse_interface_;
191
224
std::unique_ptr<Client> client_;
192
225
193
226
private:
@@ -473,7 +506,8 @@ TEST_F(ReverseIntefaceTest, disconnected_callbacks_are_called)
473
506
// Close the client connection
474
507
client_->close ();
475
508
EXPECT_TRUE (waitForProgramState (1000 , false ));
476
- sleep (1 );
509
+ std::unique_lock<std::mutex> lk (g_connection_mutex);
510
+ g_connection_condition.wait_for (lk, std::chrono::seconds (1 ), [&]() { return !reverse_interface_->connected .load (); });
477
511
EXPECT_TRUE (disconnect_called_1);
478
512
EXPECT_TRUE (disconnect_called_2);
479
513
@@ -484,7 +518,7 @@ TEST_F(ReverseIntefaceTest, disconnected_callbacks_are_called)
484
518
EXPECT_TRUE (waitForProgramState (1000 , true ));
485
519
reverse_interface_->unregisterDisconnectionCallback (disconnection_callback_id_1);
486
520
client_->close ();
487
- sleep ( 1 );
521
+ g_connection_condition. wait_for (lk, std::chrono::seconds ( 1 ), [&]() { return !reverse_interface_-> connected . load (); } );
488
522
EXPECT_TRUE (waitForProgramState (1000 , false ));
489
523
EXPECT_FALSE (disconnect_called_1);
490
524
EXPECT_TRUE (disconnect_called_2);
@@ -496,7 +530,7 @@ TEST_F(ReverseIntefaceTest, disconnected_callbacks_are_called)
496
530
EXPECT_TRUE (waitForProgramState (1000 , true ));
497
531
reverse_interface_->unregisterDisconnectionCallback (disconnection_callback_id_2);
498
532
client_->close ();
499
- sleep ( 1 );
533
+ g_connection_condition. wait_for (lk, std::chrono::seconds ( 1 ), [&]() { return !reverse_interface_-> connected . load (); } );
500
534
EXPECT_TRUE (waitForProgramState (1000 , false ));
501
535
EXPECT_FALSE (disconnect_called_1);
502
536
EXPECT_FALSE (disconnect_called_2);
@@ -505,6 +539,7 @@ TEST_F(ReverseIntefaceTest, disconnected_callbacks_are_called)
505
539
int main (int argc, char * argv[])
506
540
{
507
541
::testing::InitGoogleTest (&argc, argv);
542
+ urcl::setLogLevel (LogLevel::INFO);
508
543
509
544
return RUN_ALL_TESTS ();
510
- }
545
+ }
0 commit comments