From 0433c9b6719539575474cd45ffd46fc5a5c947e2 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Mon, 11 May 2020 16:52:16 +0200 Subject: [PATCH] selftest: Introduce scenario_test This covers some unit tests for scenario module (Scenario class). Change-Id: I4c80047bb03ae8254c192057007fa7df84478605 --- selftest/scenario_test/_prep.py | 1 + selftest/scenario_test/paths.conf | 3 + selftest/scenario_test/scenario_case_01.conf | 10 +++ selftest/scenario_test/scenario_case_02.conf | 11 +++ selftest/scenario_test/scenario_case_03@.conf | 10 +++ .../scenario_case_03@specific.conf | 2 + selftest/scenario_test/scenario_test.err | 0 selftest/scenario_test/scenario_test.ok | 58 +++++++++++++ selftest/scenario_test/scenario_test.ok.ign | 2 + selftest/scenario_test/scenario_test.py | 81 +++++++++++++++++++ 10 files changed, 178 insertions(+) create mode 120000 selftest/scenario_test/_prep.py create mode 100644 selftest/scenario_test/paths.conf create mode 100644 selftest/scenario_test/scenario_case_01.conf create mode 100644 selftest/scenario_test/scenario_case_02.conf create mode 100644 selftest/scenario_test/scenario_case_03@.conf create mode 100644 selftest/scenario_test/scenario_case_03@specific.conf create mode 100644 selftest/scenario_test/scenario_test.err create mode 100644 selftest/scenario_test/scenario_test.ok create mode 100644 selftest/scenario_test/scenario_test.ok.ign create mode 100755 selftest/scenario_test/scenario_test.py diff --git a/selftest/scenario_test/_prep.py b/selftest/scenario_test/_prep.py new file mode 120000 index 00000000..9cea3fe5 --- /dev/null +++ b/selftest/scenario_test/_prep.py @@ -0,0 +1 @@ +../_prep.py \ No newline at end of file diff --git a/selftest/scenario_test/paths.conf b/selftest/scenario_test/paths.conf new file mode 100644 index 00000000..c7df5ac3 --- /dev/null +++ b/selftest/scenario_test/paths.conf @@ -0,0 +1,3 @@ +state_dir: ./test_work/state_dir +suites_dir: . +scenarios_dir: . diff --git a/selftest/scenario_test/scenario_case_01.conf b/selftest/scenario_test/scenario_case_01.conf new file mode 100644 index 00000000..1050a8dc --- /dev/null +++ b/selftest/scenario_test/scenario_case_01.conf @@ -0,0 +1,10 @@ +somelist: +- somelistitem: 'firststring' +- somelistitem: 'secondstring' +- somelistitem: 'thirdstring' + +anotherlist: +- 4 +- 0 + +foobar: yes diff --git a/selftest/scenario_test/scenario_case_02.conf b/selftest/scenario_test/scenario_case_02.conf new file mode 100644 index 00000000..bf7b3d6c --- /dev/null +++ b/selftest/scenario_test/scenario_case_02.conf @@ -0,0 +1,11 @@ +somelist: +- somelistitem: 'firststring' +- somelistitem: 'secondstring' +- somelistitem: 'thirdstring' + +anotherlist: +- 4 +- 0 + +foobar: yes +unexpectedfoo: gonnafail diff --git a/selftest/scenario_test/scenario_case_03@.conf b/selftest/scenario_test/scenario_case_03@.conf new file mode 100644 index 00000000..d4111916 --- /dev/null +++ b/selftest/scenario_test/scenario_case_03@.conf @@ -0,0 +1,10 @@ +somelist: +- somelistitem: 'firststring' +- somelistitem: ${param1} +- somelistitem: 'thirdstring' + +anotherlist: +- ${param2} +- 0 + +foobar: ${param3} diff --git a/selftest/scenario_test/scenario_case_03@specific.conf b/selftest/scenario_test/scenario_case_03@specific.conf new file mode 100644 index 00000000..925f9082 --- /dev/null +++ b/selftest/scenario_test/scenario_case_03@specific.conf @@ -0,0 +1,2 @@ +somelist: +- somelistitem: 'specific' diff --git a/selftest/scenario_test/scenario_test.err b/selftest/scenario_test/scenario_test.err new file mode 100644 index 00000000..e69de29b diff --git a/selftest/scenario_test/scenario_test.ok b/selftest/scenario_test/scenario_test.ok new file mode 100644 index 00000000..7fe2049d --- /dev/null +++ b/selftest/scenario_test/scenario_test.ok @@ -0,0 +1,58 @@ +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 +cnf -: DBG: [PATH]/selftest/scenario_test/paths.conf: relative path . is [PATH]/selftest/scenario_test +cnf -: DBG: [PATH]/selftest/scenario_test/paths.conf: relative path ./test_work/state_dir is [PATH]/selftest/scenario_test/test_work/state_dir +cnf -: DBG: [PATH]/selftest/scenario_test/paths.conf: relative path . is [PATH]/selftest/scenario_test +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +scenario_case_01.conf +{'anotherlist': ['4', '0'], + 'foobar': 'True', + 'somelist': [{'somelistitem': 'firststring'}, + {'somelistitem': 'secondstring'}, + {'somelistitem': 'thirdstring'}]} +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +scenario_case_01.conf +{'anotherlist': ['4', '0'], + 'foobar': 'True', + 'somelist': [{'somelistitem': 'firststring'}, + {'somelistitem': 'secondstring'}, + {'somelistitem': 'thirdstring'}]} +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +OK: expected RuntimeError: No such scenario file: '[PATH]/selftest/scenario_test/scenario_case_01@.conf' (nor scenario_case_01@.conf) +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +OK: expected ValueError +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +OK: expected ValueError +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +OK: expected RuntimeError: No such scenario file: '[PATH]/selftest/scenario_test/scenario_case_03.conf' +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +OK: expected RuntimeError: No such scenario file: '[PATH]/selftest/scenario_test/scenario_case_03.conf' +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +tst scenario_case_03@heyho,1,yes.conf: DBG: {param_dict={param1='heyho', param2='1', param3='yes'}} +scenario_case_03@heyho,1,yes.conf +{'anotherlist': ['1', '0'], + 'foobar': 'True', + 'somelist': [{'somelistitem': 'firststring'}, + {'somelistitem': 'heyho'}, + {'somelistitem': 'thirdstring'}]} +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +tst scenario_case_03@heyho,1,yes.conf: DBG: {param_dict={param1='heyho', param2='1', param3='yes'}} +scenario_case_03@heyho,1,yes.conf +{'anotherlist': ['1', '0'], + 'foobar': 'True', + 'somelist': [{'somelistitem': 'firststring'}, + {'somelistitem': 'heyho'}, + {'somelistitem': 'thirdstring'}]} +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +tst scenario_case_03@heyho,1.conf: DBG: {param_dict={param1='heyho', param2='1'}} +OK: expected NameError: Undefined +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +tst scenario_case_03@heyho,1.conf: DBG: {param_dict={param1='heyho', param2='1'}} +OK: expected NameError: Undefined +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +tst scenario_case_03@specific.conf: DBG: {param_dict={param1='specific'}} +scenario_case_03@specific.conf +{'somelist': [{'somelistitem': 'specific'}]} +cnf -: DBG: Found path scenarios_dir as [PATH]/selftest/scenario_test +tst scenario_case_03@specific.conf: DBG: {param_dict={param1='specific'}} +scenario_case_03@specific.conf +{'somelist': [{'somelistitem': 'specific'}]} diff --git a/selftest/scenario_test/scenario_test.ok.ign b/selftest/scenario_test/scenario_test.ok.ign new file mode 100644 index 00000000..a19fb8bc --- /dev/null +++ b/selftest/scenario_test/scenario_test.ok.ign @@ -0,0 +1,2 @@ +/[^ ]*/selftest/ [PATH]/selftest/ +\.py:[0-9]* .py:[LINENR] diff --git a/selftest/scenario_test/scenario_test.py b/selftest/scenario_test/scenario_test.py new file mode 100755 index 00000000..f5f42f7d --- /dev/null +++ b/selftest/scenario_test/scenario_test.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +import _prep + +import sys +import os +import io +import pprint +import copy + +from osmo_gsm_tester.core import schema +from osmo_gsm_tester.core import config +from osmo_gsm_tester.core import scenario + +test_schema = { + 'somelist[].somelistitem': schema.STR, + 'anotherlist[]': schema.UINT, + 'foobar' : schema.BOOL_STR, + } + +config.override_conf = os.path.join(os.path.dirname(sys.argv[0])) + +def print_scenario(sc): + # we use copy() to be able to get the dictionary in super class of Scenario: + pprint.pprint(sc) + pprint.pprint(sc.copy()) + +def load_scenario(name, sch=None): + # Test it loads the same both with .conf and without + sc = scenario.get_scenario(name, sch) + print_scenario(sc) + sc = scenario.get_scenario(name + '.conf', sch) + print_scenario(sc) + return sc + +# scenario case 01 should load fine +load_scenario('scenario_case_01', test_schema) + +# Try loading scenario 1 as if it was parametrized (but it's not): +try: + sc = scenario.get_scenario('scenario_case_01@', test_schema) +except RuntimeError as e: + print('OK: expected RuntimeError: %s' % str(e)) + +# scenario case 02 should fail to load, contains stuff not in test_schema +try: + sc = scenario.get_scenario('scenario_case_02', test_schema) +except ValueError as e: + print('OK: expected ValueError') +try: + sc = scenario.get_scenario('scenario_case_02.conf', test_schema) +except ValueError as e: + print('OK: expected ValueError') + +# scenario case 3 is parametrized, so loading without specifying so should fail: +try: + sc = scenario.get_scenario('scenario_case_03', test_schema) +except RuntimeError as e: + print('OK: expected RuntimeError: %s' % str(e)) +try: + sc = scenario.get_scenario('scenario_case_03.conf', test_schema) +except RuntimeError as e: + print('OK: expected RuntimeError: %s' % str(e)) + +#scenario 3 should load fine this way: +sc = load_scenario('scenario_case_03@heyho,1,yes', test_schema) + +#scenario 3 should fail due to missing parameters: +try: + sc = scenario.get_scenario('scenario_case_03@heyho,1', test_schema) +except NameError as e: + print('OK: expected NameError: %s' % str(e)) +try: + sc = scenario.get_scenario('scenario_case_03@heyho,1.conf', test_schema) +except NameError as e: + print('OK: expected NameError: %s' % str(e)) + +#scenario 3 should load the specific config file this way: +sc = load_scenario('scenario_case_03@specific', test_schema) + +# vim: expandtab tabstop=4 shiftwidth=4