Remove tests for deprecated alternate processing
This commit is contained in:
parent
1e6f198552
commit
a66d3c148c
2 changed files with 0 additions and 651 deletions
|
@ -1,453 +0,0 @@
|
||||||
"""Test alt"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import string
|
|
||||||
import py
|
|
||||||
import pytest
|
|
||||||
import utils
|
|
||||||
|
|
||||||
# These tests are for the alternate processing in YADM_COMPATIBILITY=1 mode
|
|
||||||
pytestmark = pytest.mark.deprecated
|
|
||||||
|
|
||||||
# These test IDs are broken. During the writing of these tests, problems have
|
|
||||||
# been discovered in the way yadm orders matching files.
|
|
||||||
BROKEN_TEST_IDS = [
|
|
||||||
'test_wild[tracked-##C.S.H.U-C-S%-H%-U]',
|
|
||||||
'test_wild[tracked-##C.S.H.U-C-S-H%-U]',
|
|
||||||
'test_wild[encrypted-##C.S.H.U-C-S%-H%-U]',
|
|
||||||
'test_wild[encrypted-##C.S.H.U-C-S-H%-U]',
|
|
||||||
]
|
|
||||||
|
|
||||||
PRECEDENCE = [
|
|
||||||
'##',
|
|
||||||
'##$tst_sys',
|
|
||||||
'##$tst_sys.$tst_host',
|
|
||||||
'##$tst_sys.$tst_host.$tst_user',
|
|
||||||
'##$tst_class',
|
|
||||||
'##$tst_class.$tst_sys',
|
|
||||||
'##$tst_class.$tst_sys.$tst_host',
|
|
||||||
'##$tst_class.$tst_sys.$tst_host.$tst_user',
|
|
||||||
]
|
|
||||||
|
|
||||||
WILD_TEMPLATES = [
|
|
||||||
'##$tst_class',
|
|
||||||
'##$tst_class.$tst_sys',
|
|
||||||
'##$tst_class.$tst_sys.$tst_host',
|
|
||||||
'##$tst_class.$tst_sys.$tst_host.$tst_user',
|
|
||||||
]
|
|
||||||
|
|
||||||
TEST_PATHS = [utils.ALT_FILE1, utils.ALT_FILE2, utils.ALT_DIR]
|
|
||||||
|
|
||||||
WILD_TESTED = set()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('precedence_index', range(len(PRECEDENCE)))
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
'tracked, encrypt, exclude', [
|
|
||||||
(False, False, False),
|
|
||||||
(True, False, False),
|
|
||||||
(False, True, False),
|
|
||||||
(False, True, True),
|
|
||||||
], ids=[
|
|
||||||
'untracked',
|
|
||||||
'tracked',
|
|
||||||
'encrypted',
|
|
||||||
'excluded',
|
|
||||||
])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_alt(runner, yadm_y, paths,
|
|
||||||
tst_sys, tst_host, tst_user,
|
|
||||||
tracked, encrypt, exclude,
|
|
||||||
precedence_index):
|
|
||||||
"""Test alternate linking
|
|
||||||
|
|
||||||
This test is done by iterating for the number of templates in PRECEDENCE.
|
|
||||||
With each iteration, another file is left off the list. So with each
|
|
||||||
iteration, the template with the "highest precedence" is left out. The file
|
|
||||||
using the highest precedence should be the one linked.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# set the class
|
|
||||||
tst_class = 'testclass'
|
|
||||||
utils.set_local(paths, 'class', tst_class)
|
|
||||||
|
|
||||||
# process the templates in PRECEDENCE
|
|
||||||
precedence = list()
|
|
||||||
for template in PRECEDENCE:
|
|
||||||
precedence.append(
|
|
||||||
string.Template(template).substitute(
|
|
||||||
tst_class=tst_class,
|
|
||||||
tst_host=tst_host,
|
|
||||||
tst_sys=tst_sys,
|
|
||||||
tst_user=tst_user,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# create files using a subset of files
|
|
||||||
for suffix in precedence[0:precedence_index+1]:
|
|
||||||
utils.create_alt_files(paths, suffix, tracked=tracked,
|
|
||||||
encrypt=encrypt, exclude=exclude)
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + precedence[precedence_index]
|
|
||||||
if tracked or (encrypt and not exclude):
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(
|
|
||||||
os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert not paths.work.join(file_path).exists()
|
|
||||||
assert str(paths.work.join(source_file)) not in linked
|
|
||||||
|
|
||||||
|
|
||||||
def short_template(template):
|
|
||||||
"""Translate template into something short for test IDs"""
|
|
||||||
return string.Template(template).substitute(
|
|
||||||
tst_class='C',
|
|
||||||
tst_host='H',
|
|
||||||
tst_sys='S',
|
|
||||||
tst_user='U',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('wild_user', [True, False], ids=['U%', 'U'])
|
|
||||||
@pytest.mark.parametrize('wild_host', [True, False], ids=['H%', 'H'])
|
|
||||||
@pytest.mark.parametrize('wild_sys', [True, False], ids=['S%', 'S'])
|
|
||||||
@pytest.mark.parametrize('wild_class', [True, False], ids=['C%', 'C'])
|
|
||||||
@pytest.mark.parametrize('template', WILD_TEMPLATES, ids=short_template)
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
'tracked, encrypt', [
|
|
||||||
(True, False),
|
|
||||||
(False, True),
|
|
||||||
], ids=[
|
|
||||||
'tracked',
|
|
||||||
'encrypted',
|
|
||||||
])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_wild(request, runner, yadm_y, paths,
|
|
||||||
tst_sys, tst_host, tst_user,
|
|
||||||
tracked, encrypt,
|
|
||||||
wild_class, wild_host, wild_sys, wild_user,
|
|
||||||
template):
|
|
||||||
"""Test wild linking
|
|
||||||
|
|
||||||
These tests are done by creating permutations of the possible files using
|
|
||||||
WILD_TEMPLATES. Each case is then tested (while skipping the already tested
|
|
||||||
permutations for efficiency).
|
|
||||||
"""
|
|
||||||
|
|
||||||
if request.node.name in BROKEN_TEST_IDS:
|
|
||||||
pytest.xfail(
|
|
||||||
'This test is known to be broken. '
|
|
||||||
'This bug only affects deprecated features.')
|
|
||||||
|
|
||||||
tst_class = 'testclass'
|
|
||||||
|
|
||||||
# determine the "wild" version of the suffix
|
|
||||||
str_class = '%' if wild_class else tst_class
|
|
||||||
str_host = '%' if wild_host else tst_host
|
|
||||||
str_sys = '%' if wild_sys else tst_sys
|
|
||||||
str_user = '%' if wild_user else tst_user
|
|
||||||
wild_suffix = string.Template(template).substitute(
|
|
||||||
tst_class=str_class,
|
|
||||||
tst_host=str_host,
|
|
||||||
tst_sys=str_sys,
|
|
||||||
tst_user=str_user,
|
|
||||||
)
|
|
||||||
|
|
||||||
# determine the "standard" version of the suffix
|
|
||||||
std_suffix = string.Template(template).substitute(
|
|
||||||
tst_class=tst_class,
|
|
||||||
tst_host=tst_host,
|
|
||||||
tst_sys=tst_sys,
|
|
||||||
tst_user=tst_user,
|
|
||||||
)
|
|
||||||
|
|
||||||
# skip over duplicate tests (this seems to be the simplest way to cover the
|
|
||||||
# permutations of tests, while skipping duplicates.)
|
|
||||||
test_key = f'{tracked}{encrypt}{wild_suffix}{std_suffix}'
|
|
||||||
if test_key in WILD_TESTED:
|
|
||||||
return
|
|
||||||
WILD_TESTED.add(test_key)
|
|
||||||
|
|
||||||
# set the class
|
|
||||||
utils.set_local(paths, 'class', tst_class)
|
|
||||||
|
|
||||||
# create files using the wild suffix
|
|
||||||
utils.create_alt_files(paths, wild_suffix, tracked=tracked,
|
|
||||||
encrypt=encrypt, exclude=False)
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + wild_suffix
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
|
|
||||||
# create files using the standard suffix
|
|
||||||
utils.create_alt_files(paths, std_suffix, tracked=tracked,
|
|
||||||
encrypt=encrypt, exclude=False)
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + std_suffix
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_local_override(runner, yadm_y, paths,
|
|
||||||
tst_sys, tst_host, tst_user):
|
|
||||||
"""Test local overrides"""
|
|
||||||
|
|
||||||
# define local overrides
|
|
||||||
utils.set_local(paths, 'class', 'or-class')
|
|
||||||
utils.set_local(paths, 'hostname', 'or-hostname')
|
|
||||||
utils.set_local(paths, 'os', 'or-os')
|
|
||||||
utils.set_local(paths, 'user', 'or-user')
|
|
||||||
|
|
||||||
# create files, the first would normally be the most specific version
|
|
||||||
# however, the second is the overridden version which should be preferred.
|
|
||||||
utils.create_alt_files(
|
|
||||||
paths, f'##or-class.{tst_sys}.{tst_host}.{tst_user}')
|
|
||||||
utils.create_alt_files(
|
|
||||||
paths, '##or-class.or-os.or-hostname.or-user')
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + '##or-class.or-os.or-hostname.or-user'
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('suffix', ['AAA', 'ZZZ', 'aaa', 'zzz'])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_class_case(runner, yadm_y, paths, tst_sys, suffix):
|
|
||||||
"""Test range of class cases"""
|
|
||||||
|
|
||||||
# set the class
|
|
||||||
utils.set_local(paths, 'class', suffix)
|
|
||||||
|
|
||||||
# create files
|
|
||||||
endings = [suffix]
|
|
||||||
if tst_sys == 'Linux':
|
|
||||||
# Only create all of these side-by-side on Linux, which is
|
|
||||||
# unquestionably case-sensitive. This would break tests on
|
|
||||||
# case-insensitive systems.
|
|
||||||
endings = ['AAA', 'ZZZ', 'aaa', 'zzz']
|
|
||||||
for ending in endings:
|
|
||||||
utils.create_alt_files(paths, f'##{ending}')
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + f'##{suffix}'
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('autoalt', [None, 'true', 'false'])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_auto_alt(runner, yadm_y, paths, autoalt):
|
|
||||||
"""Test setting auto-alt"""
|
|
||||||
|
|
||||||
# set the value of auto-alt
|
|
||||||
if autoalt:
|
|
||||||
os.system(' '.join(yadm_y('config', 'yadm.auto-alt', autoalt)))
|
|
||||||
|
|
||||||
# create file
|
|
||||||
suffix = '##'
|
|
||||||
utils.create_alt_files(paths, suffix)
|
|
||||||
|
|
||||||
# run status to possibly trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('status'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + suffix
|
|
||||||
if autoalt == 'false':
|
|
||||||
assert not paths.work.join(file_path).exists()
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(
|
|
||||||
os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
# no linking output when run via auto-alt
|
|
||||||
assert str(paths.work.join(source_file)) not in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
# no linking output when run via auto-alt
|
|
||||||
assert str(paths.work.join(source_file)) not in linked
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('delimiter', ['.', '_'])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_delimiter(runner, yadm_y, paths,
|
|
||||||
tst_sys, tst_host, tst_user, delimiter):
|
|
||||||
"""Test delimiters used"""
|
|
||||||
|
|
||||||
suffix = '##' + delimiter.join([tst_sys, tst_host, tst_user])
|
|
||||||
|
|
||||||
# create file
|
|
||||||
utils.create_alt_files(paths, suffix)
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
# only a delimiter of '.' is valid
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + suffix
|
|
||||||
if delimiter == '.':
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(
|
|
||||||
os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert not paths.work.join(file_path).exists()
|
|
||||||
assert str(paths.work.join(source_file)) not in linked
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_invalid_links_removed(runner, yadm_y, paths):
|
|
||||||
"""Links to invalid alternative files are removed
|
|
||||||
|
|
||||||
This test ensures that when an already linked alternative becomes invalid
|
|
||||||
due to a change in class, the alternate link is removed.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# set the class
|
|
||||||
tst_class = 'testclass'
|
|
||||||
utils.set_local(paths, 'class', tst_class)
|
|
||||||
|
|
||||||
# create files which match the test class
|
|
||||||
utils.create_alt_files(paths, f'##{tst_class}')
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the proper linking has occurred
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + '##' + tst_class
|
|
||||||
assert paths.work.join(file_path).islink()
|
|
||||||
target = py.path.local(os.path.realpath(paths.work.join(file_path)))
|
|
||||||
if target.isfile():
|
|
||||||
assert paths.work.join(file_path).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).join(
|
|
||||||
utils.CONTAINED).read() == source_file
|
|
||||||
assert str(paths.work.join(source_file)) in linked
|
|
||||||
|
|
||||||
# change the class so there are no valid alternates
|
|
||||||
utils.set_local(paths, 'class', 'changedclass')
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
linked = utils.parse_alt_output(run.out)
|
|
||||||
|
|
||||||
# assert the linking is removed
|
|
||||||
for file_path in TEST_PATHS:
|
|
||||||
source_file = file_path + '##' + tst_class
|
|
||||||
assert not paths.work.join(file_path).exists()
|
|
||||||
assert str(paths.work.join(source_file)) not in linked
|
|
|
@ -1,198 +0,0 @@
|
||||||
"""Test jinja"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import pytest
|
|
||||||
import utils
|
|
||||||
|
|
||||||
# These tests are for the template processing in YADM_COMPATIBILITY=1 mode
|
|
||||||
pytestmark = pytest.mark.deprecated
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='module')
|
|
||||||
def envtpl_present(runner):
|
|
||||||
"""Is envtpl present and working?"""
|
|
||||||
try:
|
|
||||||
run = runner(command=['envtpl', '-h'])
|
|
||||||
if run.success:
|
|
||||||
return True
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_local_override(runner, yadm_y, paths,
|
|
||||||
tst_distro, envtpl_present):
|
|
||||||
"""Test local overrides"""
|
|
||||||
if not envtpl_present:
|
|
||||||
pytest.skip('Unable to test without envtpl.')
|
|
||||||
|
|
||||||
# define local overrides
|
|
||||||
utils.set_local(paths, 'class', 'or-class')
|
|
||||||
utils.set_local(paths, 'hostname', 'or-hostname')
|
|
||||||
utils.set_local(paths, 'os', 'or-os')
|
|
||||||
utils.set_local(paths, 'user', 'or-user')
|
|
||||||
|
|
||||||
template = (
|
|
||||||
'j2-{{ YADM_CLASS }}-'
|
|
||||||
'{{ YADM_OS }}-{{ YADM_HOSTNAME }}-'
|
|
||||||
'{{ YADM_USER }}-{{ YADM_DISTRO }}'
|
|
||||||
'-{%- '
|
|
||||||
f"include '{utils.INCLUDE_FILE}'"
|
|
||||||
' -%}'
|
|
||||||
)
|
|
||||||
expected = (
|
|
||||||
f'j2-or-class-or-os-or-hostname-or-user-{tst_distro}'
|
|
||||||
f'-{utils.INCLUDE_CONTENT}'
|
|
||||||
)
|
|
||||||
|
|
||||||
utils.create_alt_files(paths, '##yadm.j2', content=template,
|
|
||||||
includefile=True)
|
|
||||||
|
|
||||||
# os.system(f'find {paths.work}' + ' -name *j2 -ls -exec cat \'{}\' ";"')
|
|
||||||
# os.system(f'find {paths.work}')
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
created = utils.parse_alt_output(run.out, linked=False)
|
|
||||||
|
|
||||||
# assert the proper creation has occurred
|
|
||||||
for file_path in (utils.ALT_FILE1, utils.ALT_FILE2):
|
|
||||||
source_file = file_path + '##yadm.j2'
|
|
||||||
assert paths.work.join(file_path).isfile()
|
|
||||||
lines = paths.work.join(file_path).readlines(cr=False)
|
|
||||||
assert lines[0] == source_file
|
|
||||||
assert lines[1] == expected
|
|
||||||
assert str(paths.work.join(source_file)) in created
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('autoalt', [None, 'true', 'false'])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_auto_alt(runner, yadm_y, paths, autoalt, tst_sys,
|
|
||||||
envtpl_present):
|
|
||||||
"""Test setting auto-alt"""
|
|
||||||
|
|
||||||
if not envtpl_present:
|
|
||||||
pytest.skip('Unable to test without envtpl.')
|
|
||||||
|
|
||||||
# set the value of auto-alt
|
|
||||||
if autoalt:
|
|
||||||
os.system(' '.join(yadm_y('config', 'yadm.auto-alt', autoalt)))
|
|
||||||
|
|
||||||
# create file
|
|
||||||
jinja_suffix = '##yadm.j2'
|
|
||||||
utils.create_alt_files(paths, jinja_suffix, content='{{ YADM_OS }}')
|
|
||||||
|
|
||||||
# run status to possibly trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('status'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
created = utils.parse_alt_output(run.out, linked=False)
|
|
||||||
|
|
||||||
# assert the proper creation has occurred
|
|
||||||
for file_path in (utils.ALT_FILE1, utils.ALT_FILE2):
|
|
||||||
source_file = file_path + jinja_suffix
|
|
||||||
if autoalt == 'false':
|
|
||||||
assert not paths.work.join(file_path).exists()
|
|
||||||
else:
|
|
||||||
assert paths.work.join(file_path).isfile()
|
|
||||||
lines = paths.work.join(file_path).readlines(cr=False)
|
|
||||||
assert lines[0] == source_file
|
|
||||||
assert lines[1] == tst_sys
|
|
||||||
# no created output when run via auto-alt
|
|
||||||
assert str(paths.work.join(source_file)) not in created
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_jinja_envtpl_missing(runner, paths):
|
|
||||||
"""Test operation when envtpl is missing"""
|
|
||||||
|
|
||||||
script = f"""
|
|
||||||
YADM_TEST=1 source {paths.pgm}
|
|
||||||
process_global_args -Y "{paths.yadm}"
|
|
||||||
set_operating_system
|
|
||||||
configure_paths
|
|
||||||
YADM_COMPATIBILITY=1
|
|
||||||
ENVTPL_PROGRAM='envtpl_missing' main alt
|
|
||||||
"""
|
|
||||||
|
|
||||||
utils.create_alt_files(paths, '##yadm.j2')
|
|
||||||
|
|
||||||
run = runner(command=['bash'], inp=script)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
assert f'envtpl not available, not creating' in run.out
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
'tracked, encrypt, exclude', [
|
|
||||||
(False, False, False),
|
|
||||||
(True, False, False),
|
|
||||||
(False, True, False),
|
|
||||||
(False, True, True),
|
|
||||||
], ids=[
|
|
||||||
'untracked',
|
|
||||||
'tracked',
|
|
||||||
'encrypted',
|
|
||||||
'excluded',
|
|
||||||
])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_jinja(runner, yadm_y, paths,
|
|
||||||
tst_sys, tst_host, tst_user, tst_distro,
|
|
||||||
tracked, encrypt, exclude,
|
|
||||||
envtpl_present):
|
|
||||||
"""Test jinja processing"""
|
|
||||||
|
|
||||||
if not envtpl_present:
|
|
||||||
pytest.skip('Unable to test without envtpl.')
|
|
||||||
|
|
||||||
jinja_suffix = '##yadm.j2'
|
|
||||||
|
|
||||||
# set the class
|
|
||||||
tst_class = 'testclass'
|
|
||||||
utils.set_local(paths, 'class', tst_class)
|
|
||||||
|
|
||||||
template = (
|
|
||||||
'j2-{{ YADM_CLASS }}-'
|
|
||||||
'{{ YADM_OS }}-{{ YADM_HOSTNAME }}-'
|
|
||||||
'{{ YADM_USER }}-{{ YADM_DISTRO }}'
|
|
||||||
'-{%- '
|
|
||||||
f"include '{utils.INCLUDE_FILE}'"
|
|
||||||
' -%}'
|
|
||||||
)
|
|
||||||
expected = (
|
|
||||||
f'j2-{tst_class}-'
|
|
||||||
f'{tst_sys}-{tst_host}-'
|
|
||||||
f'{tst_user}-{tst_distro}'
|
|
||||||
f'-{utils.INCLUDE_CONTENT}'
|
|
||||||
)
|
|
||||||
|
|
||||||
utils.create_alt_files(paths, jinja_suffix, content=template,
|
|
||||||
tracked=tracked, encrypt=encrypt, exclude=exclude,
|
|
||||||
includefile=True)
|
|
||||||
|
|
||||||
# run alt to trigger linking
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
created = utils.parse_alt_output(run.out, linked=False)
|
|
||||||
|
|
||||||
# assert the proper creation has occurred
|
|
||||||
for file_path in (utils.ALT_FILE1, utils.ALT_FILE2):
|
|
||||||
source_file = file_path + jinja_suffix
|
|
||||||
if tracked or (encrypt and not exclude):
|
|
||||||
assert paths.work.join(file_path).isfile()
|
|
||||||
lines = paths.work.join(file_path).readlines(cr=False)
|
|
||||||
assert lines[0] == source_file
|
|
||||||
assert lines[1] == expected
|
|
||||||
assert str(paths.work.join(source_file)) in created
|
|
||||||
else:
|
|
||||||
assert not paths.work.join(file_path).exists()
|
|
||||||
assert str(paths.work.join(source_file)) not in created
|
|
Loading…
Reference in a new issue