1
0
Fork 0
mirror of synced 2024-11-18 15:15:35 -05:00
yadm/test/test_assert_private_dirs.py

115 lines
3.3 KiB
Python
Raw Permalink Normal View History

"""Test asserting private directories"""
import os
import re
2023-07-10 10:14:33 -04:00
import pytest
2023-07-10 15:43:17 -04:00
pytestmark = pytest.mark.usefixtures("ds1_copy")
PRIVATE_DIRS = [".gnupg", ".ssh"]
2023-07-10 15:43:17 -04:00
@pytest.mark.parametrize("home", [True, False], ids=["home", "not-home"])
def test_pdirs_missing(runner, yadm_cmd, paths, home):
"""Private dirs (private dirs missing)
When a git command is run
And private directories are missing
Create private directories prior to command
"""
# confirm directories are missing at start
for pdir in PRIVATE_DIRS:
path = paths.work.join(pdir)
if path.exists():
path.remove()
assert not path.exists()
2023-07-10 15:43:17 -04:00
env = {"DEBUG": "yes"}
if home:
2023-07-10 15:43:17 -04:00
env["HOME"] = paths.work
# run status
2023-07-10 15:43:17 -04:00
run = runner(command=yadm_cmd("status"), env=env)
assert run.success
2023-07-10 15:43:17 -04:00
assert run.err == ""
assert "On branch master" in run.out
# confirm directories are created
# and are protected
for pdir in PRIVATE_DIRS:
path = paths.work.join(pdir)
if home:
assert path.exists()
2023-07-10 15:43:17 -04:00
assert oct(path.stat().mode).endswith("00"), "Directory is " "not secured"
else:
assert not path.exists()
# confirm directories are created before command is run:
if home:
assert re.search(
2023-07-10 15:43:17 -04:00
r"Creating.+\.(gnupg|ssh).+Creating.+\.(gnupg|ssh).+Running git command git status", run.out, re.DOTALL
), "directories created before command is run"
def test_pdirs_missing_apd_false(runner, yadm_cmd, paths):
"""Private dirs (private dirs missing / yadm.auto-private-dirs=false)
When a git command is run
And private directories are missing
But auto-private-dirs is false
Do not create private dirs
"""
# confirm directories are missing at start
for pdir in PRIVATE_DIRS:
path = paths.work.join(pdir)
if path.exists():
path.remove()
assert not path.exists()
# set configuration
2023-07-10 15:43:17 -04:00
os.system(" ".join(yadm_cmd("config", "--bool", "yadm.auto-private-dirs", "false")))
# run status
2023-07-10 15:43:17 -04:00
run = runner(command=yadm_cmd("status"))
assert run.success
2023-07-10 15:43:17 -04:00
assert run.err == ""
assert "On branch master" in run.out
# confirm directories are STILL missing
for pdir in PRIVATE_DIRS:
assert not paths.work.join(pdir).exists()
def test_pdirs_exist_apd_false(runner, yadm_cmd, paths):
"""Private dirs (private dirs exist / yadm.auto-perms=false)
When a git command is run
And private directories exist
And yadm is configured not to auto update perms
Do not alter directories
"""
# create permissive directories
for pdir in PRIVATE_DIRS:
path = paths.work.join(pdir)
if not path.isdir():
path.mkdir()
path.chmod(0o777)
2023-07-10 15:43:17 -04:00
assert oct(path.stat().mode).endswith("77"), "Directory is secure."
# set configuration
2023-07-10 15:43:17 -04:00
os.system(" ".join(yadm_cmd("config", "--bool", "yadm.auto-perms", "false")))
# run status
2023-07-10 15:43:17 -04:00
run = runner(command=yadm_cmd("status"))
assert run.success
2023-07-10 15:43:17 -04:00
assert run.err == ""
assert "On branch master" in run.out
# created directories are STILL permissive
for pdir in PRIVATE_DIRS:
path = paths.work.join(pdir)
2023-07-10 15:43:17 -04:00
assert oct(path.stat().mode).endswith("77"), "Directory is secure"