<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/19702">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tests: tx_power: Extend and add extra power_ramp buggy case<br><br>The test code is extended to support testing more than one ramping loop.<br><br>A new test ramping test is added, which shows buggy behavior, since<br>being in -10dBm and targeting 10dBm with  max_initial_pout_mdBm=0 should<br>immediatelly jump -10->0 and then slowly ramp up (2dB) 0->10dB.<br>The issue will be fixed in next commit.<br><br>Change-Id: I5adc9008ac415eb23274755fc8270df8eebdc6fb<br>---<br>M tests/tx_power/tx_power_test.c<br>M tests/tx_power/tx_power_test.err<br>M tests/tx_power/tx_power_test.ok<br>3 files changed, 76 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/tx_power/tx_power_test.c b/tests/tx_power/tx_power_test.c</span><br><span>index 12c51c6..dbabc87 100644</span><br><span>--- a/tests/tx_power/tx_power_test.c</span><br><span>+++ b/tests/tx_power/tx_power_test.c</span><br><span>@@ -20,6 +20,7 @@</span><br><span>  */</span><br><span> </span><br><span> #include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <errno.h></span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span>@@ -30,6 +31,7 @@</span><br><span> #include <osmo-bts/logging.h></span><br><span> #include <osmo-bts/tx_power.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static bool power_ramp_finished = false;</span><br><span> </span><br><span> static const struct trx_power_params tpp_1002 = {</span><br><span>      .trx_p_max_out_mdBm = to_mdB(23),</span><br><span>@@ -182,25 +184,56 @@</span><br><span> </span><br><span> int bts_model_change_power(struct gsm_bts_trx *trx, int p_trxout_mdBm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    struct trx_power_params *tpp = &trx->power_params;</span><br><span> </span><br><span>        printf("CHANGE_POWER(%d)\n", p_trxout_mdBm);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (tpp->ramp.attenuation_mdB == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-          exit(0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>     power_trx_change_compl(trx, p_trxout_mdBm);</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void test_power_ramp(struct gsm_bts_trx *trx, int dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+static void test_ramp_compl_cb(struct gsm_bts_trx *trx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   power_ramp_finished = true;</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("power_ramp finished\n");</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%);">+static int test_power_ramp(struct gsm_bts_trx *trx, int dBm)</span><br><span> {</span><br><span>   printf("Testing tx_power ramping for sysmoBTS 1020\n");</span><br><span style="color: hsl(120, 100%, 40%);">+     int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    trx->power_params = tpp_1020;</span><br><span>     trx->power_params.ramp.step_interval_sec = 0; /* speedup test */</span><br><span>  trx->max_power_red = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  power_ramp_start(trx, to_mdB(dBm), 0, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+  power_ramp_finished = false;</span><br><span style="color: hsl(120, 100%, 40%);">+  if ((rc = power_ramp_start(trx, to_mdB(dBm), 0, test_ramp_compl_cb)))</span><br><span style="color: hsl(120, 100%, 40%);">+         return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    while (!power_ramp_finished)</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_select_main(0);</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int test_power_ramp_from_minus10(struct gsm_bts_trx *trx, int dBm)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("Testing tx_power ramping for osmo-bts-trx after lock\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     trx->power_params = tpp_1002;</span><br><span style="color: hsl(120, 100%, 40%);">+      trx->power_params.trx_p_max_out_mdBm = to_mdB(20);</span><br><span style="color: hsl(120, 100%, 40%);">+ trx->power_params.p_total_tgt_mdBm = to_mdB(-10);</span><br><span style="color: hsl(120, 100%, 40%);">+  trx->power_params.p_total_cur_mdBm = to_mdB(-10);</span><br><span style="color: hsl(120, 100%, 40%);">+  trx->power_params.ramp.max_initial_pout_mdBm = to_mdB(0);</span><br><span style="color: hsl(120, 100%, 40%);">+  trx->power_params.ramp.step_interval_sec = 0; /* speedup test */</span><br><span style="color: hsl(120, 100%, 40%);">+   trx->max_power_red = 10;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ power_ramp_finished = false;</span><br><span style="color: hsl(120, 100%, 40%);">+  if ((rc = power_ramp_start(trx, to_mdB(dBm), 0, test_ramp_compl_cb)))</span><br><span style="color: hsl(120, 100%, 40%);">+         return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+    while (!power_ramp_finished)</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_select_main(0);</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span> }</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span>@@ -239,11 +272,10 @@</span><br><span>        test_sbts2050(trx);</span><br><span> </span><br><span>      /* test error case / excess power (40 dBm is too much) */</span><br><span style="color: hsl(0, 100%, 40%);">-       test_power_ramp(trx, 40);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(test_power_ramp(trx, 40) == -ERANGE);</span><br><span>    /* test actual ramping to full 33 dBm */</span><br><span>     test_power_ramp(trx, 33);</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Test ramp up from -10dBm (locked) to 10dBm */</span><br><span style="color: hsl(120, 100%, 40%);">+      test_power_ramp_from_minus10(trx, 10);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      while (1) {</span><br><span style="color: hsl(0, 100%, 40%);">-             osmo_select_main(0);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span> }</span><br><span>diff --git a/tests/tx_power/tx_power_test.err b/tests/tx_power/tx_power_test.err</span><br><span>index 344fa16..3ef12c9 100644</span><br><span>--- a/tests/tx_power/tx_power_test.err</span><br><span>+++ b/tests/tx_power/tx_power_test.err</span><br><span>@@ -35,3 +35,24 @@</span><br><span> (bts=0,trx=1) ramping TRX board output power to 22000 mdBm.</span><br><span> (bts=0,trx=1) ramp_timer_cb(cur_pout=33000, tgt_pout=33000, ramp_att=0, therm_att=0, user_gain=0)</span><br><span> (bts=0,trx=1) ramping TRX board output power to 23000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) power_ramp_start(cur=-10000, tgt=10000)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=-8000, tgt_pout=10000, ramp_att=18000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to -8000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=-6000, tgt_pout=10000, ramp_att=16000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to -6000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=-4000, tgt_pout=10000, ramp_att=14000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to -4000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=-2000, tgt_pout=10000, ramp_att=12000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to -2000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=0, tgt_pout=10000, ramp_att=10000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to 0 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=2000, tgt_pout=10000, ramp_att=8000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to 2000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=4000, tgt_pout=10000, ramp_att=6000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to 4000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=6000, tgt_pout=10000, ramp_att=4000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to 6000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=8000, tgt_pout=10000, ramp_att=2000, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to 8000 mdBm.</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramp_timer_cb(cur_pout=10000, tgt_pout=10000, ramp_att=0, therm_att=0, user_gain=0)</span><br><span style="color: hsl(120, 100%, 40%);">+(bts=0,trx=1) ramping TRX board output power to 10000 mdBm.</span><br><span>diff --git a/tests/tx_power/tx_power_test.ok b/tests/tx_power/tx_power_test.ok</span><br><span>index ceb88ab..ec3ea61 100644</span><br><span>--- a/tests/tx_power/tx_power_test.ok</span><br><span>+++ b/tests/tx_power/tx_power_test.ok</span><br><span>@@ -21,3 +21,16 @@</span><br><span> CHANGE_POWER(20000)</span><br><span> CHANGE_POWER(22000)</span><br><span> CHANGE_POWER(23000)</span><br><span style="color: hsl(120, 100%, 40%);">+power_ramp finished</span><br><span style="color: hsl(120, 100%, 40%);">+Testing tx_power ramping for osmo-bts-trx after lock</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(-8000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(-6000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(-4000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(-2000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(0)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(2000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(4000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(6000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(8000)</span><br><span style="color: hsl(120, 100%, 40%);">+CHANGE_POWER(10000)</span><br><span style="color: hsl(120, 100%, 40%);">+power_ramp finished</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/19702">change 19702</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-bts/+/19702"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I5adc9008ac415eb23274755fc8270df8eebdc6fb </div>
<div style="display:none"> Gerrit-Change-Number: 19702 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>