diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2023-10-31 12:03:03 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2023-10-31 12:03:03 -0400 |
commit | 6fb9a4640bad7bc88a52014ce23f7f8ad4a39c23 (patch) | |
tree | c39c9b4257cb6ef046836775fd64b9865c0e3af6 /indra/llcommon/tests/threadsafeschedule_test.cpp | |
parent | f71662225eadf1589f5331e763e02e0bb1b72137 (diff) |
DRTVWR-588: Try to make threadsafequeue timing more robust.
The test was coded to push (what's intended to be) the third entry with
timestamp (now + 200ms), then (what's intended to be) the second entry with
timestamp (now + 100ms).
The trouble is that it was re-querying "now" each time. On a slow CI host, the
clock might have advanced by more than 100ms between the first push and the
second -- meaning that the second push would actually have a _later_
timestamp, and thus, even with the queue sorting properly, fail the test's
order validation.
Capture the timestamp once, then add both time deltas to the same time point
to get the relative order right regardless of elapsed real time.
Diffstat (limited to 'indra/llcommon/tests/threadsafeschedule_test.cpp')
-rw-r--r-- | indra/llcommon/tests/threadsafeschedule_test.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/indra/llcommon/tests/threadsafeschedule_test.cpp b/indra/llcommon/tests/threadsafeschedule_test.cpp index c421cc7b1c..8851590189 100644 --- a/indra/llcommon/tests/threadsafeschedule_test.cpp +++ b/indra/llcommon/tests/threadsafeschedule_test.cpp @@ -46,11 +46,12 @@ namespace tut // the real time required for each push() call. Explicitly increment // the timestamp for each one -- but since we're passing explicit // timestamps, make the queue reorder them. - queue.push(Queue::TimeTuple(Queue::Clock::now() + 200ms, "ghi")); + auto now{ Queue::Clock::now() }; + queue.push(Queue::TimeTuple(now + 200ms, "ghi")); // Given the various push() overloads, you have to match the type // exactly: conversions are ambiguous. queue.push("abc"s); - queue.push(Queue::Clock::now() + 100ms, "def"); + queue.push(now + 100ms, "def"); queue.close(); auto entry = queue.pop(); ensure_equals("failed to pop first", std::get<0>(entry), "abc"s); |