tests: don't sleep for 5 seconds in IceTest::setUp

We do need to wait for the DHT's public address to become available
after bootstrapping it before we can start the tests, but 5 seconds is
much longer than typically necessary.

Change-Id: I1c1094eafbe9c81767439009ba751b69cae24d08
diff --git a/tests/ice.cpp b/tests/ice.cpp
index 32928af..c2c1304 100644
--- a/tests/ice.cpp
+++ b/tests/ice.cpp
@@ -26,6 +26,7 @@
 #include <asio/io_context.hpp>
 
 #include "opendht/dhtrunner.h"
+#include "opendht/sockaddr.h"
 #include "opendht/thread_pool.h"
 #include "test_runner.h"
 #include "upnp/upnp_context.h"
@@ -82,9 +83,22 @@
         dht_ = std::make_shared<dht::DhtRunner>();
         dht::DhtRunner::Config config {};
         dht::DhtRunner::Context context {};
+
+        std::mutex mtx;
+        std::unique_lock lk(mtx);
+        std::condition_variable cv;
+        context.publicAddressChangedCb = [&](std::vector<dht::SockAddr> addr) {
+            if (addr.size() != 0)
+                cv.notify_all();
+        };
+
         dht_->run(0, config, std::move(context));
         dht_->bootstrap("bootstrap.jami.net:4222");
-        std::this_thread::sleep_for(std::chrono::seconds(5));
+        // Wait for the DHT's public address to be available, otherwise the assertion that
+        // `addr4.size() != 0` at the beginning of several of the tests will fail.
+        cv.wait_for(lk, std::chrono::seconds(5), [&] {
+            return dht_->getPublicAddress().size() != 0;
+        });
     }
     if (!turnV4_) {
         turnV4_ = std::make_unique<dhtnet::IpAddr>("turn.jami.net", AF_INET);