summaryrefslogtreecommitdiff
path: root/test/test_unit_copy_perms.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_unit_copy_perms.py')
-rw-r--r--test/test_unit_copy_perms.py53
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