/* * 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(); }
int main(int argc, char* argv[]) { ola::AppInit(&argc, argv, "", "Run the E1.31 load test."); if (FLAGS_universes == 0 || FLAGS_fps == 0) return -1; unsigned int fps = min(1000u, static_cast<unsigned int>(FLAGS_fps)); uint16_t universes = FLAGS_universes; DmxBuffer output; output.Blackout(); Interface iface; { auto_ptr<InterfacePicker> picker(InterfacePicker::NewPicker()); if (!picker->ChooseInterface(&iface, FLAGS_interface.str())) { return -1; } } ArtNetNodeOptions options; options.always_broadcast = true; SelectServer ss; ArtNetNode node(iface, &ss, options); for (uint16_t i = 0; i < universes; i++) { if (!node.SetInputPortUniverse(i, i)) { OLA_WARN << "Failed to set port"; } } if (!node.Start()) return -1; ss.RegisterRepeatingTimeout( 1000 / fps, NewCallback(&SendFrames, &node, &output, universes)); cout << "Starting loadtester: " << universes << " universe(s), " << fps << " fps" << endl; ss.Run(); }