293
304
self.store1.clear_installed()
294
305
self.assertEquals(self.store2.get_installed(), [])
307
def test_ensure_package_schema_with_new_tables(self):
309
The L{ensure_package_schema} function behaves correctly when new
312
filename = self.makeFile()
313
database = sqlite3.connect(filename)
314
cursor = database.cursor()
315
cursor.execute("CREATE TABLE available"
316
" (id INTEGER PRIMARY KEY)")
317
cursor.execute("CREATE TABLE available_upgrade"
318
" (id INTEGER PRIMARY KEY)")
319
cursor.execute("CREATE TABLE installed"
320
" (id INTEGER PRIMARY KEY)")
321
cursor.execute("CREATE TABLE hash_id_request"
322
" (id INTEGER PRIMARY KEY, timestamp TIMESTAMP,"
323
" message_id INTEGER, hashes BLOB)")
324
cursor.execute("CREATE TABLE task"
325
" (id INTEGER PRIMARY KEY, queue TEXT,"
326
" timestamp TIMESTAMP, data BLOB)")
331
store = PackageStore(filename)
334
database = sqlite3.connect(filename)
335
cursor = database.cursor()
336
for table in ["package_locks", "locked"]:
337
query = "pragma table_info(%s)" % table
338
result = cursor.execute(query).fetchall()
339
self.assertTrue(len(result) > 0)
341
def test_add_and_get_locked(self):
343
L{PackageStore.add_locked} adds the given ids to the table of locked
344
packages and commits the changes.
346
self.store1.add_locked([1])
347
self.assertEquals(self.store2.get_locked(), [1])
349
def test_add_locked_conflicting(self):
350
"""Adding the same locked pacakge id twice is fine."""
351
self.store1.add_locked([1])
352
self.store1.add_locked([1])
353
self.assertEquals(self.store2.get_locked(), [1])
355
def test_remove_locked(self):
357
L{PackageStore.removed_locked} remove the given ids from the table
358
of locked packages and commits the changes.
360
self.store1.add_locked([1, 2, 3, 4])
361
self.store1.remove_locked([2, 3])
362
self.assertEquals(self.store2.get_locked(), [1, 4])
364
def test_remove_locked_non_existing(self):
366
Removing non-existing locked packages is fine.
368
self.store1.remove_locked([1])
369
self.assertEquals(self.store2.get_locked(), [])
371
def test_clear_locked(self):
373
L{PackageStore.clear_locked} clears the table of locked packages by
374
removing all its package ids.
376
self.store1.add_locked([1, 2, 3, 4])
377
self.store1.clear_locked()
378
self.assertEquals(self.store2.get_locked(), [])
380
def test_get_package_locks_with_no_lock(self):
382
L{PackageStore.get_package_locks} returns an empty list if no package
385
self.assertEquals(self.store1.get_package_locks(), [])
387
def test_add_package_locks(self):
389
L{PackageStore.add_package_locks} adds a package lock to the store.
391
self.store1.add_package_locks([("name", "", "")])
392
self.assertEquals(self.store2.get_package_locks(),
395
def test_add_package_locks_idempotence(self):
397
The operation of adding a lock is idempotent.
399
self.store1.add_package_locks([("name", "", "")])
400
self.store1.add_package_locks([("name", "", "")])
401
self.assertEquals(self.store2.get_package_locks(),
404
def test_add_package_locks_with_none(self):
406
If None, package locks relation and version values are automatically
407
converted to empty strings.
409
self.store1.add_package_locks([("name", None, None)])
410
self.assertEquals(self.store2.get_package_locks(),
413
def test_add_package_locks_multiple_times(self):
415
L{PackageStore.add_package_locks} can be called multiple times and
416
with multiple locks each time.
418
self.store1.add_package_locks([("name1", "", "")])
419
self.store1.add_package_locks([("name2", "<", "0.2"),
421
self.assertEquals(sorted(self.store2.get_package_locks()),
422
sorted([("name1", "", ""),
423
("name2", "<", "0.2"),
426
def test_add_package_locks_without_name(self):
428
It's not possible to add a package lock without a name.
430
self.assertRaises(sqlite3.IntegrityError,
431
self.store1.add_package_locks,
432
[(None, None, None)])
434
def test_remove_package_locks(self):
436
L{PackageStore.remove_package_locks} removes a package lock from
439
self.store1.add_package_locks([("name1", "", "")])
440
self.store1.remove_package_locks([("name1", "", "")])
441
self.assertEquals(self.store2.get_package_locks(), [])
443
def test_remove_package_locks_multiple_times(self):
445
L{PackageStore.remove_package_locks} can be called multiple times and
446
with multiple locks each time.
448
self.store1.add_package_locks([("name1", "", ""),
449
("name2", "<", "0.2"),
451
self.store1.remove_package_locks([("name1", "", "")])
452
self.store1.remove_package_locks([("name2", "<", "0.2"),
454
self.assertEquals(self.store2.get_package_locks(), [])
456
def test_remove_package_locks_without_matching_lock(self):
458
It's fine to remove a non-existent lock.
460
self.store1.remove_package_locks([("name", "", "")])
461
self.assertEquals(self.store2.get_package_locks(), [])
463
def test_clear_package_locks(self):
465
L{PackageStore.clear_package_locks} removes all package locks
468
self.store1.add_package_locks([("name1", "", ""),
469
("name2", "<", "0.2")])
470
self.store1.clear_package_locks()
471
self.assertEquals(self.store2.get_package_locks(), [])
296
473
def test_add_hash_id_request(self):
297
474
hashes = ("ha\x00sh1", "ha\x00sh2")
298
475
request1 = self.store1.add_hash_id_request(hashes)