~jamesodhunt/click/add-checksum-to-manifest

« back to all changes in this revision

Viewing changes to click/tests/test_user.py

  • Committer: CI bot
  • Author(s): Michael Vogt, Colin Watson
  • Date: 2014-08-06 23:33:12 UTC
  • mfrom: (425.1.67 devel)
  • Revision ID: ps-jenkins@lists.canonical.com-20140806233312-4nc48i27d6zn4i9j
Click 0.4.30: Unit test improvements; fix upgrade if packages are present for removed users; flesh out 14.10 chroots. Fixes: 1334611

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
import os
28
28
import shutil
29
29
 
30
 
from gi.repository import Click
 
30
from gi.repository import Click, GLib
31
31
 
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
35
35
 
36
36
 
37
37
class TestClickUser(TestCase):
92
92
                os.path.join(db_root, ".click", "users", "test-user"),
93
93
                registry.get_overlay_db())
94
94
 
 
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):
 
98
            enter()
 
99
            path = os.path.join(self.temp_dir, "file")
 
100
            touch(path)
 
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)
 
105
 
95
106
    def test_get_overlay_db(self):
96
107
        self.assertEqual(
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)
143
154
 
 
155
    def test_ensure_db_mkdir_fails(self):
 
156
        with self.run_in_subprocess("mkdir") as (enter, preloads):
 
157
            enter()
 
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")
 
162
 
 
163
    def test_ensure_db_chown_fails(self):
 
164
        with self.run_in_subprocess(
 
165
                "chown", "geteuid", "getpwnam") as (enter, preloads):
 
166
            enter()
 
167
            preloads["geteuid"].return_value = 0
 
168
            getpwnam_result = Passwd()
 
169
 
 
170
            def getpwnam_side_effect(name):
 
171
                if name == b"clickpkg":
 
172
                    getpwnam_result.pw_uid = 1
 
173
                    getpwnam_result.pw_gid = 1
 
174
                else:
 
175
                    getpwnam_result.pw_uid = 2
 
176
                    getpwnam_result.pw_gid = 2
 
177
                return self.make_pointer(getpwnam_result)
 
178
 
 
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")
 
184
 
 
185
    def test_ensure_db_getpwnam_fails(self):
 
186
        with self.run_in_subprocess(
 
187
                "geteuid", "getpwnam") as (enter, preloads):
 
188
            enter()
 
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")
 
194
 
144
195
    def test_get_package_names_missing(self):
145
196
        db = Click.DB()
146
197
        db.add(os.path.join(self.temp_dir, "nonexistent"))