Preserve file mode of template (#193)
Any processed templates will inherit the file mode of the source template.pull/246/head
parent
6654e29c62
commit
102ba5d558
@ -0,0 +1,53 @@
|
||||
"""Unit tests: copy_perms"""
|
||||
import os
|
||||
import pytest
|
||||
|
||||
OCTAL = '7654'
|
||||
NON_OCTAL = '9876'
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'stat_broken', [True, False], ids=['normal', 'stat broken'])
|
||||
def test_copy_perms(runner, yadm, tmpdir, stat_broken):
|
||||
"""Test function copy_perms"""
|
||||
src_mode = 0o754
|
||||
dst_mode = 0o644
|
||||
source = tmpdir.join('source')
|
||||
source.write('test', ensure=True)
|
||||
source.chmod(src_mode)
|
||||
|
||||
dest = tmpdir.join('dest')
|
||||
dest.write('test', ensure=True)
|
||||
dest.chmod(dst_mode)
|
||||
|
||||
override_stat = ''
|
||||
if stat_broken:
|
||||
override_stat = 'function stat() { echo broken; }'
|
||||
script = f"""
|
||||
YADM_TEST=1 source {yadm}
|
||||
{override_stat}
|
||||
copy_perms "{source}" "{dest}"
|
||||
"""
|
||||
run = runner(command=['bash'], inp=script)
|
||||
assert run.success
|
||||
assert run.err == ''
|
||||
assert run.out == ''
|
||||
expected = dst_mode if stat_broken else src_mode
|
||||
assert oct(os.stat(dest).st_mode)[-3:] == oct(expected)[-3:]
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'stat_output', [OCTAL, NON_OCTAL], ids=['octal', 'non-octal'])
|
||||
def test_get_mode(runner, yadm, stat_output):
|
||||
"""Test function get_mode"""
|
||||
script = f"""
|
||||
YADM_TEST=1 source {yadm}
|
||||
function stat() {{ echo {stat_output}; }}
|
||||
mode=$(get_mode abc)
|
||||
echo "MODE:$mode"
|
||||
"""
|
||||
run = runner(command=['bash'], inp=script)
|
||||
assert run.success
|
||||
assert run.err == ''
|
||||
expected = OCTAL if stat_output == OCTAL else ""
|
||||
assert f'MODE:{expected}\n' in run.out
|
Loading…
Reference in new issue