@@ -450,9 +450,61 @@ TEST_F(ReverseIntefaceTest, deprecated_set_keep_alive_count)
450450 EXPECT_EQ (expected_read_timeout, received_read_timeout);
451451}
452452
453+ TEST_F (ReverseIntefaceTest, disconnected_callbacks_are_called)
454+ {
455+ // Wait for the client to connect to the server
456+ EXPECT_TRUE (waitForProgramState (1000 , true ));
457+
458+ std::atomic<bool > disconnect_called_1 = false ;
459+ std::atomic<bool > disconnect_called_2 = false ;
460+
461+ // Register disconnection callbacks
462+ int disconnection_callback_id_1 =
463+ reverse_interface_->registerDisconnectionCallback ([&disconnect_called_1](const int fd) {
464+ std::cout << " Disconnection 1 callback called with fd: " << fd << std::endl;
465+ disconnect_called_1 = true ;
466+ });
467+ int disconnection_callback_id_2 =
468+ reverse_interface_->registerDisconnectionCallback ([&disconnect_called_2](const int fd) {
469+ std::cout << " Disconnection 2 callback called with fd: " << fd << std::endl;
470+ disconnect_called_2 = true ;
471+ });
472+
473+ // Close the client connection
474+ client_->close ();
475+ EXPECT_TRUE (waitForProgramState (1000 , false ));
476+ sleep (1 );
477+ EXPECT_TRUE (disconnect_called_1);
478+ EXPECT_TRUE (disconnect_called_2);
479+
480+ // Unregister 1. 2 should still be called
481+ disconnect_called_1 = false ;
482+ disconnect_called_2 = false ;
483+ client_.reset (new Client (50001 ));
484+ EXPECT_TRUE (waitForProgramState (1000 , true ));
485+ reverse_interface_->unregisterDisconnectionCallback (disconnection_callback_id_1);
486+ client_->close ();
487+ sleep (1 );
488+ EXPECT_TRUE (waitForProgramState (1000 , false ));
489+ EXPECT_FALSE (disconnect_called_1);
490+ EXPECT_TRUE (disconnect_called_2);
491+
492+ // Unregister both. None should be called
493+ disconnect_called_1 = false ;
494+ disconnect_called_2 = false ;
495+ client_.reset (new Client (50001 ));
496+ EXPECT_TRUE (waitForProgramState (1000 , true ));
497+ reverse_interface_->unregisterDisconnectionCallback (disconnection_callback_id_2);
498+ client_->close ();
499+ sleep (1 );
500+ EXPECT_TRUE (waitForProgramState (1000 , false ));
501+ EXPECT_FALSE (disconnect_called_1);
502+ EXPECT_FALSE (disconnect_called_2);
503+ }
504+
453505int main (int argc, char * argv[])
454506{
455507 ::testing::InitGoogleTest (&argc, argv);
456508
457509 return RUN_ALL_TESTS ();
458- }
510+ }
0 commit comments