/** * Check pausing doesn't mark the channel as bad. */ void HealthCheckedConnectionTest::testPauseAndResume() { MockHealthCheckedConnection connection(&socket, &m_ss, heartbeat_interval, options, &m_clock); socket.SetOnData( NewCallback(&connection, &MockHealthCheckedConnection::ReadData)); connection.Setup(); m_ss.AddReadDescriptor(&socket); connection.Setup(); m_ss.RegisterSingleTimeout( TimeInterval(1, 0), NewSingleCallback(this, &HealthCheckedConnectionTest::PauseReading, &connection)); m_ss.RegisterSingleTimeout( TimeInterval(3, 0), NewSingleCallback(this, &HealthCheckedConnectionTest::ResumeReading, &connection)); m_ss.Run(); OLA_ASSERT_TRUE(connection.ChannelOk()); }
/* * Flashes the device */ int main(int argc, char *argv[]) { options opts; opts.log_level = ola::OLA_LOG_WARN; opts.help = false; opts.firmware = DEFAULT_FIRMWARE; opts.device = DEFAULT_DEVICE; ParseOptions(argc, argv, &opts); if (opts.help) DisplayHelpAndExit(argv); ola::InitLogging(opts.log_level, ola::OLA_LOG_STDERR); ifstream firmware_file(opts.firmware.data()); if (!firmware_file.is_open()) { OLA_FATAL << "Can't open the firmware file " << opts.firmware << ": " << strerror(errno); exit(1); } SelectServer ss; ola::io::ConnectedDescriptor *descriptor = ola::plugin::usbpro::BaseUsbProWidget::OpenDevice(opts.device); if (!descriptor) exit(ola::EXIT_UNAVAILABLE); descriptor->SetOnClose(ola::NewSingleCallback(&Stop, &ss)); ss.AddReadDescriptor(descriptor); DispatchingUsbProWidget widget(descriptor, NULL); FirmwareTransferer transferer(&firmware_file, &widget, &ss); widget.SetHandler( ola::NewCallback(&transferer, &FirmwareTransferer::HandleMessage)); if (!transferer.SendReprogram()) { OLA_FATAL << "Send message failed"; exit(1); } ss.RegisterSingleTimeout( PAUSE_DELAY, ola::NewSingleCallback(&transferer, &FirmwareTransferer::StartTransfer)); widget.GetDescriptor()->SetOnClose( ola::NewSingleCallback(&transferer, &FirmwareTransferer::AbortTransfer)); ss.RegisterSingleTimeout( ABORT_TIMEOUT, ola::NewSingleCallback(&transferer, &FirmwareTransferer::AbortTransfer)); ss.Run(); firmware_file.close(); return !transferer.WasSucessfull(); }
/* * Setup the select server */ void TCPConnectorTest::setUp() { ola::InitLogging(ola::OLA_LOG_INFO, ola::OLA_LOG_STDERR); m_ss = new SelectServer(); m_timeout_closure = ola::NewSingleCallback(this, &TCPConnectorTest::Timeout); OLA_ASSERT_TRUE(m_ss->RegisterSingleTimeout(ABORT_TIMEOUT_IN_MS, m_timeout_closure)); }
/* * Check that the loop closures are called. */ void SelectServerTest::testLoopCallbacks() { m_ss->SetDefaultInterval(ola::TimeInterval(0, 100000)); // poll every 100ms m_ss->RunInLoop( ola::NewCallback(this, &SelectServerTest::IncrementLoopCounter)); m_ss->RegisterSingleTimeout( 500, ola::NewSingleCallback(this, &SelectServerTest::Terminate)); m_ss->Run(); // we should have at least 5 calls to IncrementLoopCounter OLA_ASSERT_TRUE(m_loop_counter >= 5); }
/* * Setup the select server */ void SocketTest::setUp() { m_ss = new SelectServer(); m_timeout_closure = ola::NewSingleCallback(this, &SocketTest::Timeout); OLA_ASSERT_TRUE(m_ss->RegisterSingleTimeout(ABORT_TIMEOUT_IN_MS, m_timeout_closure)); #if _WIN32 WSADATA wsa_data; int result = WSAStartup(MAKEWORD(2, 0), &wsa_data); OLA_ASSERT_EQ(result, 0); #endif // _WIN32 }
/* * Setup the select server */ void AdvancedTCPConnectorTest::setUp() { m_tcp_socket_factory.reset(new ola::network::TCPSocketFactory( ola::NewCallback(this, &AdvancedTCPConnectorTest::OnConnect))); m_connected_socket = NULL; ola::InitLogging(ola::OLA_LOG_INFO, ola::OLA_LOG_STDERR); m_ss = new SelectServer(NULL, &m_clock); m_timeout_id = m_ss->RegisterSingleTimeout( ABORT_TIMEOUT_IN_MS, ola::NewSingleCallback(this, &AdvancedTCPConnectorTest::Timeout)); OLA_ASSERT_TRUE(m_timeout_id); }
/* * Setup the select server */ void AdvancedTCPConnectorTest::setUp() { m_tcp_socket_factory.reset(new ola::network::TCPSocketFactory( ola::NewCallback(this, &AdvancedTCPConnectorTest::OnConnect))); m_connected_socket = NULL; ola::InitLogging(ola::OLA_LOG_INFO, ola::OLA_LOG_STDERR); string localhost_str = "127.0.0.1"; CPPUNIT_ASSERT(IPV4Address::FromString(localhost_str, &m_localhost)); m_ss = new SelectServer(NULL, &m_clock); m_timeout_id = m_ss->RegisterSingleTimeout( ABORT_TIMEOUT_IN_MS, ola::NewSingleCallback(this, &AdvancedTCPConnectorTest::Timeout)); CPPUNIT_ASSERT(m_timeout_id); }
/* * Timeout tests */ void SelectServerTest::testTimeout() { // Check a single timeout m_ss->RegisterSingleTimeout( 10, ola::NewSingleCallback(this, &SelectServerTest::SingleIncrementTimeout)); m_ss->RegisterSingleTimeout( 20, ola::NewSingleCallback(this, &SelectServerTest::Terminate)); m_ss->Run(); OLA_ASSERT_EQ(1u, m_timeout_counter); // Now check a timeout that adds another timeout m_timeout_counter = 0; m_ss->RegisterSingleTimeout( 10, ola::NewSingleCallback(this, &SelectServerTest::ReentrantTimeout, m_ss)); m_ss->RegisterSingleTimeout( 20, ola::NewSingleCallback(this, &SelectServerTest::Terminate)); m_ss->Run(); OLA_ASSERT_EQ(2u, m_timeout_counter); // Check repeating timeouts // Some systems (VMs in particular) can't do 10ms resolution so we go for // larger numbers here. m_timeout_counter = 0; m_ss->RegisterRepeatingTimeout( 100, ola::NewCallback(this, &SelectServerTest::IncrementTimeout)); m_ss->RegisterSingleTimeout( 980, ola::NewSingleCallback(this, &SelectServerTest::Terminate)); m_ss->Run(); // This seems to go as low as 7 std::ostringstream str; str << "Timeout counter was " << m_timeout_counter; OLA_ASSERT_TRUE_MSG(m_timeout_counter >= 5 && m_timeout_counter <= 9, str.str()); // Confirm timeouts are removed correctly ola::thread::timeout_id timeout1 = m_ss->RegisterSingleTimeout( 10, ola::NewSingleCallback(this, &SelectServerTest::FatalTimeout)); m_ss->RegisterSingleTimeout( 20, ola::NewSingleCallback(this, &SelectServerTest::Terminate)); m_ss->RemoveTimeout(timeout1); m_ss->Run(); }
/* * Setup the select server */ void AdvancedTCPConnectorTest::setUp() { m_tcp_socket_factory.reset(new ola::network::TCPSocketFactory( ola::NewCallback(this, &AdvancedTCPConnectorTest::OnConnect))); m_connected_socket = NULL; m_ss = new SelectServer(NULL, &m_clock); m_timeout_id = m_ss->RegisterSingleTimeout( ABORT_TIMEOUT_IN_MS, ola::NewSingleCallback(this, &AdvancedTCPConnectorTest::Timeout)); OLA_ASSERT_TRUE(m_timeout_id); #if _WIN32 WSADATA wsa_data; int result = WSAStartup(MAKEWORD(2, 0), &wsa_data); OLA_ASSERT_EQ(result, 0); #endif }
/* * Main. */ int main(int argc, char *argv[]) { ola::AppInit(&argc, argv, "[ options ]", "Decode DMX/RDM data from a Saleae Logic device"); SelectServer ss; LogicReader reader(&ss, FLAGS_sample_rate); DevicesManagerInterface::RegisterOnConnect(&OnConnect, &reader); DevicesManagerInterface::RegisterOnDisconnect(&OnDisconnect, &reader); DevicesManagerInterface::BeginConnect(); OLA_INFO << "Running..."; ss.RegisterSingleTimeout(3000, NewSingleCallback(DisplayReminder, &reader)); ss.Run(); reader.Stop(); return ola::EXIT_OK; }
/* * Test the interaction between read and write descriptor. */ void SelectServerTest::testReadWriteInteraction() { UnixSocket socket; socket.Init(); socket.SetOnClose(NewSingleCallback(this, &SelectServerTest::Terminate)); OLA_ASSERT_TRUE(m_ss->AddReadDescriptor(&socket)); OLA_ASSERT_TRUE(m_ss->AddWriteDescriptor(&socket)); m_ss->RemoveWriteDescriptor(&socket); // now the Write end closes auto_ptr<UnixSocket> other_end(socket.OppositeEnd()); other_end->CloseClient(); m_ss->RegisterSingleTimeout( 100, ola::NewSingleCallback(this, &SelectServerTest::FatalTimeout)); m_ss->Run(); m_ss->RemoveReadDescriptor(&socket); OLA_ASSERT_EQ(1, connected_read_descriptor_count->Get()); OLA_ASSERT_EQ(0, read_descriptor_count->Get()); }