~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/canonical/arch/tests/framework.py

  • Committer: Robert Collins
  • Date: 2005-10-31 18:29:12 UTC
  • mfrom: (1102.1.126)
  • mto: (1102.1.138) (63.1.155)
  • mto: This revision was merged to the branch mainline in revision 2836.
  • Revision ID: robertc@robertcollins.net-20051031182912-5b96cbfc568d7a46
Merge ddaa and my branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
# arch-tag: 7dec9a9d-a8c2-465e-8843-7b2204c1f85c
3
 
#
4
 
# Copyright (C) 2004 Canonical Software
5
 
#       Authors: Rob Weir <rob.weir@canonical.com>
6
 
#                Robert Collins <robert.collins@canonical.com>
7
 
 
8
 
"""Common code for the test suite for the database and broker layers."""
9
 
 
10
 
import unittest
11
 
import sys
12
 
import os
13
 
import shutil
14
 
from zope.interface.verify import verifyClass, verifyObject
15
 
import psycopg
16
 
import tempfile
17
 
import pybaz as arch
18
 
 
19
 
from canonical.launchpad.ftests import harness
20
 
 
21
 
class ZopelessTestSetup(harness.LaunchpadZopelessTestSetup):
22
 
    template = 'launchpad_empty'
23
 
    dbuser = 'importd'
24
 
 
25
 
class DatabaseTestCase(unittest.TestCase):
26
 
 
27
 
    def setUp(self):
28
 
        self._zopeless = ZopelessTestSetup()
29
 
        self._zopeless.setUp()
30
 
        self._archive = None
31
 
        self._category = None
32
 
        self._branch = None
33
 
        self._versions = {}
34
 
        self._revision = None
35
 
 
36
 
    def tearDown(self):
37
 
        self._zopeless.tearDown()
38
 
 
39
 
    archive_name = "foo@bar"
40
 
 
41
 
    def _getTestArchive(self):
42
 
        """Insert a test archive into the db and return it"""
43
 
        from canonical.arch.broker import Archive
44
 
        from canonical.launchpad.database import ArchiveMapper
45
 
        archive = Archive(self.archive_name)
46
 
        archiveMapper = ArchiveMapper()
47
 
        archiveMapper.insert(archive)
48
 
        return archive
49
 
 
50
 
    def getTestArchive(self):
51
 
        """Return the stored archive"""
52
 
        if self._archive is None:
53
 
            self._archive = self._getTestArchive()
54
 
        return self._archive
55
 
 
56
 
    category_name = "bah"
57
 
    category_fullname = archive_name + "/" + category_name
58
 
 
59
 
    def _getTestCategory(self):
60
 
        """Insert a test category into the db and return it"""
61
 
        from canonical.launchpad.database import CategoryMapper
62
 
        from canonical.arch.broker import Category
63
 
        category = Category(self.category_name, self.getTestArchive())
64
 
        categoryMapper = CategoryMapper()
65
 
        categoryMapper.insert(category)
66
 
        return category
67
 
 
68
 
    def getTestCategory(self):
69
 
        """return the stored category"""
70
 
        if self._category is None:
71
 
            self._category = self._getTestCategory()
72
 
        return self._category
73
 
 
74
 
    branch_name = "meh"
75
 
    branch_fullname = category_fullname + "--" + branch_name
76
 
 
77
 
    def _getTestBranch(self):
78
 
        """Insert a test branch into the db and return it"""
79
 
        from canonical.launchpad.database import BranchMapper
80
 
        from canonical.arch.broker import Branch
81
 
        branch = Branch(self.branch_name, self.getTestCategory())
82
 
        branchMapper = BranchMapper()
83
 
        branchMapper.insert(branch)
84
 
        return branch
85
 
    
86
 
    def getTestBranch(self):
87
 
        """return the stored branch"""
88
 
        if self._branch is None:
89
 
            self._branch = self._getTestBranch()
90
 
        return self._branch
91
 
 
92
 
    version_name = "0"
93
 
    version_fullname = branch_fullname + "--" + version_name
94
 
 
95
 
    def _getTestVersion(self, name):
96
 
        """Insert a test version into the db and return it"""
97
 
        from canonical.launchpad.database import VersionMapper
98
 
        from canonical.arch.broker import Version
99
 
        version = Version(name, self.getTestBranch())
100
 
        versionMapper = VersionMapper()
101
 
        versionMapper.insert(version)
102
 
        return version
103
 
    
104
 
    def getTestVersion(self, name=version_name):
105
 
        """return the stored version"""
106
 
        if name not in self._versions:
107
 
            self._versions[name] = self._getTestVersion(name)
108
 
        return self._versions[name]
109
 
 
110
 
    revision_name = "base-0"
111
 
    revision_fullname = version_fullname + "--" + revision_name
112
 
 
113
 
    def _getTestRevision(self):
114
 
        """Insert a test revision into the db and return it"""
115
 
        from canonical.launchpad.database import RevisionMapper
116
 
        from canonical.arch.broker import Revision
117
 
        revision = Revision(self.revision_name, self.getTestVersion())
118
 
        revisionMapper = RevisionMapper()
119
 
        revisionMapper.insert(revision)
120
 
        return revision
121
 
    
122
 
    def getTestRevision(self):
123
 
        """return the stored revision"""
124
 
        if self._revision is None:
125
 
            self._revision = self._getTestRevision()
126
 
        return self._revision
127
 
 
128
 
 
129
 
class DatabaseAndArchiveTestCase(DatabaseTestCase):
130
 
 
131
 
    # FIXME: A lot of stuff here should be factored out with PyArch
132
 
    # test framework when the PyArch test suite will be reorganized.
133
 
    
134
 
    def setUp(self):
135
 
        DatabaseTestCase.setUp(self)
136
 
        self._saved_env_home = os.environ.get('HOME')
137
 
        if os.environ.has_key('EDITOR'):
138
 
            self._saved_env_editor = os.environ['EDITOR']
139
 
            del(os.environ['EDITOR'])
140
 
        else:
141
 
            self._saved_env_editor = None
142
 
        self._saved_working_directory = os.getcwd()
143
 
        tmp_dir_name = tempfile.mkdtemp(prefix='launchpad-')
144
 
        tmp_dir = arch.DirName(tmp_dir_name).realpath()
145
 
        self._arch_tmp_home = tmp_dir
146
 
        os.environ['HOME'] = self._arch_tmp_home
147
 
        self._arch_dir = tmp_dir
148
 
 
149
 
    def tearDown(self):
150
 
        os.environ['HOME'] = self._saved_env_home
151
 
        shutil.rmtree(self._arch_tmp_home, ignore_errors=True)
152
 
        if self._saved_env_editor is not None:
153
 
            os.environ['EDITOR'] = self._saved_env_editor
154
 
        os.chdir(self._saved_working_directory)
155
 
        DatabaseTestCase.tearDown(self)
156
 
 
157
 
    def arch_set_user_id(self):
158
 
        arch.set_my_id("John Doe <jdoe@example.com>")
159
 
 
160
 
    def arch_make_archive(self, name):
161
 
        return arch.make_archive(name, self._arch_dir/name)
162
 
 
163
 
    def arch_make_mirror(self, master_name):
164
 
        master = arch.Archive(master_name)
165
 
        name = master.name + '-MIRROR'
166
 
        return master.make_mirror(name, location = self._arch_dir/name,
167
 
                                  signed=False, listing=True)
168
 
 
169
 
    def arch_make_tree(self, name, version):
170
 
        path = self._arch_dir/name
171
 
        os.mkdir(path)
172
 
        return arch.init_tree(path, version)
173
 
 
174
 
 
175
 
def main(**kwargs):
176
 
    unittest.main(**kwargs)
177
 
 
178
 
def register(name):
179
 
    def test_suite():
180
 
        return unittest.findTestCases(sys.modules[name])
181
 
    module = sys.modules[name]
182
 
    module.test_suite = test_suite
183
 
    if name == "__main__":
184
 
        main()