<p>neels <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24933">View Change</a></p><div style="white-space:pre-wrap">Approvals:
daniel: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">handover_test: add fake-time 'wait'<br><br>Add a 'wait' cmd that lets (fake) time pass.<br><br>An ucoming patch will show the<br>first use of this: "test_penalty_timer.ho_vty: show lchan recovery"<br>I8f7668b6d08a0dac9e90d2358955f9d5099d39fa<br><br>My actual original reason to add this follows in patches<br>- "handover tests: test passing of penalty timeout"<br> I65e59cc7309778cf9d71612669ce84d101c8135e<br>- "hodec2: add low-rxqual-assignment penalty timer (2/2)"<br> Id00a07313fe04eec509b336c0637b59c707760e0<br><br>Related: SYS#5198<br>Change-Id: Ia6b5696adef7e7bf649473b4d79b96acf3aa59e3<br>---<br>M tests/handover/handover_test.c<br>1 file changed, 56 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c</span><br><span>index 60a31be..331726a 100644</span><br><span>--- a/tests/handover/handover_test.c</span><br><span>+++ b/tests/handover/handover_test.c</span><br><span>@@ -94,6 +94,41 @@</span><br><span> uint8_t bcch_f;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct timeval fake_time_start_time = { 123, 456 };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void fake_time_passes(time_t secs, suseconds_t usecs)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct timeval diff;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Add time to osmo_fsm timers, using osmo_gettimeofday() */</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_gettimeofday_override_add(secs, usecs);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Add time to penalty timers, using osmo_clock_gettime() */</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_clock_override_add(CLOCK_MONOTONIC, secs, usecs * 1000);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ timersub(&osmo_gettimeofday_override_time, &fake_time_start_time, &diff);</span><br><span style="color: hsl(120, 100%, 40%);">+ fprintf(stderr, "Total time passed: %d.%06d s\n", (int)diff.tv_sec, (int)diff.tv_usec);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_timers_prepare();</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_timers_update();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void fake_time_start()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct timespec *clock_override;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* osmo_fsm uses osmo_gettimeofday(). To affect FSM timeouts, we need osmo_gettimeofday_override. */</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_gettimeofday_override_time = fake_time_start_time;</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_gettimeofday_override = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Penalty timers use osmo_clock_gettime(CLOCK_MONOTONIC). To affect these timeouts, we need</span><br><span style="color: hsl(120, 100%, 40%);">+ * osmo_gettimeofday_override. */</span><br><span style="color: hsl(120, 100%, 40%);">+ clock_override = osmo_clock_override_gettimespec(CLOCK_MONOTONIC);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(clock_override);</span><br><span style="color: hsl(120, 100%, 40%);">+ clock_override->tv_sec = fake_time_start_time.tv_sec;</span><br><span style="color: hsl(120, 100%, 40%);">+ clock_override->tv_nsec = fake_time_start_time.tv_usec * 1000;</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_clock_override_enable(CLOCK_MONOTONIC, true);</span><br><span style="color: hsl(120, 100%, 40%);">+ fake_time_passes(0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void gen_meas_rep(struct gsm_lchan *lchan,</span><br><span> uint8_t bs_power_db, uint8_t rxlev, uint8_t rxqual, uint8_t ta,</span><br><span> int neighbors_count, struct neighbor_meas *neighbors)</span><br><span>@@ -1410,6 +1445,22 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(wait, wait_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "wait <0-999999> [<0-999>]",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Let some fake time pass. The test continues instantaneously, but this overrides osmo_gettimeofday() to let"</span><br><span style="color: hsl(120, 100%, 40%);">+ " given amount of time pass virtually.\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Seconds to fake-wait\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Microseconds to fake-wait, in addition to the seconds waited\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ time_t seconds = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ suseconds_t useconds = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ VTY_ECHO();</span><br><span style="color: hsl(120, 100%, 40%);">+ if (argc > 1)</span><br><span style="color: hsl(120, 100%, 40%);">+ useconds = atoi(argv[1]) * 1000;</span><br><span style="color: hsl(120, 100%, 40%);">+ fake_time_passes(seconds, useconds);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void ho_test_vty_init()</span><br><span> {</span><br><span> install_element(CONFIG_NODE, &create_n_bts_cmd);</span><br><span>@@ -1433,6 +1484,7 @@</span><br><span> install_element(CONFIG_NODE, &codec_f_cmd);</span><br><span> install_element(CONFIG_NODE, &codec_h_cmd);</span><br><span> install_element(CONFIG_NODE, &set_ts_use_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CONFIG_NODE, &wait_cmd);</span><br><span> }</span><br><span> </span><br><span> static const struct log_info_cat log_categories[] = {</span><br><span>@@ -1554,6 +1606,10 @@</span><br><span> log_set_print_timestamp(osmo_stderr_target, 0);</span><br><span> osmo_fsm_log_addr(false);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* the 'wait' command above, intended to test penalty timers, adds seconds to the monotonic clock in "fake</span><br><span style="color: hsl(120, 100%, 40%);">+ * time". */</span><br><span style="color: hsl(120, 100%, 40%);">+ fake_time_start();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> bsc_network_alloc();</span><br><span> if (!bsc_gsmnet)</span><br><span> exit(1);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24933">change 24933</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/c/osmo-bsc/+/24933"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia6b5696adef7e7bf649473b4d79b96acf3aa59e3 </div>
<div style="display:none"> Gerrit-Change-Number: 24933 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>