repo2docker/tests/unit/test_users.py

57 wiersze
1.6 KiB
Python

2017-12-19 21:00:55 +00:00
"""
Test that User name and ID mapping works
"""
2017-12-19 21:00:55 +00:00
import os
import subprocess
import tempfile
import time
from getpass import getuser
from unittest import mock
from repo2docker import Repo2Docker
def test_automatic_username_deduction():
# check we pickup the right username
with mock.patch("os.environ") as mock_env:
expected = "someusername"
mock_env.get.return_value = expected
r2d = Repo2Docker()
assert r2d.user_name == expected
2017-12-19 21:00:55 +00:00
def test_user():
"""
Validate user id and name setting
"""
ts = str(time.time())
# FIXME: Use arbitrary login here, We need it now since we wanna put things to volume.
username = getuser()
userid = str(os.geteuid())
2017-12-19 21:00:55 +00:00
with tempfile.TemporaryDirectory() as tmpdir:
tmpdir = os.path.realpath(tmpdir)
subprocess.check_call(
[
"repo2docker",
f"--volume={tmpdir}:/home/{username}",
f"--user-id={userid}",
f"--user-name={username}",
tmpdir,
"--",
"/bin/bash",
"-c",
"id -u > id && pwd > pwd && whoami > name && echo -n $USER > env_user",
]
)
2017-12-19 21:00:55 +00:00
with open(os.path.join(tmpdir, "id")) as f:
assert f.read().strip() == userid
with open(os.path.join(tmpdir, "pwd")) as f:
assert f.read().strip() == f"/home/{username}"
with open(os.path.join(tmpdir, "name")) as f:
2017-12-19 21:27:22 +00:00
assert f.read().strip() == username
with open(os.path.join(tmpdir, "name")) as f:
2017-12-19 21:27:22 +00:00
assert f.read().strip() == username