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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">selftest: Introduce scenario_test<br><br>This covers some unit tests for scenario module (Scenario class).<br><br>Change-Id: I4c80047bb03ae8254c192057007fa7df84478605<br>---<br>A selftest/scenario_test/_prep.py<br>A selftest/scenario_test/paths.conf<br>A selftest/scenario_test/scenario_case_01.conf<br>A selftest/scenario_test/scenario_case_02.conf<br>A selftest/scenario_test/scenario_case_03@.conf<br>A selftest/scenario_test/scenario_case_03@specific.conf<br>A selftest/scenario_test/scenario_test.err<br>A selftest/scenario_test/scenario_test.ok<br>A selftest/scenario_test/scenario_test.ok.ign<br>A selftest/scenario_test/scenario_test.py<br>10 files changed, 178 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/selftest/scenario_test/_prep.py b/selftest/scenario_test/_prep.py</span><br><span>new file mode 120000</span><br><span>index 0000000..9cea3fe</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/_prep.py</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+../_prep.py</span><br><span>\ No newline at end of file</span><br><span>diff --git a/selftest/scenario_test/paths.conf b/selftest/scenario_test/paths.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..c7df5ac</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/paths.conf</span><br><span>@@ -0,0 +1,3 @@</span><br><span style="color: hsl(120, 100%, 40%);">+state_dir: ./test_work/state_dir</span><br><span style="color: hsl(120, 100%, 40%);">+suites_dir: .</span><br><span style="color: hsl(120, 100%, 40%);">+scenarios_dir: .</span><br><span>diff --git a/selftest/scenario_test/scenario_case_01.conf b/selftest/scenario_test/scenario_case_01.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..1050a8d</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_case_01.conf</span><br><span>@@ -0,0 +1,10 @@</span><br><span style="color: hsl(120, 100%, 40%);">+somelist:</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'firststring'</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'secondstring'</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'thirdstring'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+anotherlist:</span><br><span style="color: hsl(120, 100%, 40%);">+- 4</span><br><span style="color: hsl(120, 100%, 40%);">+- 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+foobar: yes</span><br><span>diff --git a/selftest/scenario_test/scenario_case_02.conf b/selftest/scenario_test/scenario_case_02.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..bf7b3d6</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_case_02.conf</span><br><span>@@ -0,0 +1,11 @@</span><br><span style="color: hsl(120, 100%, 40%);">+somelist:</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'firststring'</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'secondstring'</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'thirdstring'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+anotherlist:</span><br><span style="color: hsl(120, 100%, 40%);">+- 4</span><br><span style="color: hsl(120, 100%, 40%);">+- 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+foobar: yes</span><br><span style="color: hsl(120, 100%, 40%);">+unexpectedfoo: gonnafail</span><br><span>diff --git a/selftest/scenario_test/scenario_case_03@.conf b/selftest/scenario_test/scenario_case_03@.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..d411191</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_case_03@.conf</span><br><span>@@ -0,0 +1,10 @@</span><br><span style="color: hsl(120, 100%, 40%);">+somelist:</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'firststring'</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: ${param1}</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'thirdstring'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+anotherlist:</span><br><span style="color: hsl(120, 100%, 40%);">+- ${param2}</span><br><span style="color: hsl(120, 100%, 40%);">+- 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+foobar: ${param3}</span><br><span>diff --git a/selftest/scenario_test/scenario_case_03@specific.conf b/selftest/scenario_test/scenario_case_03@specific.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..925f908</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_case_03@specific.conf</span><br><span>@@ -0,0 +1,2 @@</span><br><span style="color: hsl(120, 100%, 40%);">+somelist:</span><br><span style="color: hsl(120, 100%, 40%);">+- somelistitem: 'specific'</span><br><span>diff --git a/selftest/scenario_test/scenario_test.err b/selftest/scenario_test/scenario_test.err</span><br><span>new file mode 100644</span><br><span>index 0000000..e69de29</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_test.err</span><br><span>diff --git a/selftest/scenario_test/scenario_test.ok b/selftest/scenario_test/scenario_test.ok</span><br><span>new file mode 100644</span><br><span>index 0000000..7fe2049</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_test.ok</span><br><span>@@ -0,0 +1,58 @@</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found config file paths.conf as [PATH]/selftest/scenario_test/paths.conf in [PATH]/selftest/scenario_test which is [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: [PATH]/selftest/scenario_test/paths.conf: relative path . is [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: [PATH]/selftest/scenario_test/paths.conf: relative path ./test_work/state_dir is [PATH]/selftest/scenario_test/test_work/state_dir</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: [PATH]/selftest/scenario_test/paths.conf: relative path . is [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+scenario_case_01.conf</span><br><span style="color: hsl(120, 100%, 40%);">+{'anotherlist': ['4', '0'],</span><br><span style="color: hsl(120, 100%, 40%);">+ 'foobar': 'True',</span><br><span style="color: hsl(120, 100%, 40%);">+ 'somelist': [{'somelistitem': 'firststring'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'secondstring'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'thirdstring'}]}</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+scenario_case_01.conf</span><br><span style="color: hsl(120, 100%, 40%);">+{'anotherlist': ['4', '0'],</span><br><span style="color: hsl(120, 100%, 40%);">+ 'foobar': 'True',</span><br><span style="color: hsl(120, 100%, 40%);">+ 'somelist': [{'somelistitem': 'firststring'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'secondstring'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'thirdstring'}]}</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected RuntimeError: No such scenario file: '[PATH]/selftest/scenario_test/scenario_case_01@.conf' (nor scenario_case_01@.conf)</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected ValueError</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected ValueError</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected RuntimeError: No such scenario file: '[PATH]/selftest/scenario_test/scenario_case_03.conf'</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected RuntimeError: No such scenario file: '[PATH]/selftest/scenario_test/scenario_case_03.conf'</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+tst scenario_case_03@heyho,1,yes.conf: DBG: {param_dict={param1='heyho', param2='1', param3='yes'}}</span><br><span style="color: hsl(120, 100%, 40%);">+scenario_case_03@heyho,1,yes.conf</span><br><span style="color: hsl(120, 100%, 40%);">+{'anotherlist': ['1', '0'],</span><br><span style="color: hsl(120, 100%, 40%);">+ 'foobar': 'True',</span><br><span style="color: hsl(120, 100%, 40%);">+ 'somelist': [{'somelistitem': 'firststring'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'heyho'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'thirdstring'}]}</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+tst scenario_case_03@heyho,1,yes.conf: DBG: {param_dict={param1='heyho', param2='1', param3='yes'}}</span><br><span style="color: hsl(120, 100%, 40%);">+scenario_case_03@heyho,1,yes.conf</span><br><span style="color: hsl(120, 100%, 40%);">+{'anotherlist': ['1', '0'],</span><br><span style="color: hsl(120, 100%, 40%);">+ 'foobar': 'True',</span><br><span style="color: hsl(120, 100%, 40%);">+ 'somelist': [{'somelistitem': 'firststring'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'heyho'},</span><br><span style="color: hsl(120, 100%, 40%);">+              {'somelistitem': 'thirdstring'}]}</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+tst scenario_case_03@heyho,1.conf: DBG: {param_dict={param1='heyho', param2='1'}}</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected NameError: Undefined</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+tst scenario_case_03@heyho,1.conf: DBG: {param_dict={param1='heyho', param2='1'}}</span><br><span style="color: hsl(120, 100%, 40%);">+OK: expected NameError: Undefined</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+tst scenario_case_03@specific.conf: DBG: {param_dict={param1='specific'}}</span><br><span style="color: hsl(120, 100%, 40%);">+scenario_case_03@specific.conf</span><br><span style="color: hsl(120, 100%, 40%);">+{'somelist': [{'somelistitem': 'specific'}]}</span><br><span style="color: hsl(120, 100%, 40%);">+cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test</span><br><span style="color: hsl(120, 100%, 40%);">+tst scenario_case_03@specific.conf: DBG: {param_dict={param1='specific'}}</span><br><span style="color: hsl(120, 100%, 40%);">+scenario_case_03@specific.conf</span><br><span style="color: hsl(120, 100%, 40%);">+{'somelist': [{'somelistitem': 'specific'}]}</span><br><span>diff --git a/selftest/scenario_test/scenario_test.ok.ign b/selftest/scenario_test/scenario_test.ok.ign</span><br><span>new file mode 100644</span><br><span>index 0000000..a19fb8b</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_test.ok.ign</span><br><span>@@ -0,0 +1,2 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/[^ ]*/selftest/    [PATH]/selftest/</span><br><span style="color: hsl(120, 100%, 40%);">+\.py:[0-9]*   .py:[LINENR]</span><br><span>diff --git a/selftest/scenario_test/scenario_test.py b/selftest/scenario_test/scenario_test.py</span><br><span>new file mode 100755</span><br><span>index 0000000..f5f42f7</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/scenario_test/scenario_test.py</span><br><span>@@ -0,0 +1,81 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import _prep</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import sys</span><br><span style="color: hsl(120, 100%, 40%);">+import os</span><br><span style="color: hsl(120, 100%, 40%);">+import io</span><br><span style="color: hsl(120, 100%, 40%);">+import pprint</span><br><span style="color: hsl(120, 100%, 40%);">+import copy</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.core import schema</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.core import config</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.core import scenario</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+test_schema = {</span><br><span style="color: hsl(120, 100%, 40%);">+    'somelist[].somelistitem': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+    'anotherlist[]': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+    'foobar' : schema.BOOL_STR,</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%);">+config.override_conf = os.path.join(os.path.dirname(sys.argv[0]))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def print_scenario(sc):</span><br><span style="color: hsl(120, 100%, 40%);">+    # we use copy() to be able to get the dictionary in super class of Scenario:</span><br><span style="color: hsl(120, 100%, 40%);">+    pprint.pprint(sc)</span><br><span style="color: hsl(120, 100%, 40%);">+    pprint.pprint(sc.copy())</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def load_scenario(name, sch=None):</span><br><span style="color: hsl(120, 100%, 40%);">+    # Test it loads the same both with .conf and without</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario(name, sch)</span><br><span style="color: hsl(120, 100%, 40%);">+    print_scenario(sc)</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario(name + '.conf', sch)</span><br><span style="color: hsl(120, 100%, 40%);">+    print_scenario(sc)</span><br><span style="color: hsl(120, 100%, 40%);">+    return sc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# scenario case 01 should load fine</span><br><span style="color: hsl(120, 100%, 40%);">+load_scenario('scenario_case_01', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Try loading scenario 1 as if it was parametrized (but it's not):</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_01@', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except RuntimeError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected RuntimeError: %s' % str(e))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# scenario case 02 should fail to load, contains stuff not in test_schema</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_02', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except ValueError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected ValueError')</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_02.conf', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except ValueError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected ValueError')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# scenario case 3 is parametrized, so loading without specifying so should fail:</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_03', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except RuntimeError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected RuntimeError: %s' % str(e))</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_03.conf', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except RuntimeError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected RuntimeError: %s' % str(e))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#scenario 3 should load fine this way:</span><br><span style="color: hsl(120, 100%, 40%);">+sc = load_scenario('scenario_case_03@heyho,1,yes', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#scenario 3 should fail due to missing parameters:</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_03@heyho,1', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except NameError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected NameError: %s' % str(e))</span><br><span style="color: hsl(120, 100%, 40%);">+try:</span><br><span style="color: hsl(120, 100%, 40%);">+    sc = scenario.get_scenario('scenario_case_03@heyho,1.conf', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+except NameError as e:</span><br><span style="color: hsl(120, 100%, 40%);">+    print('OK: expected NameError: %s' % str(e))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#scenario 3 should load the specific config file this way:</span><br><span style="color: hsl(120, 100%, 40%);">+sc = load_scenario('scenario_case_03@specific', test_schema)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# vim: expandtab tabstop=4 shiftwidth=4</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18201">change 18201</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-gsm-tester/+/18201"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4c80047bb03ae8254c192057007fa7df84478605 </div>
<div style="display:none"> Gerrit-Change-Number: 18201 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </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: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>