from testlib import check, util
from testlib.log import log
+from testlib.const import RUN_ACCESS_CHECKS
from testlib.proc import Tinc
from testlib.test import Test
FAKE_INVITE = "localhost:65535/pVOZMJGm3MqTvTu0UnhMGb2cfuqygiu79MdnERnGYdga5v8C"
-def init(ctx: Test) -> Tinc:
- """Initialize a node."""
-
- node = ctx.node()
- stdin = f"""
- init {node}
- set Port 0
- set Address localhost
- set DeviceType dummy
- """
- node.cmd(stdin=stdin)
- return node
-
-
def test_invite(foo: Tinc) -> None:
"""Test successful 'invite'."""
_, err = foo.cmd("invite", foo.name, code=1)
check.is_in("already exists", err)
- if os.name != "nt":
+ if RUN_ACCESS_CHECKS:
+ log.info("bad permissions on invitations are fixed")
invites = foo.sub("invitations")
os.chmod(invites, 0)
- _, err = foo.cmd("invite", "foobar", code=1)
- check.is_in("Could not read directory", err)
- os.chmod(invites, 0o750)
+ out, _ = foo.cmd("invite", "foobar")
+ check.has_prefix(out, "localhost:")
- log.info("block creating invitations directory")
- shutil.rmtree(foo.sub("invitations"))
+ log.info("invitations directory is created with bad permissions on parent")
+ shutil.rmtree(invites)
os.chmod(foo.work_dir, 0o500)
- _, err = foo.cmd("invite", "foobar", code=1)
- check.is_in("Could not create directory", err)
- os.chmod(foo.work_dir, 0o750)
+ out, _ = foo.cmd("invite", "foobar")
+ check.has_prefix(out, "localhost:")
+ check.true(os.access(invites, os.W_OK))
log.info("fully block access to configuration directory")
work_dir = foo.sub("test_no_access")
_, err = foo.cmd("-c", work_dir, "join", FAKE_INVITE, code=1)
check.is_in("Could not connect to", err)
- if os.name != "nt":
- log.info("test working without access to configuration directory")
+ if RUN_ACCESS_CHECKS:
+ log.info("bad permissions on configuration directory are fixed")
work_dir = foo.sub("wd_access_test")
os.mkdir(work_dir, mode=400)
_, err = foo.cmd("-c", work_dir, "join", FAKE_INVITE, code=1)
- check.is_in("No permission to write", err)
+ check.is_in("Could not connect to", err)
+ check.true(os.access(work_dir, mode=os.W_OK))
with Test("run invite success tests") as context:
- test_invite(init(context))
+ test_invite(context.node(init=True))
with Test("run invite error tests") as context:
- test_invite_errors(init(context))
+ test_invite_errors(context.node(init=True))
with Test("run join tests") as context:
- test_join_errors(init(context))
+ test_join_errors(context.node(init=True))