diff options
Diffstat (limited to 'test/test_unit_copy_perms.py')
-rw-r--r-- | test/test_unit_copy_perms.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/test_unit_copy_perms.py b/test/test_unit_copy_perms.py new file mode 100644 index 0000000..3c79768 --- /dev/null +++ b/test/test_unit_copy_perms.py @@ -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 |