30
from gi.repository import Click
30
from gi.repository import Click, GLib
32
32
from click.json_helpers import json_array_to_python, json_object_to_python
33
33
from click.tests.gimock_types import Passwd
34
from click.tests.helpers import TestCase, mkfile
34
from click.tests.helpers import TestCase, mkfile, touch
37
37
class TestClickUser(TestCase):
92
92
os.path.join(db_root, ".click", "users", "test-user"),
93
93
registry.get_overlay_db())
95
def test_new_db_not_directory(self):
96
with self.run_in_subprocess(
97
"click_get_db_dir", "g_get_user_name") as (enter, preloads):
99
path = os.path.join(self.temp_dir, "file")
101
preloads["click_get_db_dir"].side_effect = (
102
lambda: self.make_string(path))
103
self.assertRaisesFileError(
104
GLib.FileError.NOTDIR, Click.User.for_user, None, None)
95
106
def test_get_overlay_db(self):
97
108
os.path.join(self.temp_dir, ".click", "users", "user"),
141
152
preloads["chown"].assert_any_call(
142
153
os.path.join(click_dir, "users", "user").encode(), 2, 2)
155
def test_ensure_db_mkdir_fails(self):
156
with self.run_in_subprocess("mkdir") as (enter, preloads):
158
preloads["mkdir"].return_value = -1
159
registry = Click.User.for_user(self.db, "user")
160
self.assertRaisesUserError(
161
Click.UserError.CREATE_DB, registry.set_version, "a", "1.0")
163
def test_ensure_db_chown_fails(self):
164
with self.run_in_subprocess(
165
"chown", "geteuid", "getpwnam") as (enter, preloads):
167
preloads["geteuid"].return_value = 0
168
getpwnam_result = Passwd()
170
def getpwnam_side_effect(name):
171
if name == b"clickpkg":
172
getpwnam_result.pw_uid = 1
173
getpwnam_result.pw_gid = 1
175
getpwnam_result.pw_uid = 2
176
getpwnam_result.pw_gid = 2
177
return self.make_pointer(getpwnam_result)
179
preloads["getpwnam"].side_effect = getpwnam_side_effect
180
preloads["chown"].return_value = -1
181
registry = Click.User.for_user(self.db, "user")
182
self.assertRaisesUserError(
183
Click.UserError.CHOWN_DB, registry.set_version, "a", "1.0")
185
def test_ensure_db_getpwnam_fails(self):
186
with self.run_in_subprocess(
187
"geteuid", "getpwnam") as (enter, preloads):
189
preloads["geteuid"].return_value = 0
190
preloads["getpwnam"].return_value = None
191
registry = Click.User.for_user(self.db, "user")
192
self.assertRaisesUserError(
193
Click.UserError.GETPWNAM, registry.set_version, "a", "1.0")
144
195
def test_get_package_names_missing(self):
146
197
db.add(os.path.join(self.temp_dir, "nonexistent"))