Merge lp:~bjornt/landscape-client/remove-smart-methods into lp:~landscape/landscape-client/trunk
- remove-smart-methods
- Merge into trunk
Proposed by
Björn Tillenius
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Alberto Donato | ||||
Approved revision: | 571 | ||||
Merged at revision: | 559 | ||||
Proposed branch: | lp:~bjornt/landscape-client/remove-smart-methods | ||||
Merge into: | lp:~landscape/landscape-client/trunk | ||||
Prerequisite: | lp:~bjornt/landscape-client/remove-apt-check | ||||
Diff against target: |
532 lines (+33/-285) 7 files modified
landscape/package/changer.py (+8/-29) landscape/package/facade.py (+0/-16) landscape/package/reporter.py (+4/-55) landscape/package/store.py (+0/-37) landscape/package/tests/test_changer.py (+4/-9) landscape/package/tests/test_reporter.py (+14/-36) landscape/package/tests/test_store.py (+3/-103) |
||||
To merge this branch: | bzr merge lp:~bjornt/landscape-client/remove-smart-methods | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Alberto Donato (community) | Approve | ||
Mike Milner (community) | Approve | ||
Review via email: mp+105285@code.launchpad.net |
Commit message
Description of the change
Remove methods that were smart-specific. I removed AptFacade.deinit() as
well as all methods dealing with package locks, including the ones in
the package store. Basically only removals, although I did resurrect an
assert in test_resynchronize, which required some changes in that test
to make it work (it was using a not-installed package for the one being
locked, which isn't possible with apt)
To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote : | # |
Great, +1!
#1:
+ for table in ["locked"]:
no need for the loop anymore
review:
Approve
- 572. By Björn Tillenius
-
Remove for-loop.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'landscape/package/changer.py' |
2 | --- landscape/package/changer.py 2012-05-08 01:09:17 +0000 |
3 | +++ landscape/package/changer.py 2012-05-16 08:19:20 +0000 |
4 | @@ -18,7 +18,7 @@ |
5 | from landscape.package.taskhandler import ( |
6 | PackageTaskHandler, PackageTaskHandlerConfiguration, PackageTaskError, |
7 | run_task_handler) |
8 | -from landscape.manager.manager import FAILED, SUCCEEDED |
9 | +from landscape.manager.manager import FAILED |
10 | |
11 | |
12 | class UnknownPackageData(Exception): |
13 | @@ -80,10 +80,6 @@ |
14 | # Nothing was done |
15 | return |
16 | |
17 | - # In order to let the reporter run smart-update cleanly, |
18 | - # we have to deinitialize Smart, so that the write lock |
19 | - # gets released |
20 | - self._facade.deinit() |
21 | if os.getuid() == 0: |
22 | os.setgid(grp.getgrnam("landscape").gr_gid) |
23 | os.setuid(pwd.getpwnam("landscape").pw_uid) |
24 | @@ -294,32 +290,15 @@ |
25 | def handle_change_package_locks(self, message): |
26 | """Handle a C{change-package-locks} message. |
27 | |
28 | - Create and delete package locks as requested by the given C{message}. |
29 | + Package locks aren't supported anymore. |
30 | """ |
31 | |
32 | - if not self._facade.supports_package_locks: |
33 | - response = { |
34 | - "type": "operation-result", |
35 | - "operation-id": message.get("operation-id"), |
36 | - "status": FAILED, |
37 | - "result-text": "This client doesn't support package locks.", |
38 | - "result-code": 1} |
39 | - return self._broker.send_message(response, True) |
40 | - |
41 | - for lock in message.get("create", ()): |
42 | - self._facade.set_package_lock(*lock) |
43 | - for lock in message.get("delete", ()): |
44 | - self._facade.remove_package_lock(*lock) |
45 | - self._facade.save_config() |
46 | - |
47 | - response = {"type": "operation-result", |
48 | - "operation-id": message.get("operation-id"), |
49 | - "status": SUCCEEDED, |
50 | - "result-text": "Package locks successfully changed.", |
51 | - "result-code": 0} |
52 | - |
53 | - logging.info("Queuing message with change package locks results to " |
54 | - "exchange urgently.") |
55 | + response = { |
56 | + "type": "operation-result", |
57 | + "operation-id": message.get("operation-id"), |
58 | + "status": FAILED, |
59 | + "result-text": "This client doesn't support package locks.", |
60 | + "result-code": 1} |
61 | return self._broker.send_message(response, True) |
62 | |
63 | @staticmethod |
64 | |
65 | === modified file 'landscape/package/facade.py' |
66 | --- landscape/package/facade.py 2012-05-08 23:21:07 +0000 |
67 | +++ landscape/package/facade.py 2012-05-16 08:19:20 +0000 |
68 | @@ -89,8 +89,6 @@ |
69 | database. |
70 | """ |
71 | |
72 | - supports_package_holds = True |
73 | - supports_package_locks = False |
74 | _dpkg_status = "/var/lib/dpkg/status" |
75 | |
76 | def __init__(self, root=None): |
77 | @@ -133,9 +131,6 @@ |
78 | os.makedirs(full_path) |
79 | return full_path |
80 | |
81 | - def deinit(self): |
82 | - """This method exists solely to be compatible with C{SmartFacade}.""" |
83 | - |
84 | def get_packages(self): |
85 | """Get all the packages available in the channels.""" |
86 | return self._hash2pkg.itervalues() |
87 | @@ -150,17 +145,6 @@ |
88 | if (self.is_package_installed(version) |
89 | and self._is_package_held(version.package))] |
90 | |
91 | - def get_package_locks(self): |
92 | - """Return all set package locks. |
93 | - |
94 | - @return: A C{list} of ternary tuples, contaning the name, relation |
95 | - and version details for each lock currently set on the system. |
96 | - |
97 | - XXX: This method isn't implemented yet. It's here to make the |
98 | - transition to Apt in the package reporter easier. |
99 | - """ |
100 | - return [] |
101 | - |
102 | def get_package_holds(self): |
103 | """Return the name of all the packages that are on hold.""" |
104 | return [version.package.name for version in self.get_locked_packages()] |
105 | |
106 | === modified file 'landscape/package/reporter.py' |
107 | --- landscape/package/reporter.py 2012-05-08 01:24:21 +0000 |
108 | +++ landscape/package/reporter.py 2012-05-16 08:19:20 +0000 |
109 | @@ -278,7 +278,6 @@ |
110 | self._store.clear_available_upgrades() |
111 | self._store.clear_installed() |
112 | self._store.clear_locked() |
113 | - self._store.clear_package_locks() |
114 | |
115 | # Don't clear the hash_id_requests table because the messages |
116 | # associated with the existing requests might still have to be |
117 | @@ -421,16 +420,13 @@ |
118 | reactor. |
119 | """ |
120 | |
121 | - def changes_detected(results): |
122 | - # Release all smart locks, in case the changer runs after us. |
123 | - self._facade.deinit() |
124 | - if True in results: |
125 | + def changes_detected(result): |
126 | + if result: |
127 | # Something has changed, notify the broker. |
128 | return self._broker.fire_event("package-data-changed") |
129 | |
130 | - result = gather_results([self.detect_packages_changes(), |
131 | - self.detect_package_locks_changes()]) |
132 | - return result.addCallback(changes_detected) |
133 | + deferred = self.detect_packages_changes() |
134 | + return deferred.addCallback(changes_detected) |
135 | |
136 | def detect_packages_changes(self): |
137 | """Detect changes in the universe of known packages. |
138 | @@ -564,53 +560,6 @@ |
139 | |
140 | return result |
141 | |
142 | - def detect_package_locks_changes(self): |
143 | - """Detect changes in known package locks. |
144 | - |
145 | - This method will verify if there are package locks that: |
146 | - |
147 | - - are now set, and were not; |
148 | - - were previously set but are not anymore; |
149 | - |
150 | - In all cases, the server is notified of the new situation |
151 | - with a "packages" message. |
152 | - |
153 | - @return: A deferred resulting in C{True} if package lock changes were |
154 | - detected with respect to the previous run, or C{False} otherwise. |
155 | - """ |
156 | - old_package_locks = set(self._store.get_package_locks()) |
157 | - current_package_locks = set(self._facade.get_package_locks()) |
158 | - |
159 | - set_package_locks = current_package_locks - old_package_locks |
160 | - unset_package_locks = old_package_locks - current_package_locks |
161 | - |
162 | - message = {} |
163 | - if set_package_locks: |
164 | - message["created"] = sorted(set_package_locks) |
165 | - if unset_package_locks: |
166 | - message["deleted"] = sorted(unset_package_locks) |
167 | - |
168 | - if not message: |
169 | - return succeed(False) |
170 | - |
171 | - message["type"] = "package-locks" |
172 | - result = self.send_message(message) |
173 | - |
174 | - logging.info("Queuing message with changes in known package locks:" |
175 | - " %d created, %d deleted." % |
176 | - (len(set_package_locks), len(unset_package_locks))) |
177 | - |
178 | - def update_currently_known(result): |
179 | - if set_package_locks: |
180 | - self._store.add_package_locks(set_package_locks) |
181 | - if unset_package_locks: |
182 | - self._store.remove_package_locks(unset_package_locks) |
183 | - return True |
184 | - |
185 | - result.addCallback(update_currently_known) |
186 | - |
187 | - return result |
188 | - |
189 | |
190 | class FakeGlobalReporter(PackageReporter): |
191 | """ |
192 | |
193 | === modified file 'landscape/package/store.py' |
194 | --- landscape/package/store.py 2011-08-19 14:07:05 +0000 |
195 | +++ landscape/package/store.py 2012-05-16 08:19:20 +0000 |
196 | @@ -249,40 +249,6 @@ |
197 | cursor.execute("DELETE FROM locked") |
198 | |
199 | @with_cursor |
200 | - def get_package_locks(self, cursor): |
201 | - """Get all package locks.""" |
202 | - cursor.execute("SELECT name, relation, version FROM package_locks") |
203 | - return [(row[0], row[1], row[2]) for row in cursor.fetchall()] |
204 | - |
205 | - @with_cursor |
206 | - def add_package_locks(self, cursor, locks): |
207 | - """Add a list of package locks to the store. |
208 | - |
209 | - @param locks: A C{list} of ternary tuples each one contains the |
210 | - name, the relation and the version of the package lock to be added. |
211 | - """ |
212 | - for name, relation, version in locks: |
213 | - cursor.execute("REPLACE INTO package_locks VALUES (?, ?, ?)", |
214 | - (name, relation or "", version or "",)) |
215 | - |
216 | - @with_cursor |
217 | - def remove_package_locks(self, cursor, locks): |
218 | - """Remove a list of package locks from the store. |
219 | - |
220 | - @param locks: A C{list} of ternary tuples each one contains the name, |
221 | - the relation and the version of the package lock to be removed. |
222 | - """ |
223 | - for name, relation, version in locks: |
224 | - cursor.execute("DELETE FROM package_locks WHERE name=? AND " |
225 | - "relation=? AND version=?", |
226 | - (name, relation or "", version or "")) |
227 | - |
228 | - @with_cursor |
229 | - def clear_package_locks(self, cursor): |
230 | - """Remove all package locks.""" |
231 | - cursor.execute("DELETE FROM package_locks") |
232 | - |
233 | - @with_cursor |
234 | def add_hash_id_request(self, cursor, hashes): |
235 | hashes = list(hashes) |
236 | cursor.execute("INSERT INTO hash_id_request (hashes, timestamp)" |
237 | @@ -458,9 +424,6 @@ |
238 | # try block. |
239 | cursor = db.cursor() |
240 | try: |
241 | - cursor.execute("CREATE TABLE package_locks" |
242 | - " (name TEXT NOT NULL, relation TEXT, version TEXT," |
243 | - " UNIQUE(name, relation, version))") |
244 | cursor.execute("CREATE TABLE locked" |
245 | " (id INTEGER PRIMARY KEY)") |
246 | cursor.execute("CREATE TABLE available" |
247 | |
248 | === modified file 'landscape/package/tests/test_changer.py' |
249 | --- landscape/package/tests/test_changer.py 2012-05-08 23:21:07 +0000 |
250 | +++ landscape/package/tests/test_changer.py 2012-05-16 08:19:20 +0000 |
251 | @@ -632,8 +632,7 @@ |
252 | """ |
253 | After the package changer has run, we want the package-reporter to run |
254 | to report the recent changes. If we're running as root, we want to |
255 | - change to the "landscape" user and "landscape" group. We also want to |
256 | - deinitialize Smart to let the reporter run smart-update cleanly. |
257 | + change to the "landscape" user and "landscape" group. |
258 | """ |
259 | |
260 | # We are running as root |
261 | @@ -644,10 +643,6 @@ |
262 | # The order matters (first smart then gid and finally uid) |
263 | self.mocker.order() |
264 | |
265 | - # Deinitialize smart |
266 | - facade_mock = self.mocker.patch(self.facade) |
267 | - facade_mock.deinit() |
268 | - |
269 | # We want to return a known gid |
270 | grnam_mock = self.mocker.replace("grp.getgrnam") |
271 | grnam_mock("landscape") |
272 | @@ -1328,9 +1323,9 @@ |
273 | |
274 | def test_change_package_locks(self): |
275 | """ |
276 | - If C{AptFacade} is used, the L{PackageChanger.handle_tasks} |
277 | - method fails the activity, since it can't add or remove locks because |
278 | - apt doesn't support this. |
279 | + The L{PackageChanger.handle_tasks} method fails |
280 | + change-package-locks activities, since it can't add or remove |
281 | + locks because apt doesn't support this. |
282 | """ |
283 | self.store.add_task("changer", {"type": "change-package-locks", |
284 | "create": [("foo", ">=", "1.0")], |
285 | |
286 | === modified file 'landscape/package/tests/test_reporter.py' |
287 | --- landscape/package/tests/test_reporter.py 2012-05-08 23:21:07 +0000 |
288 | +++ landscape/package/tests/test_reporter.py 2012-05-16 08:19:20 +0000 |
289 | @@ -892,20 +892,13 @@ |
290 | result = self.reporter.detect_packages_changes() |
291 | return result.addCallback(got_result) |
292 | |
293 | - def test_detect_changes_considers_packages_and_locks_changes(self): |
294 | + def test_detect_changes_considers_packages_changes(self): |
295 | """ |
296 | - The L{PackageReporter.detect_changes} method considers both package and |
297 | - package locks changes. It also releases smart locks by calling the |
298 | - L{SmartFacade.deinit} method. |
299 | + The L{PackageReporter.detect_changes} method package changes. |
300 | """ |
301 | reporter_mock = self.mocker.patch(self.reporter) |
302 | reporter_mock.detect_packages_changes() |
303 | self.mocker.result(succeed(True)) |
304 | - reporter_mock.detect_package_locks_changes() |
305 | - self.mocker.result(succeed(True)) |
306 | - |
307 | - facade_mock = self.mocker.patch(self.facade) |
308 | - facade_mock.deinit() |
309 | |
310 | self.mocker.replay() |
311 | return self.reporter.detect_changes() |
312 | @@ -918,8 +911,6 @@ |
313 | """ |
314 | reporter_mock = self.mocker.patch(self.reporter) |
315 | reporter_mock.detect_packages_changes() |
316 | - self.mocker.result(succeed(False)) |
317 | - reporter_mock.detect_package_locks_changes() |
318 | self.mocker.result(succeed(True)) |
319 | callback = self.mocker.mock() |
320 | callback() |
321 | @@ -1001,16 +992,19 @@ |
322 | This is done in the reporter so that we know it happens when |
323 | no other reporter is possibly running at the same time. |
324 | """ |
325 | + self._add_system_package("foo") |
326 | + self.facade.reload_channels() |
327 | + [foo] = self.facade.get_packages_by_name("foo") |
328 | + foo_hash = self.facade.get_package_hash(foo) |
329 | + self.facade.set_package_hold(foo) |
330 | + self.facade.reload_channels() |
331 | message_store = self.broker_service.message_store |
332 | message_store.set_accepted_types(["package-locks"]) |
333 | - self.store.set_hash_ids({HASH1: 3, HASH2: 4}) |
334 | + self.store.set_hash_ids({foo_hash: 3, HASH2: 4}) |
335 | self.store.add_available([1]) |
336 | self.store.add_available_upgrades([2]) |
337 | self.store.add_installed([2]) |
338 | self.store.add_locked([3]) |
339 | - self.store.add_package_locks([("name1", None, None)]) |
340 | - if self.facade.supports_package_locks: |
341 | - self.facade.set_package_lock("name1") |
342 | request1 = self.store.add_hash_id_request(["hash3"]) |
343 | request2 = self.store.add_hash_id_request(["hash4"]) |
344 | |
345 | @@ -1023,12 +1017,6 @@ |
346 | self.assertEqual(self.store.get_available_upgrades(), [2]) |
347 | self.assertEqual(self.store.get_available(), [1]) |
348 | self.assertEqual(self.store.get_installed(), [2]) |
349 | - # XXX: Don't check get_locked() and get_package_locks() until |
350 | - # package locks are implemented in AptFacade. |
351 | - if not isinstance(self.facade, AptFacade): |
352 | - self.assertEqual(self.store.get_locked(), [3]) |
353 | - self.assertEqual( |
354 | - self.store.get_package_locks(), [("name1", "", "")]) |
355 | self.assertEqual(self.store.get_hash_id_request(request1.id).id, |
356 | request1.id) |
357 | |
358 | @@ -1039,7 +1027,7 @@ |
359 | def check_result(result): |
360 | |
361 | # The hashes should not go away. |
362 | - hash1 = self.store.get_hash_id(HASH1) |
363 | + hash1 = self.store.get_hash_id(foo_hash) |
364 | hash2 = self.store.get_hash_id(HASH2) |
365 | self.assertEqual([hash1, hash2], [3, 4]) |
366 | |
367 | @@ -1048,12 +1036,9 @@ |
368 | |
369 | # After running the resychronize task, detect_packages_changes is |
370 | # called, and the existing known hashes are made available. |
371 | - self.assertEqual(self.store.get_available(), [3, 4]) |
372 | - self.assertEqual(self.store.get_installed(), []) |
373 | - # XXX: Don't check get_locked() until package locks are |
374 | - # implemented in AptFacade. |
375 | - if not isinstance(self.facade, AptFacade): |
376 | - self.assertEqual(self.store.get_locked(), [3]) |
377 | + self.assertEqual(self.store.get_available(), [4]) |
378 | + self.assertEqual(self.store.get_installed(), [3]) |
379 | + self.assertEqual(self.store.get_locked(), [3]) |
380 | |
381 | # The two original hash id requests should be still there, and |
382 | # a new hash id request should also be detected for HASH3. |
383 | @@ -1066,18 +1051,11 @@ |
384 | elif request.id == request2.id: |
385 | self.assertEqual(request.hashes, ["hash4"]) |
386 | elif not new_request_found: |
387 | - self.assertEqual(request.hashes, [HASH3]) |
388 | + self.assertEqual(request.hashes, [HASH3, HASH1]) |
389 | else: |
390 | self.fail("Unexpected hash-id request!") |
391 | self.assertEqual(requests_count, 3) |
392 | |
393 | - # XXX: Don't check for package-locks messages until package |
394 | - # locks are implemented in AptFacade. |
395 | - if not isinstance(self.facade, AptFacade): |
396 | - self.assertMessages(message_store.get_pending_messages(), |
397 | - [{"type": "package-locks", |
398 | - "created": [("name1", "", "")]}]) |
399 | - |
400 | deferred.addCallback(check_result) |
401 | return deferred |
402 | |
403 | |
404 | === modified file 'landscape/package/tests/test_store.py' |
405 | --- landscape/package/tests/test_store.py 2011-07-06 21:11:43 +0000 |
406 | +++ landscape/package/tests/test_store.py 2012-05-16 08:19:20 +0000 |
407 | @@ -1,6 +1,5 @@ |
408 | import threading |
409 | import time |
410 | -import sys |
411 | |
412 | import sqlite3 |
413 | from landscape.tests.helpers import LandscapeTest |
414 | @@ -356,11 +355,9 @@ |
415 | |
416 | database = sqlite3.connect(filename) |
417 | cursor = database.cursor() |
418 | - for table in ["package_locks", "locked"]: |
419 | - query = "pragma table_info(%s)" % table |
420 | - cursor.execute(query) |
421 | - result = cursor.fetchall() |
422 | - self.assertTrue(len(result) > 0) |
423 | + cursor.execute("pragma table_info(locked)") |
424 | + result = cursor.fetchall() |
425 | + self.assertTrue(len(result) > 0) |
426 | |
427 | def test_add_and_get_locked(self): |
428 | """ |
429 | @@ -401,103 +398,6 @@ |
430 | self.store1.clear_locked() |
431 | self.assertEqual(self.store2.get_locked(), []) |
432 | |
433 | - def test_get_package_locks_with_no_lock(self): |
434 | - """ |
435 | - L{PackageStore.get_package_locks} returns an empty list if no package |
436 | - locks are stored. |
437 | - """ |
438 | - self.assertEqual(self.store1.get_package_locks(), []) |
439 | - |
440 | - def test_add_package_locks(self): |
441 | - """ |
442 | - L{PackageStore.add_package_locks} adds a package lock to the store. |
443 | - """ |
444 | - self.store1.add_package_locks([("name", "", "")]) |
445 | - self.assertEqual(self.store2.get_package_locks(), |
446 | - [("name", "", "")]) |
447 | - |
448 | - def test_add_package_locks_idempotence(self): |
449 | - """ |
450 | - The operation of adding a lock is idempotent. |
451 | - """ |
452 | - self.store1.add_package_locks([("name", "", "")]) |
453 | - self.store1.add_package_locks([("name", "", "")]) |
454 | - self.assertEqual(self.store2.get_package_locks(), |
455 | - [("name", "", "")]) |
456 | - |
457 | - def test_add_package_locks_with_none(self): |
458 | - """ |
459 | - If None, package locks relation and version values are automatically |
460 | - converted to empty strings. |
461 | - """ |
462 | - self.store1.add_package_locks([("name", None, None)]) |
463 | - self.assertEqual(self.store2.get_package_locks(), |
464 | - [("name", "", "")]) |
465 | - |
466 | - def test_add_package_locks_multiple_times(self): |
467 | - """ |
468 | - L{PackageStore.add_package_locks} can be called multiple times and |
469 | - with multiple locks each time. |
470 | - """ |
471 | - self.store1.add_package_locks([("name1", "", "")]) |
472 | - self.store1.add_package_locks([("name2", "<", "0.2"), |
473 | - ("name3", "", "")]) |
474 | - self.assertEqual(sorted(self.store2.get_package_locks()), |
475 | - sorted([("name1", "", ""), |
476 | - ("name2", "<", "0.2"), |
477 | - ("name3", "", "")])) |
478 | - |
479 | - def test_add_package_locks_without_name(self): |
480 | - """ |
481 | - It's not possible to add a package lock without a name. |
482 | - """ |
483 | - if sys.version_info >= (2, 5): |
484 | - sqlite_error = sqlite3.IntegrityError |
485 | - else: |
486 | - sqlite_error = sqlite3.OperationalError |
487 | - self.assertRaises(sqlite_error, |
488 | - self.store1.add_package_locks, |
489 | - [(None, None, None)]) |
490 | - |
491 | - def test_remove_package_locks(self): |
492 | - """ |
493 | - L{PackageStore.remove_package_locks} removes a package lock from |
494 | - the store. |
495 | - """ |
496 | - self.store1.add_package_locks([("name1", "", "")]) |
497 | - self.store1.remove_package_locks([("name1", "", "")]) |
498 | - self.assertEqual(self.store2.get_package_locks(), []) |
499 | - |
500 | - def test_remove_package_locks_multiple_times(self): |
501 | - """ |
502 | - L{PackageStore.remove_package_locks} can be called multiple times and |
503 | - with multiple locks each time. |
504 | - """ |
505 | - self.store1.add_package_locks([("name1", "", ""), |
506 | - ("name2", "<", "0.2"), |
507 | - ("name3", "", "")]) |
508 | - self.store1.remove_package_locks([("name1", "", "")]) |
509 | - self.store1.remove_package_locks([("name2", "<", "0.2"), |
510 | - ("name3", "", "")]) |
511 | - self.assertEqual(self.store2.get_package_locks(), []) |
512 | - |
513 | - def test_remove_package_locks_without_matching_lock(self): |
514 | - """ |
515 | - It's fine to remove a non-existent lock. |
516 | - """ |
517 | - self.store1.remove_package_locks([("name", "", "")]) |
518 | - self.assertEqual(self.store2.get_package_locks(), []) |
519 | - |
520 | - def test_clear_package_locks(self): |
521 | - """ |
522 | - L{PackageStore.clear_package_locks} removes all package locks |
523 | - from the store. |
524 | - """ |
525 | - self.store1.add_package_locks([("name1", "", ""), |
526 | - ("name2", "<", "0.2")]) |
527 | - self.store1.clear_package_locks() |
528 | - self.assertEqual(self.store2.get_package_locks(), []) |
529 | - |
530 | def test_add_hash_id_request(self): |
531 | hashes = ("ha\x00sh1", "ha\x00sh2") |
532 | request1 = self.store1.add_hash_id_request(hashes) |
Looks good, +1