Update Catch and trompeloeil
This updates Catch from 1.x to 2.y, so there's a bunch of
incompatibilities.
Change-Id: I7e03bdd57fb73d786d38349d2c46361e6636890c
Depends-on: https://gerrit.cesnet.cz/c/CzechLight/dependencies/+/1567
diff --git a/tests/wait-a-bit-longer.cpp b/tests/wait-a-bit-longer.cpp
new file mode 100644
index 0000000..029e36f
--- /dev/null
+++ b/tests/wait-a-bit-longer.cpp
@@ -0,0 +1,30 @@
+#include <catch2/catch.hpp>
+#include <chrono>
+#include <thread>
+#include <trompeloeil.hpp>
+
+/** @short Wait until a given sequence of expectation is matched, and then a bit more to ensure that there's silence afterwards */
+void waitForCompletionAndBitMore(const trompeloeil::sequence& seq)
+{
+ using namespace std::literals;
+ using clock = std::chrono::steady_clock;
+
+ // We're busy-waiting a bit
+ const auto waitingStep = 30ms;
+ // Timeout after this much
+ const auto completionTimeout = 5000ms;
+ // When checking for silence afterwards, wait at least this long.
+ // We'll also wait as long as it originally took to process everything.
+ const auto minExtraWait = 100ms;
+
+ auto start = clock::now();
+ while (!seq.is_completed()) {
+ std::this_thread::sleep_for(waitingStep);
+ if (clock::now() - start > completionTimeout) {
+ break;
+ }
+ }
+ REQUIRE(seq.is_completed());
+ auto duration = std::chrono::duration<double>(clock::now() - start);
+ std::this_thread::sleep_for(std::max(duration, decltype(duration)(minExtraWait)));
+}