2
# arch-tag: 7dec9a9d-a8c2-465e-8843-7b2204c1f85c
4
# Copyright (C) 2004 Canonical Software
5
# Authors: Rob Weir <rob.weir@canonical.com>
6
# Robert Collins <robert.collins@canonical.com>
8
"""Common code for the test suite for the database and broker layers."""
14
from zope.interface.verify import verifyClass, verifyObject
19
from canonical.launchpad.ftests import harness
21
class ZopelessTestSetup(harness.LaunchpadZopelessTestSetup):
22
template = 'launchpad_empty'
25
class DatabaseTestCase(unittest.TestCase):
28
self._zopeless = ZopelessTestSetup()
29
self._zopeless.setUp()
37
self._zopeless.tearDown()
39
archive_name = "foo@bar"
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)
50
def getTestArchive(self):
51
"""Return the stored archive"""
52
if self._archive is None:
53
self._archive = self._getTestArchive()
57
category_fullname = archive_name + "/" + category_name
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)
68
def getTestCategory(self):
69
"""return the stored category"""
70
if self._category is None:
71
self._category = self._getTestCategory()
75
branch_fullname = category_fullname + "--" + branch_name
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)
86
def getTestBranch(self):
87
"""return the stored branch"""
88
if self._branch is None:
89
self._branch = self._getTestBranch()
93
version_fullname = branch_fullname + "--" + version_name
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)
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]
110
revision_name = "base-0"
111
revision_fullname = version_fullname + "--" + revision_name
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)
122
def getTestRevision(self):
123
"""return the stored revision"""
124
if self._revision is None:
125
self._revision = self._getTestRevision()
126
return self._revision
129
class DatabaseAndArchiveTestCase(DatabaseTestCase):
131
# FIXME: A lot of stuff here should be factored out with PyArch
132
# test framework when the PyArch test suite will be reorganized.
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'])
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
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)
157
def arch_set_user_id(self):
158
arch.set_my_id("John Doe <jdoe@example.com>")
160
def arch_make_archive(self, name):
161
return arch.make_archive(name, self._arch_dir/name)
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)
169
def arch_make_tree(self, name, version):
170
path = self._arch_dir/name
172
return arch.init_tree(path, version)
176
unittest.main(**kwargs)
180
return unittest.findTestCases(sys.modules[name])
181
module = sys.modules[name]
182
module.test_suite = test_suite
183
if name == "__main__":