diff --git a/components/net/cpp/test/net_integration.cpp b/components/net/cpp/test/net_integration.cpp index 3f43ceb27c61ed0cce51b3a9c55b4b487915a2b4..040c6db74a4308e0f28597f47e5f886f1c300ff8 100644 --- a/components/net/cpp/test/net_integration.cpp +++ b/components/net/cpp/test/net_integration.cpp @@ -12,6 +12,15 @@ using std::chrono::milliseconds; // --- Support ----------------------------------------------------------------- +static bool try_for(int count, const std::function<bool()> &f) { + int i=count; + while (i-- > 0) { + if (f()) return true; + sleep_for(milliseconds(10)); + } + return false; +} + // --- Tests ------------------------------------------------------------------- TEST_CASE("Universe::connect()", "[net]") { @@ -44,7 +53,7 @@ TEST_CASE("Universe::connect()", "[net]") { auto p = b.connect("http://127.0.0.1:7077"); REQUIRE( !p->isValid() ); - sleep_for(milliseconds(100)); + sleep_for(milliseconds(50)); REQUIRE( a.numberOfPeers() == 0 ); REQUIRE( b.numberOfPeers() == 0 ); @@ -91,8 +100,8 @@ TEST_CASE("Universe::onConnect()", "[net]") { }); b.connect("tcp://localhost:7077")->waitConnection(); - sleep_for(milliseconds(100)); - REQUIRE( done ); + + REQUIRE( try_for(20, [&done]{ return done; }) ); } SECTION("single valid init connection") { @@ -123,10 +132,10 @@ TEST_CASE("Universe::onDisconnect()", "[net]") { Peer *p = b.connect("tcp://localhost:7077"); p->waitConnection(); - sleep_for(milliseconds(100)); + sleep_for(milliseconds(20)); p->close(); - sleep_for(milliseconds(100)); - REQUIRE( done ); + + REQUIRE( try_for(20, [&done]{ return done; }) ); } SECTION("single valid close") { @@ -138,10 +147,10 @@ TEST_CASE("Universe::onDisconnect()", "[net]") { Peer *p = b.connect("tcp://localhost:7077"); p->waitConnection(); - sleep_for(milliseconds(100)); + sleep_for(milliseconds(20)); p->close(); - sleep_for(milliseconds(100)); - REQUIRE( done ); + + REQUIRE( try_for(20, [&done]{ return done; }) ); } } @@ -173,9 +182,7 @@ TEST_CASE("Universe::broadcast()", "[net]") { b.broadcast("hello"); - while (!done) sleep_for(milliseconds(5)); - - REQUIRE( done ); + REQUIRE( try_for(20, [&done]{ return done; }) ); } SECTION("one argument to one peer") { @@ -188,9 +195,7 @@ TEST_CASE("Universe::broadcast()", "[net]") { b.broadcast("hello", 676); - while (done == 0) sleep_for(milliseconds(5)); - - REQUIRE( done == 676 ); + REQUIRE( try_for(20, [&done]{ return done == 676; }) ); } SECTION("one argument to two peers") { @@ -214,10 +219,7 @@ TEST_CASE("Universe::broadcast()", "[net]") { a.broadcast("hello", 676); - sleep_for(milliseconds(100)); - - REQUIRE( done1 == 676 ); - REQUIRE( done2 == 676 ); + REQUIRE( try_for(20, [&done1, &done2]{ return done1 == 676 && done2 == 676; }) ); } }