<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>