mirror of
https://github.com/TheLocehiliosan/yadm
synced 2024-10-27 20:34:27 +00:00
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
|
"""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
|