<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13164">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add test for MS mode and (M)CS settings<br><br>Right now set_mode() on GprsMs behaves in pretty counter-intuitive way:<br>* it's possible to set current DL MCS higher than max value<br>* EGPRS and EGPRS_GMSK have the same max DL MCS<br>* setting EGPRS* mode drops current/max MCS values to unknown<br><br>Let's capture this in a unit-test before attempting any further<br>modifications.<br><br>Change-Id: Ibf917f4b49d927a21cbd467775806fa6ea06a6a6<br>---<br>M tests/ms/MsTest.cpp<br>M tests/ms/MsTest.err<br>M tests/ms/MsTest.ok<br>3 files changed, 88 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/64/13164/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/ms/MsTest.cpp b/tests/ms/MsTest.cpp</span><br><span>index 728daf6..78a931b 100644</span><br><span>--- a/tests/ms/MsTest.cpp</span><br><span>+++ b/tests/ms/MsTest.cpp</span><br><span>@@ -515,6 +515,74 @@</span><br><span>     printf("=== end %s ===\n", __func__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void dump_ms(const GprsMs *ms, const char *pref)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("%s MS DL %s/%s, UL %s/%s, mode %s, <%s>\n", pref,</span><br><span style="color: hsl(120, 100%, 40%);">+            mcs_name(ms->current_cs_dl()), mcs_name(ms->max_cs_dl()),</span><br><span style="color: hsl(120, 100%, 40%);">+               mcs_name(ms->current_cs_ul()), mcs_name(ms->max_cs_ul()),</span><br><span style="color: hsl(120, 100%, 40%);">+               mode_name(ms->mode()),</span><br><span style="color: hsl(120, 100%, 40%);">+             ms->is_idle() ? "IDLE" : "ACTIVE");</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 void test_ms_mcs_mode()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     BTS the_bts;</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs_rlcmac_bts *bts = the_bts.bts_data();</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t tlli = 0xdeadbeef;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs_rlcmac_dl_tbf *dl_tbf;</span><br><span style="color: hsl(120, 100%, 40%);">+   GprsMs *ms1, *ms2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("=== start %s ===\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ms1 = new GprsMs(&the_bts, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+ dump_ms(ms1, "1: no BTS defaults  ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     bts->initial_cs_dl = 4;</span><br><span style="color: hsl(120, 100%, 40%);">+    bts->initial_cs_ul = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+    bts->cs_downgrade_threshold = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ms2 = new GprsMs(&the_bts, tlli + 1);</span><br><span style="color: hsl(120, 100%, 40%);">+     dump_ms(ms2, "2: with BTS defaults");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+        new (dl_tbf) gprs_rlcmac_dl_tbf(NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_tbf->set_ms(ms2);</span><br><span style="color: hsl(120, 100%, 40%);">+       dump_ms(ms2, "2: after TBF attach ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms1->set_mode(EGPRS);</span><br><span style="color: hsl(120, 100%, 40%);">+      dump_ms(ms1, "1: after mode set   ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms2->set_mode(EGPRS);</span><br><span style="color: hsl(120, 100%, 40%);">+      dump_ms(ms2, "2: after mode set   ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms1->set_current_cs_dl(MCS7);</span><br><span style="color: hsl(120, 100%, 40%);">+      dump_ms(ms1, "1: after MCS set    ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms2->set_current_cs_dl(MCS8);</span><br><span style="color: hsl(120, 100%, 40%);">+      dump_ms(ms2, "2: after MCS set    ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms1->set_mode(EGPRS_GMSK);</span><br><span style="color: hsl(120, 100%, 40%);">+ dump_ms(ms1, "1: after mode set   ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms2->set_mode(EGPRS_GMSK);</span><br><span style="color: hsl(120, 100%, 40%);">+ dump_ms(ms2, "2: after mode set   ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms2->detach_tbf(dl_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+   dump_ms(ms2, "2: after TBF detach ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms1->set_mode(GPRS);</span><br><span style="color: hsl(120, 100%, 40%);">+       dump_ms(ms1, "1: after mode set   ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ms2->set_mode(GPRS);</span><br><span style="color: hsl(120, 100%, 40%);">+       dump_ms(ms2, "2: after mode set   ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     talloc_free(dl_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("=== end %s ===\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>         struct vty_app_info pcu_vty_info = {0};</span><br><span>@@ -540,6 +608,7 @@</span><br><span>        test_ms_storage();</span><br><span>   test_ms_timeout();</span><br><span>   test_ms_cs_selection();</span><br><span style="color: hsl(120, 100%, 40%);">+       test_ms_mcs_mode();</span><br><span> </span><br><span>      if (getenv("TALLOC_REPORT_FULL"))</span><br><span>          talloc_report_full(tall_pcu_ctx, stderr);</span><br><span>diff --git a/tests/ms/MsTest.err b/tests/ms/MsTest.err</span><br><span>index a2e4a0c..193d9a3 100644</span><br><span>--- a/tests/ms/MsTest.err</span><br><span>+++ b/tests/ms/MsTest.err</span><br><span>@@ -56,3 +56,8 @@</span><br><span> Destroying MS object, TLLI = 0xffeeddbb</span><br><span> Creating MS object, TLLI = 0xffeeddbb</span><br><span> Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0xffeeddbb DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+Creating MS object, TLLI = 0xdeadbeef</span><br><span style="color: hsl(120, 100%, 40%);">+Creating MS object, TLLI = 0xdeadbef0</span><br><span style="color: hsl(120, 100%, 40%);">+Attaching TBF to MS object, TLLI = 0xdeadbef0, TBF = TBF(TFI=0 TLLI=0xdeadbef0 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+Detaching TBF from MS object, TLLI = 0xdeadbef0, TBF = TBF(TFI=0 TLLI=0xdeadbef0 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+Destroying MS object, TLLI = 0xdeadbef0</span><br><span>diff --git a/tests/ms/MsTest.ok b/tests/ms/MsTest.ok</span><br><span>index f14cceb..75c2aec 100644</span><br><span>--- a/tests/ms/MsTest.ok</span><br><span>+++ b/tests/ms/MsTest.ok</span><br><span>@@ -18,3 +18,17 @@</span><br><span> === end test_ms_timeout ===</span><br><span> === start test_ms_cs_selection ===</span><br><span> === end test_ms_cs_selection ===</span><br><span style="color: hsl(120, 100%, 40%);">+=== start test_ms_mcs_mode ===</span><br><span style="color: hsl(120, 100%, 40%);">+1: no BTS defaults   MS DL UNKNOWN/UNKNOWN, UL UNKNOWN/UNKNOWN, mode GPRS, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+2: with BTS defaults MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+2: after TBF attach  MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <ACTIVE></span><br><span style="color: hsl(120, 100%, 40%);">+1: after mode set    MS DL UNKNOWN/UNKNOWN, UL UNKNOWN/UNKNOWN, mode EGPRS, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+2: after mode set    MS DL UNKNOWN/UNKNOWN, UL UNKNOWN/UNKNOWN, mode EGPRS, <ACTIVE></span><br><span style="color: hsl(120, 100%, 40%);">+1: after MCS set     MS DL MCS-7/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+2: after MCS set     MS DL MCS-8/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS, <ACTIVE></span><br><span style="color: hsl(120, 100%, 40%);">+1: after mode set    MS DL MCS-7/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS_GMSK-only, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+2: after mode set    MS DL MCS-8/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS_GMSK-only, <ACTIVE></span><br><span style="color: hsl(120, 100%, 40%);">+2: after TBF detach  MS DL MCS-8/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS_GMSK-only, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+1: after mode set    MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+2: after mode set    MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE></span><br><span style="color: hsl(120, 100%, 40%);">+=== end test_ms_mcs_mode ===</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13164">change 13164</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/13164"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ibf917f4b49d927a21cbd467775806fa6ea06a6a6 </div>
<div style="display:none"> Gerrit-Change-Number: 13164 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>