<p>Pau Espin Pedrol has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12282">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">TimevalTest: Make test deterministic with fake time<br><br>Change-Id: I74e577a0142fb6d1ef3630e02aff9910b191bff9<br>---<br>M tests/CommonLibs/TimevalTest.cpp<br>1 file changed, 18 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/82/12282/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/CommonLibs/TimevalTest.cpp b/tests/CommonLibs/TimevalTest.cpp</span><br><span>index 61a92c9..b822982 100644</span><br><span>--- a/tests/CommonLibs/TimevalTest.cpp</span><br><span>+++ b/tests/CommonLibs/TimevalTest.cpp</span><br><span>@@ -31,34 +31,45 @@</span><br><span> #include <assert.h></span><br><span> #include <sys/time.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+extern "C" {</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/timer.h></span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> using namespace std;</span><br><span> </span><br><span> int main(int argc, char *argv[])</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       long last_remaining = 10000;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_clock_override_enable(CLOCK_REALTIME, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   struct timespec *clk = osmo_clock_override_gettimespec(CLOCK_REALTIME);</span><br><span style="color: hsl(120, 100%, 40%);">+       clk->tv_sec = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   clk->tv_nsec = 1000;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     long last_remaining = 10000; /*10 sec */</span><br><span>     Timeval then(last_remaining);</span><br><span>        assert(then.elapsed() == -last_remaining);</span><br><span>   cerr << then << " elapsed: " << then.elapsed() << endl;</span><br><span> </span><br><span>        /* Check that last_remaining parameter affects setting time in the future */</span><br><span style="color: hsl(0, 100%, 40%);">-    usleep(10000);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_clock_override_add(CLOCK_REALTIME, 0, 10*1000*1000);</span><br><span>    double increased_time_secs = Timeval().seconds();</span><br><span style="color: hsl(0, 100%, 40%);">-       assert(increased_time_secs <= then.seconds());</span><br><span style="color: hsl(120, 100%, 40%);">+     assert(increased_time_secs < then.seconds());</span><br><span> </span><br><span>         struct timespec invariant_time  = then.timespec();</span><br><span>   int loops = 0;</span><br><span> </span><br><span>   while (!then.passed()) {</span><br><span>             struct timespec tspecnow = then.timespec();</span><br><span style="color: hsl(0, 100%, 40%);">-             cerr << "now: " << Timeval().seconds() << " then: " << then << " remaining: " << then.remaining() << endl;</span><br><span style="color: hsl(120, 100%, 40%);">+            cerr << "["<< loops << "] now: " << Timeval().seconds() << " then: " << then << " remaining: " << then.remaining() << endl;</span><br><span>            assert(last_remaining >= then.remaining());</span><br><span>               assert(tspecnow.tv_sec == invariant_time.tv_sec && tspecnow.tv_nsec == invariant_time.tv_nsec);</span><br><span style="color: hsl(0, 100%, 40%);">-         usleep(500000);</span><br><span style="color: hsl(120, 100%, 40%);">+               osmo_clock_override_add(CLOCK_REALTIME, 0, 500000*1000);</span><br><span>             loops++;</span><br><span>     }</span><br><span>    cerr << "now: " << Timeval() << " then: " << then << " remaining: " << then.remaining() << endl;</span><br><span style="color: hsl(0, 100%, 40%);">-        assert(then.remaining() <= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-       assert(loops >= 18);</span><br><span style="color: hsl(120, 100%, 40%);">+       assert(then.remaining() == -10);</span><br><span style="color: hsl(120, 100%, 40%);">+      assert(loops == 20);</span><br><span> </span><br><span>     printf("Done\n");</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12282">change 12282</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12282"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I74e577a0142fb6d1ef3630e02aff9910b191bff9 </div>
<div style="display:none"> Gerrit-Change-Number: 12282 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>