<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18204">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Cmdline arg -c sets main configuration file (old paths.conf) instead of dir containing it<br><br>It has been notified that current configuration system is difficult to<br>understand and to use, so it has been envisioned to refactor it a bit.<br>The idea is that the user passes a -c path/to/main.conf file, which in<br>turn contains whatever osmo-gsm-tester main settings supports (basically<br>what old paths.conf used to be, plus some files harcoded to the same -c<br>directory are now configurable through the main configuration file).<br><br>TODO:<br>* Update documentation<br>* Update sample config files (doc/examples).<br>* Trial loaded from main.conf if not overriden by cmdline<br><br>Change-Id: Ieca65b71b543c44cfcec8e83efd0fe053c432e55<br>---<br>M contrib/jenkins-run.sh<br>M selftest/resource_test/resource_test.py<br>M selftest/scenario_test/scenario_test.py<br>M selftest/suite_test/suite_test.py<br>M src/osmo-gsm-tester.py<br>M src/osmo_gsm_tester/core/config.py<br>M src/osmo_gsm_tester/core/resource.py<br>R sysmocom/main.conf<br>M sysmocom/ttcn3/jenkins-run.sh<br>R sysmocom/ttcn3/main.conf<br>10 files changed, 108 insertions(+), 80 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/04/18204/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/contrib/jenkins-run.sh b/contrib/jenkins-run.sh</span><br><span>index 89ff13f..1c31a9d 100755</span><br><span>--- a/contrib/jenkins-run.sh</span><br><span>+++ b/contrib/jenkins-run.sh</span><br><span>@@ -2,7 +2,7 @@</span><br><span> set -e -x</span><br><span> base="$PWD"</span><br><span> SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P) # this file's directory</span><br><span style="color: hsl(0, 100%, 40%);">-OSMO_GSM_TESTER_CONF=${OSMO_GSM_TESTER_CONF:-${SCRIPT_DIR}/../sysmocom}</span><br><span style="color: hsl(120, 100%, 40%);">+OSMO_GSM_TESTER_CONF=${OSMO_GSM_TESTER_CONF:-${SCRIPT_DIR}/../sysmocom/main.conf}</span><br><span> </span><br><span> time_start="$(date '+%F %T')"</span><br><span> </span><br><span>diff --git a/selftest/resource_test/resource_test.py b/selftest/resource_test/resource_test.py</span><br><span>index b74ba2a..f18aa73 100755</span><br><span>--- a/selftest/resource_test/resource_test.py</span><br><span>+++ b/selftest/resource_test/resource_test.py</span><br><span>@@ -13,7 +13,7 @@</span><br><span> workdir = util.get_tempdir()</span><br><span> </span><br><span> # override config locations to make sure we use only the test conf</span><br><span style="color: hsl(0, 100%, 40%);">-config.override_conf = os.path.join(os.path.dirname(sys.argv[0]), 'conf')</span><br><span style="color: hsl(120, 100%, 40%);">+config.override_conf = os.path.join(os.path.dirname(sys.argv[0]), 'conf', 'paths.conf')</span><br><span> </span><br><span> log.get_process_id = lambda: '123-1490837279'</span><br><span> </span><br><span>diff --git a/selftest/scenario_test/scenario_test.py b/selftest/scenario_test/scenario_test.py</span><br><span>index f5f42f7..15f8983 100755</span><br><span>--- a/selftest/scenario_test/scenario_test.py</span><br><span>+++ b/selftest/scenario_test/scenario_test.py</span><br><span>@@ -18,7 +18,7 @@</span><br><span>     'foobar' : schema.BOOL_STR,</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-config.override_conf = os.path.join(os.path.dirname(sys.argv[0]))</span><br><span style="color: hsl(120, 100%, 40%);">+config.override_conf = os.path.join(os.path.dirname(sys.argv[0]), 'paths.conf')</span><br><span> </span><br><span> def print_scenario(sc):</span><br><span>     # we use copy() to be able to get the dictionary in super class of Scenario:</span><br><span>diff --git a/selftest/suite_test/suite_test.py b/selftest/suite_test/suite_test.py</span><br><span>index a096027..4b32439 100755</span><br><span>--- a/selftest/suite_test/suite_test.py</span><br><span>+++ b/selftest/suite_test/suite_test.py</span><br><span>@@ -11,7 +11,7 @@</span><br><span> from osmo_gsm_tester.core import suite</span><br><span> from osmo_gsm_tester.core.schema import generate_schemas, get_all_schema</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-config.override_conf = os.path.join(os.path.dirname(sys.argv[0]))</span><br><span style="color: hsl(120, 100%, 40%);">+config.override_conf = os.path.join(os.path.dirname(sys.argv[0]), 'paths.conf')</span><br><span> </span><br><span> example_trial_dir = os.path.join('test_trial_tmp')</span><br><span> </span><br><span>diff --git a/src/osmo-gsm-tester.py b/src/osmo-gsm-tester.py</span><br><span>index fb5574b..204b1c7 100755</span><br><span>--- a/src/osmo-gsm-tester.py</span><br><span>+++ b/src/osmo-gsm-tester.py</span><br><span>@@ -24,9 +24,9 @@</span><br><span> </span><br><span> Examples:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-./osmo-gsm-tester.py -c doc/examples/2g_osmocom/ ~/my_trial_package/ -s osmo_trx</span><br><span style="color: hsl(0, 100%, 40%);">-./osmo-gsm-tester.py -c doc/examples/2g_osmocom/ ~/my_trial_package/ -s sms_tests:dyn_ts+eu_band+bts_sysmo</span><br><span style="color: hsl(0, 100%, 40%);">-./osmo-gsm-tester.py -c sysmocom/ ~/my_trial_package/ -s sms_tests/mo_mt_sms:bts_trx</span><br><span style="color: hsl(120, 100%, 40%);">+./osmo-gsm-tester.py -c doc/examples/2g_osmocom/main.conf ~/my_trial_package/ -s osmo_trx</span><br><span style="color: hsl(120, 100%, 40%);">+./osmo-gsm-tester.py -c doc/examples/2g_osmocom/main.conf ~/my_trial_package/ -s sms_tests:dyn_ts+eu_band+bts_sysmo</span><br><span style="color: hsl(120, 100%, 40%);">+./osmo-gsm-tester.py -c sysmocom/main.conf ~/my_trial_package/ -s sms_tests/mo_mt_sms:bts_trx</span><br><span> </span><br><span> (The names for test suites and scenarios used in these examples must be defined</span><br><span> by the osmo-gsm-tester configuration.)</span><br><span>@@ -54,8 +54,9 @@</span><br><span> A test run thus needs to define:</span><br><span> * A trial package containing built binaries</span><br><span> * A set of test suites, each with its combinations of scenarios</span><br><span style="color: hsl(0, 100%, 40%);">-* A configuration directory specifying sets of resources, default configurations</span><br><span style="color: hsl(0, 100%, 40%);">-  and paths on where to find suites, scenarios, etc.</span><br><span style="color: hsl(120, 100%, 40%);">+* A main configuration file specifying paths to other files containing sets of</span><br><span style="color: hsl(120, 100%, 40%);">+  resources, default configurations and paths on where to find suites,</span><br><span style="color: hsl(120, 100%, 40%);">+  scenarios, etc.</span><br><span> </span><br><span> If no combination of suites and scenarios is provided, the default list of</span><br><span> suites will be run as defined in the osmo-gsm-tester configuration.</span><br><span>@@ -101,8 +102,8 @@</span><br><span>     # is easiest to maintain.</span><br><span>     parser.add_argument('-V', '--version', action='store_true',</span><br><span>             help='Show version')</span><br><span style="color: hsl(0, 100%, 40%);">-    parser.add_argument('-c', '--conf-dir', dest='conf_dir',</span><br><span style="color: hsl(0, 100%, 40%);">-            help='''Specify configuration directory path (containing paths.conf)''')</span><br><span style="color: hsl(120, 100%, 40%);">+    parser.add_argument('-c', '--conf-path', dest='conf_path',</span><br><span style="color: hsl(120, 100%, 40%);">+            help='''Specify main configuration file path''')</span><br><span>     parser.add_argument('trial_package',</span><br><span>             help='Directory containing binaries to test')</span><br><span>     parser.add_argument('-s', '--suite-scenario', dest='suite_scenario', action='append',</span><br><span>@@ -140,18 +141,18 @@</span><br><span>         log.style_change(trace=True)</span><br><span>     if args.source:</span><br><span>         log.style_change(src=True)</span><br><span style="color: hsl(0, 100%, 40%);">-    if args.conf_dir:</span><br><span style="color: hsl(0, 100%, 40%);">-        config.override_conf = args.conf_dir</span><br><span style="color: hsl(120, 100%, 40%);">+    if args.conf_path:</span><br><span style="color: hsl(120, 100%, 40%);">+        config.override_conf = args.conf_path</span><br><span> </span><br><span>     combination_strs = list(args.suite_scenario or [])</span><br><span> </span><br><span>     if not combination_strs:</span><br><span style="color: hsl(0, 100%, 40%);">-        combination_strs = config.read_config_file(config.DEFAULT_SUITES_CONF, if_missing_return=[])</span><br><span style="color: hsl(120, 100%, 40%);">+        combination_strs = config.read_config_file(config.CFG_DEFAULT_SUITES_CONF, if_missing_return=[])</span><br><span> </span><br><span>         if combination_strs:</span><br><span>             print('Running default suites:\n  ' + ('\n  '.join(combination_strs)))</span><br><span>         else:</span><br><span style="color: hsl(0, 100%, 40%);">-            print('No default suites configured (%r)' % config.DEFAULT_SUITES_CONF)</span><br><span style="color: hsl(120, 100%, 40%);">+            print('Failed to load default suites (%r)' % config.get_main_config_value(config.DEFAULT_SUITES_CONF, fail_if_missing=False))</span><br><span> </span><br><span> </span><br><span>     if not combination_strs:</span><br><span>diff --git a/src/osmo_gsm_tester/core/config.py b/src/osmo_gsm_tester/core/config.py</span><br><span>index 88e522d..991e724 100644</span><br><span>--- a/src/osmo_gsm_tester/core/config.py</span><br><span>+++ b/src/osmo_gsm_tester/core/config.py</span><br><span>@@ -53,6 +53,7 @@</span><br><span> import yaml</span><br><span> import os</span><br><span> import copy</span><br><span style="color: hsl(120, 100%, 40%);">+import pprint</span><br><span> </span><br><span> from . import log, util, template</span><br><span> from . import schema</span><br><span>@@ -60,94 +61,122 @@</span><br><span> </span><br><span> override_conf = None</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFAULT_CONFIG_LOCATIONS = [</span><br><span style="color: hsl(0, 100%, 40%);">-    '.',</span><br><span style="color: hsl(0, 100%, 40%);">-    os.path.join(os.getenv('HOME'), '.config', 'osmo-gsm-tester'),</span><br><span style="color: hsl(0, 100%, 40%);">-    '/usr/local/etc/osmo-gsm-tester',</span><br><span style="color: hsl(0, 100%, 40%);">-    '/etc/osmo-gsm-tester'</span><br><span style="color: hsl(0, 100%, 40%);">-    ]</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-PATHS_CONF = 'paths.conf'</span><br><span style="color: hsl(0, 100%, 40%);">-DEFAULT_SUITES_CONF = 'default-suites.conf'</span><br><span style="color: hsl(0, 100%, 40%);">-DEFAULTS_CONF = 'defaults.conf'</span><br><span style="color: hsl(0, 100%, 40%);">-RESOURCES_CONF = 'resources.conf'</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-PATH_STATE_DIR = 'state_dir'</span><br><span style="color: hsl(0, 100%, 40%);">-PATH_SUITES_DIR = 'suites_dir'</span><br><span style="color: hsl(0, 100%, 40%);">-PATH_SCENARIOS_DIR = 'scenarios_dir'</span><br><span style="color: hsl(0, 100%, 40%);">-PATHS_SCHEMA = {</span><br><span style="color: hsl(0, 100%, 40%);">-        PATH_STATE_DIR: schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">-        PATH_SUITES_DIR: schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">-        PATH_SCENARIOS_DIR: schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_STATE_DIR = 'state_dir'</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_SUITES_DIR = 'suites_dir'</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_SCENARIOS_DIR = 'scenarios_dir'</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_DEFAULT_SUITES_CONF = 'default_suites_conf_path'</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_DEFAULTS_CONF = 'defaults_conf_path'</span><br><span style="color: hsl(120, 100%, 40%);">+CFG_RESOURCES_CONF = 'resource_conf_path'</span><br><span style="color: hsl(120, 100%, 40%);">+MAIN_CONFIG_SCHEMA = {</span><br><span style="color: hsl(120, 100%, 40%);">+        CFG_STATE_DIR: schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        CFG_SUITES_DIR: schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        CFG_SCENARIOS_DIR: schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        CFG_DEFAULT_SUITES_CONF: schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        CFG_DEFAULTS_CONF: schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        CFG_RESOURCES_CONF: schema.STR,</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-PATHS_TEMPDIR_STR = '$TEMPDIR'</span><br><span style="color: hsl(120, 100%, 40%);">+DF_CFG_STATE_DIR = '/var/tmp/osmo-gsm-tester/state/'</span><br><span style="color: hsl(120, 100%, 40%);">+DF_CFG_SUITES_DIR = './suites'</span><br><span style="color: hsl(120, 100%, 40%);">+DF_CFG_SCENARIOS_DIR = './scenarios'</span><br><span style="color: hsl(120, 100%, 40%);">+DF_CFG_DEFAULT_SUITES_CONF = './default-suites.conf'</span><br><span style="color: hsl(120, 100%, 40%);">+DF_CFG_DEFAULTS_CONF = './defaults.conf'</span><br><span style="color: hsl(120, 100%, 40%);">+DF_CFG_RESOURCES_CONF = './resources.conf'</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-PATHS = None</span><br><span style="color: hsl(120, 100%, 40%);">+DEFAULT_CONFIG_FILENAME = 'main.conf'</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def _get_config_file(basename, fail_if_missing=True):</span><br><span style="color: hsl(120, 100%, 40%);">+DEFAULT_CONFIG_LOCATIONS = [</span><br><span style="color: hsl(120, 100%, 40%);">+    '.',</span><br><span style="color: hsl(120, 100%, 40%);">+    os.path.join(os.getenv('HOME'), '.config', 'osmo-gsm-tester', DEFAULT_CONFIG_FILENAME),</span><br><span style="color: hsl(120, 100%, 40%);">+    os.path.join('/usr/local/etc/osmo-gsm-tester', DEFAULT_CONFIG_FILENAME),</span><br><span style="color: hsl(120, 100%, 40%);">+    os.path.join('/etc/osmo-gsm-tester', DEFAULT_CONFIG_FILENAME)</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%);">+MAIN_CONFIG = None</span><br><span style="color: hsl(120, 100%, 40%);">+MAIN_CONFIG_PATH = None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def _find_main_config_path():</span><br><span>     if override_conf:</span><br><span>         locations = [ override_conf ]</span><br><span>     elif os.getenv('OSMO_GSM_TESTER_CONF'):</span><br><span>         ENV_CONF = os.getenv('OSMO_GSM_TESTER_CONF')</span><br><span style="color: hsl(0, 100%, 40%);">-        log.err('Using environment variable OSMO_GSM_TESTER_CONF=%s is deprecated. Rather use -c command line argument!' % ENV_CONF)</span><br><span style="color: hsl(0, 100%, 40%);">-        locations = [ ENV_CONF ]</span><br><span style="color: hsl(120, 100%, 40%);">+        log.err('Using environment variable OSMO_GSM_TESTER_CONF=%s(/paths.conf) is deprecated. Rather use -c command line argument!' % ENV_CONF)</span><br><span style="color: hsl(120, 100%, 40%);">+        locations = [ ENV_CONF + 'paths.conf' ] # directory is expected in OSMO_GSM_TESTER_CONF, bakcward compatibility</span><br><span>     else:</span><br><span>         locations = DEFAULT_CONFIG_LOCATIONS</span><br><span> </span><br><span>     for l in locations:</span><br><span>         real_l = os.path.realpath(l)</span><br><span style="color: hsl(0, 100%, 40%);">-        p = os.path.realpath(os.path.join(real_l, basename))</span><br><span style="color: hsl(0, 100%, 40%);">-        if os.path.isfile(p):</span><br><span style="color: hsl(0, 100%, 40%);">-            log.dbg('Found config file', basename, 'as', p, 'in', l, 'which is', real_l, _category=log.C_CNF)</span><br><span style="color: hsl(0, 100%, 40%);">-            return (p, real_l)</span><br><span style="color: hsl(0, 100%, 40%);">-    if not fail_if_missing:</span><br><span style="color: hsl(0, 100%, 40%);">-        return None, None</span><br><span style="color: hsl(0, 100%, 40%);">-    raise RuntimeError('configuration file not found: %r in %r' % (basename,</span><br><span style="color: hsl(0, 100%, 40%);">-        [os.path.abspath(p) for p in locations]))</span><br><span style="color: hsl(120, 100%, 40%);">+        if os.path.isfile(real_l):</span><br><span style="color: hsl(120, 100%, 40%);">+            log.dbg('Found main configuration file in ', l, 'which is', real_l, _category=log.C_CNF)</span><br><span style="color: hsl(120, 100%, 40%);">+            return real_l</span><br><span style="color: hsl(120, 100%, 40%);">+    raise RuntimeError('Main configuration file not found in %r' % ([l for l in locations]))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def get_config_file(basename, fail_if_missing=True):</span><br><span style="color: hsl(0, 100%, 40%);">-    path, found_in = _get_config_file(basename, fail_if_missing)</span><br><span style="color: hsl(120, 100%, 40%);">+def _get_main_config_path():</span><br><span style="color: hsl(120, 100%, 40%);">+    global MAIN_CONFIG_PATH</span><br><span style="color: hsl(120, 100%, 40%);">+    if MAIN_CONFIG_PATH is None:</span><br><span style="color: hsl(120, 100%, 40%);">+        MAIN_CONFIG_PATH = _find_main_config_path()</span><br><span style="color: hsl(120, 100%, 40%);">+    return MAIN_CONFIG_PATH</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def main_config_path_to_abspath(path):</span><br><span style="color: hsl(120, 100%, 40%);">+    'Relative files in main config are relative towards the config file, not towards $CWD'</span><br><span style="color: hsl(120, 100%, 40%);">+    if not path.startswith(os.pathsep):</span><br><span style="color: hsl(120, 100%, 40%);">+        return os.path.realpath(os.path.join(os.path.dirname(_get_main_config_path()), path))</span><br><span>     return path</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def read_config_file(basename, validation_schema=None, if_missing_return=False):</span><br><span style="color: hsl(120, 100%, 40%);">+def _get_main_config():</span><br><span style="color: hsl(120, 100%, 40%);">+    global MAIN_CONFIG</span><br><span style="color: hsl(120, 100%, 40%);">+    if MAIN_CONFIG is None:</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg = read(_get_main_config_path(), MAIN_CONFIG_SCHEMA)</span><br><span style="color: hsl(120, 100%, 40%);">+        MAIN_CONFIG = {</span><br><span style="color: hsl(120, 100%, 40%);">+            CFG_STATE_DIR: DF_CFG_STATE_DIR,</span><br><span style="color: hsl(120, 100%, 40%);">+            CFG_SUITES_DIR: DF_CFG_SUITES_DIR,</span><br><span style="color: hsl(120, 100%, 40%);">+            CFG_SCENARIOS_DIR: DF_CFG_SCENARIOS_DIR,</span><br><span style="color: hsl(120, 100%, 40%);">+            CFG_DEFAULT_SUITES_CONF: DF_CFG_DEFAULT_SUITES_CONF,</span><br><span style="color: hsl(120, 100%, 40%);">+            CFG_DEFAULTS_CONF: DF_CFG_DEFAULTS_CONF,</span><br><span style="color: hsl(120, 100%, 40%);">+            CFG_RESOURCES_CONF: DF_CFG_RESOURCES_CONF,</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+        overlay(MAIN_CONFIG, cfg)</span><br><span style="color: hsl(120, 100%, 40%);">+        for key, path in sorted(MAIN_CONFIG.items()):</span><br><span style="color: hsl(120, 100%, 40%);">+             MAIN_CONFIG[key] = main_config_path_to_abspath(path)</span><br><span style="color: hsl(120, 100%, 40%);">+        log.dbg('MAIN CONFIG:\n' + pprint.pformat(MAIN_CONFIG), _category=log.C_CNF)</span><br><span style="color: hsl(120, 100%, 40%);">+    return MAIN_CONFIG</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def get_main_config_value(cfg_name, fail_if_missing=True):</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg = _get_main_config()</span><br><span style="color: hsl(120, 100%, 40%);">+    f = cfg.get(cfg_name, None)</span><br><span style="color: hsl(120, 100%, 40%);">+    if f is None and fail_if_missing:</span><br><span style="color: hsl(120, 100%, 40%);">+        raise RuntimeError('Missing configuration %s' % (cfg_name))</span><br><span style="color: hsl(120, 100%, 40%);">+    return f</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def read_config_file(cfg_name, validation_schema=None, if_missing_return=False):</span><br><span style="color: hsl(120, 100%, 40%);">+    '''Read content of config file cfg_name (referring to key in main config).</span><br><span style="color: hsl(120, 100%, 40%);">+    If "if_missing_return" is different than False, then instead of failing it will return whatever it is stored in that arg</span><br><span style="color: hsl(120, 100%, 40%);">+    '''</span><br><span>     fail_if_missing = True</span><br><span>     if if_missing_return is not False:</span><br><span>         fail_if_missing = False</span><br><span style="color: hsl(0, 100%, 40%);">-    path = get_config_file(basename, fail_if_missing=fail_if_missing)</span><br><span style="color: hsl(120, 100%, 40%);">+    path = get_main_config_value(cfg_name, fail_if_missing=fail_if_missing)</span><br><span>     if path is None:</span><br><span>         return if_missing_return</span><br><span>     return read(path, validation_schema=validation_schema, if_missing_return=if_missing_return)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def get_configured_path(label, allow_unset=False):</span><br><span style="color: hsl(0, 100%, 40%);">-    global PATHS</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if PATHS is None:</span><br><span style="color: hsl(0, 100%, 40%);">-        paths_file, found_in = _get_config_file(PATHS_CONF)</span><br><span style="color: hsl(0, 100%, 40%);">-        PATHS = read(paths_file, PATHS_SCHEMA)</span><br><span style="color: hsl(0, 100%, 40%);">-        # sorted for deterministic regression test results</span><br><span style="color: hsl(0, 100%, 40%);">-        for key, path in sorted(PATHS.items()):</span><br><span style="color: hsl(0, 100%, 40%);">-            if not path.startswith(os.pathsep):</span><br><span style="color: hsl(0, 100%, 40%);">-                PATHS[key] = os.path.realpath(os.path.join(found_in, path))</span><br><span style="color: hsl(0, 100%, 40%);">-                log.dbg(paths_file + ': relative path', path, 'is', PATHS[key], _category=log.C_CNF)</span><br><span style="color: hsl(0, 100%, 40%);">-    p = PATHS.get(label)</span><br><span style="color: hsl(0, 100%, 40%);">-    if p is None and not allow_unset:</span><br><span style="color: hsl(0, 100%, 40%);">-        raise RuntimeError('missing configuration in %s: %r' % (PATHS_CONF, label))</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    log.dbg('Found path', label, 'as', p, _category=log.C_CNF)</span><br><span style="color: hsl(0, 100%, 40%);">-    if p.startswith(PATHS_TEMPDIR_STR):</span><br><span style="color: hsl(0, 100%, 40%);">-        p = os.path.join(get_tempdir(), p[len(PATHS_TEMPDIR_STR):])</span><br><span style="color: hsl(0, 100%, 40%);">-        log.dbg('Path', label, 'contained', PATHS_TEMPDIR_STR, 'and becomes', p, _category=log.C_CNF)</span><br><span style="color: hsl(0, 100%, 40%);">-    return p</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> def get_state_dir():</span><br><span style="color: hsl(0, 100%, 40%);">-    return Dir(get_configured_path(PATH_STATE_DIR))</span><br><span style="color: hsl(120, 100%, 40%);">+    return Dir(get_main_config_value(CFG_STATE_DIR))</span><br><span> </span><br><span> def get_suites_dir():</span><br><span style="color: hsl(0, 100%, 40%);">-    return Dir(get_configured_path(PATH_SUITES_DIR))</span><br><span style="color: hsl(120, 100%, 40%);">+    return Dir(get_main_config_value(CFG_SUITES_DIR))</span><br><span> </span><br><span> def get_scenarios_dir():</span><br><span style="color: hsl(0, 100%, 40%);">-    return Dir(get_configured_path(PATH_SCENARIOS_DIR))</span><br><span style="color: hsl(120, 100%, 40%);">+    return Dir(get_main_config_value(CFG_SCENARIOS_DIR))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFAULTS_CONF = None</span><br><span style="color: hsl(120, 100%, 40%);">+def get_defaults(for_kind):</span><br><span style="color: hsl(120, 100%, 40%);">+    global DEFAULTS_CONF</span><br><span style="color: hsl(120, 100%, 40%);">+    if DEFAULTS_CONF is None:</span><br><span style="color: hsl(120, 100%, 40%);">+        DEFAULTS_CONF = read_config_file(CFG_DEFAULTS_CONF, if_missing_return={})</span><br><span style="color: hsl(120, 100%, 40%);">+    defaults = DEFAULTS_CONF.get(for_kind, {})</span><br><span style="color: hsl(120, 100%, 40%);">+    return copy.deepcopy(defaults)</span><br><span> </span><br><span> def read(path, validation_schema=None, if_missing_return=False):</span><br><span>     log.ctx(path)</span><br><span>@@ -191,10 +220,6 @@</span><br><span>     config = yaml.safe_load(_tostr(_standardize_item(config)))</span><br><span>     return config</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def get_defaults(for_kind):</span><br><span style="color: hsl(0, 100%, 40%);">-    defaults = read_config_file(DEFAULTS_CONF, if_missing_return={})</span><br><span style="color: hsl(0, 100%, 40%);">-    return defaults.get(for_kind, {})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> def overlay(dest, src):</span><br><span>     if is_dict(dest):</span><br><span>         if not is_dict(src):</span><br><span>diff --git a/src/osmo_gsm_tester/core/resource.py b/src/osmo_gsm_tester/core/resource.py</span><br><span>index a1a8ea5..af05a51 100644</span><br><span>--- a/src/osmo_gsm_tester/core/resource.py</span><br><span>+++ b/src/osmo_gsm_tester/core/resource.py</span><br><span>@@ -48,7 +48,7 @@</span><br><span>     _registered_exit_handler = False</span><br><span> </span><br><span>     def __init__(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        self.config_path = config.get_config_file(config.RESOURCES_CONF)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.config_path = config.get_main_config_value(config.CFG_RESOURCES_CONF)</span><br><span>         self.state_dir = config.get_state_dir()</span><br><span>         super().__init__(log.C_CNF, conf=self.config_path, state=self.state_dir.path)</span><br><span>         self.read_conf()</span><br><span>diff --git a/sysmocom/paths.conf b/sysmocom/main.conf</span><br><span>similarity index 100%</span><br><span>rename from sysmocom/paths.conf</span><br><span>rename to sysmocom/main.conf</span><br><span>diff --git a/sysmocom/ttcn3/jenkins-run.sh b/sysmocom/ttcn3/jenkins-run.sh</span><br><span>index c744606..2bc687d 100755</span><br><span>--- a/sysmocom/ttcn3/jenkins-run.sh</span><br><span>+++ b/sysmocom/ttcn3/jenkins-run.sh</span><br><span>@@ -1,6 +1,8 @@</span><br><span> #!/bin/sh</span><br><span> set -e -x</span><br><span> base="$PWD"</span><br><span style="color: hsl(120, 100%, 40%);">+SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P) # this file's directory</span><br><span style="color: hsl(120, 100%, 40%);">+OSMO_GSM_TESTER_CONF=${OSMO_GSM_TESTER_CONF:-${SCRIPT_DIR}/main.conf}</span><br><span> </span><br><span> time_start="$(date '+%F %T')"</span><br><span> </span><br><span>diff --git a/sysmocom/ttcn3/paths.conf b/sysmocom/ttcn3/main.conf</span><br><span>similarity index 100%</span><br><span>rename from sysmocom/ttcn3/paths.conf</span><br><span>rename to sysmocom/ttcn3/main.conf</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18204">change 18204</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/+/18204"/><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: Ieca65b71b543c44cfcec8e83efd0fe053c432e55 </div>
<div style="display:none"> Gerrit-Change-Number: 18204 </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-MessageType: newchange </div>