config: resolve real paths from symlinks, add paths debug logging

Tweak test expectations to include the new debug logging

Change-Id: I11a905b2467cda691d9ccea30ae436bac96476c9
This commit is contained in:
Neels Hofmeyr 2017-05-04 16:39:29 +02:00
parent 51cfd8e195
commit 496ae5a6b3
5 changed files with 29 additions and 6 deletions

View File

@ -9,6 +9,12 @@ The requested resource requirements are not solvable [[0, 2], [2], [0, 2]]
ok, caused exception: RuntimeError('Refusing to drop a list of resources from itself. This is probably a bug where a list of Resources() should have been copied but is passed as-is. use Resources.clear() instead.',)
- test removing a Resources list from one with the same list in it
- test resources config and state dir:
cnf -: DBG: Found config file paths.conf as [PATH]/selftest/conf/paths.conf in ./conf which is [PATH]/selftest/conf
cnf -: DBG: [PATH]/selftest/conf/paths.conf: relative path ./suite_test is [PATH]/selftest/conf/suite_test
cnf -: DBG: [PATH]/selftest/conf/paths.conf: relative path ./test_work/state_dir is [PATH]/selftest/conf/test_work/state_dir
cnf -: DBG: Found path state_dir as [PATH]/selftest/conf/test_work/state_dir
cnf -: DBG: Found config file resources.conf as [PATH]/selftest/conf/resources.conf in ./conf which is [PATH]/selftest/conf
cnf -: DBG: Found path state_dir as [PATH]/selftest/conf/test_work/state_dir
*** all resources:
{'arfcn': [{'_hash': 'e620569450f8259b3f0212ec19c285dd07df063c',
'arfcn': '512',

View File

@ -0,0 +1 @@
/[^ ]*/selftest/ [PATH]/selftest/

View File

@ -1,9 +1,15 @@
- non-existing suite dir
--- -: ERR: RuntimeError: Suite not found: 'does_not_exist' in ./suite_test/.
cnf -: DBG: Found config file paths.conf as [PATH]/selftest/suite_test/paths.conf in ./suite_test which is [PATH]/selftest/suite_test
cnf -: DBG: [PATH]/selftest/suite_test/paths.conf: relative path . is [PATH]/selftest/suite_test
cnf -: DBG: [PATH]/selftest/suite_test/paths.conf: relative path ./test_work/state_dir is [PATH]/selftest/suite_test/test_work/state_dir
cnf -: DBG: Found path suites_dir as [PATH]/selftest/suite_test
--- -: ERR: RuntimeError: Suite not found: 'does_not_exist' in [PATH]/selftest/suite_test
- no suite.conf
cnf -: DBG: Found path suites_dir as [PATH]/selftest/suite_test
cnf empty_dir: DBG: reading suite.conf [empty_dir↪empty_dir]
--- ./suite_test/./empty_dir/suite.conf: ERR: FileNotFoundError: [Errno 2] No such file or directory: './suite_test/./empty_dir/suite.conf' [empty_dir↪./suite_test/./empty_dir/suite.conf]
--- [PATH]/selftest/suite_test/empty_dir/suite.conf: ERR: FileNotFoundError: [Errno 2] No such file or directory: '[PATH]/selftest/suite_test/empty_dir/suite.conf' [empty_dir↪[PATH]/selftest/suite_test/empty_dir/suite.conf]
- valid suite dir
cnf -: DBG: Found path suites_dir as [PATH]/selftest/suite_test
cnf test_suite: DBG: reading suite.conf [test_suite↪test_suite]
defaults:
timeout: 60s
@ -16,6 +22,8 @@ resources:
- times: '1'
- run hello world test
cnf -: DBG: Found config file resources.conf as [PATH]/selftest/suite_test/resources.conf in ./suite_test which is [PATH]/selftest/suite_test
cnf -: DBG: Found path state_dir as [PATH]/selftest/suite_test/test_work/state_dir
tst test_suite: Suite run start
tst test_suite: reserving resources...
tst test_suite: DBG: {combining='resources'} [test_suite↪test_suite]

View File

@ -0,0 +1 @@
/[^ ]*/selftest/ [PATH]/selftest/

View File

@ -88,9 +88,11 @@ def _get_config_file(basename, fail_if_missing=True):
locations = DEFAULT_CONFIG_LOCATIONS
for l in locations:
p = os.path.join(l, basename)
real_l = os.path.realpath(l)
p = os.path.realpath(os.path.join(real_l, basename))
if os.path.isfile(p):
return (p, l)
log.dbg(None, log.C_CNF, 'Found config file', basename, 'as', p, 'in', l, 'which is', real_l)
return (p, real_l)
if not fail_if_missing:
return None, None
raise RuntimeError('configuration file not found: %r in %r' % (basename,
@ -115,20 +117,25 @@ def get_configured_path(label, allow_unset=False):
env_name = ENV_PREFIX + label.upper()
env_path = os.getenv(env_name)
if env_path:
return env_path
real_env_path = os.path.realpath(env_path)
log.dbg(None, log.C_CNF, 'Found path', label, 'as', env_path, 'in', '$' + env_name, 'which is', real_env_path)
return real_env_path
if PATHS is None:
paths_file, found_in = _get_config_file(PATHS_CONF)
PATHS = read(paths_file, PATHS_SCHEMA)
for key, path in PATHS.items():
if not path.startswith(os.pathsep):
PATHS[key] = os.path.join(found_in, path)
PATHS[key] = os.path.realpath(os.path.join(found_in, path))
log.dbg(None, log.C_CNF, paths_file + ': relative path', path, 'is', PATHS[key])
p = PATHS.get(label)
if p is None and not allow_unset:
raise RuntimeError('missing configuration in %s: %r' % (PATHS_CONF, label))
log.dbg(None, log.C_CNF, 'Found path', label, 'as', p)
if p.startswith(PATHS_TEMPDIR_STR):
p = os.path.join(get_tempdir(), p[len(PATHS_TEMPDIR_STR):])
log.dbg(None, log.C_CNF, 'Path', label, 'contained', PATHS_TEMPDIR_STR, 'and becomes', p)
return p
def get_state_dir():