~saprativejana/mailman/install_doc

« back to all changes in this revision

Viewing changes to src/mailman/model/tests/test_uid.py

  • Committer: Barry Warsaw
  • Date: 2015-02-13 08:13:06 UTC
  • Revision ID: barry@list.org-20150213081306-1b567rjfxqw45ti6
 * A new API is provided to support non-production testing infrastructures,
   allowing a client to cull all orphaned UIDs via ``DELETE`` on
   ``<api>/reserved/uids/orphans``.  Note that *no guarantees* of API
   stability will ever be made for resources under ``reserved``.
   (LP: #1420083)

Also:

- Allow @dbconnection methods to be @staticmethods taking only one argument,
  the store to perform the query on.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
import uuid
26
26
import unittest
27
27
 
 
28
from mailman.config import config
 
29
from mailman.interfaces.usermanager import IUserManager
28
30
from mailman.model.uid import UID
29
31
from mailman.testing.layers import ConfigLayer
 
32
from zope.component import getUtility
30
33
 
31
34
 
32
35
 
44
47
        my_uuid = uuid.uuid4()
45
48
        UID.record(my_uuid)
46
49
        self.assertRaises(ValueError, UID.record, my_uuid)
 
50
 
 
51
    def test_get_total_uid_count(self):
 
52
        # The reserved REST API needs this.
 
53
        for i in range(10):
 
54
            UID.record(uuid.uuid4())
 
55
        self.assertEqual(UID.get_total_uid_count(), 10)
 
56
 
 
57
    def test_cull_orphan_uids(self):
 
58
        # The reserved REST API needs to cull entries from the uid table that
 
59
        # are not associated with actual entries in the user table.
 
60
        manager = getUtility(IUserManager)
 
61
        uids = set()
 
62
        for i in range(10):
 
63
            user = manager.create_user()
 
64
            uids.add(user.user_id)
 
65
            # The testing infrastructure does not record the UIDs for new user
 
66
            # objects, so do that now to mimic the real system.
 
67
            UID.record(user.user_id)
 
68
        self.assertEqual(len(uids), 10)
 
69
        # Now add some orphan uids.
 
70
        orphans = set()
 
71
        for i in range(100, 113):
 
72
            uid = UID.record(uuid.UUID(int=i))
 
73
            orphans.add(uid.uid)
 
74
        self.assertEqual(len(orphans), 13)
 
75
        # Normally we wouldn't do a query in a test, since we'd want the model
 
76
        # object to expose this, but we actually don't support exposing all
 
77
        # the UIDs to the rest of Mailman.
 
78
        all_uids = set(row[0] for row in config.db.store.query(UID.uid))
 
79
        self.assertEqual(all_uids, uids | orphans)
 
80
        # Now, cull all the UIDs that aren't associated with users.  Do use
 
81
        # the model API for this.
 
82
        UID.cull_orphans()
 
83
        non_orphans = set(row[0] for row in config.db.store.query(UID.uid))
 
84
        self.assertEqual(uids, non_orphans)
 
85
        # And all the users still exist.
 
86
        non_orphans = set(user.user_id for user in manager.users)
 
87
        self.assertEqual(uids, non_orphans)