~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/canonical/buildd/tests/harness.py

  • Committer: mbp at canonical
  • Date: 2011-11-20 23:37:23 UTC
  • mto: This revision was merged to the branch mainline in revision 14344.
  • Revision ID: mbp@canonical.com-20111120233723-370p96db2crru5tm
Delete canonical.buildd again

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
2
 
# GNU Affero General Public License version 3 (see the file LICENSE).
3
 
 
4
 
__metaclass__ = type
5
 
__all__ = [
6
 
    'BuilddTestCase',
7
 
    ]
8
 
 
9
 
import os
10
 
import tempfile
11
 
import unittest
12
 
from ConfigParser import SafeConfigParser
13
 
 
14
 
from txfixtures.tachandler import TacTestFixture
15
 
 
16
 
from canonical.buildd.slave import BuildDSlave
17
 
 
18
 
from lp.services.osutils import remove_tree
19
 
 
20
 
 
21
 
test_conffile = os.path.join(
22
 
    os.path.dirname(__file__), 'buildd-slave-test.conf')
23
 
 
24
 
 
25
 
class MockBuildManager(object):
26
 
    """Mock BuildManager class.
27
 
 
28
 
    Only implements 'is_archive_private' as False.
29
 
    """
30
 
    is_archive_private = False
31
 
 
32
 
 
33
 
class BuilddTestCase(unittest.TestCase):
34
 
    """Unit tests for logtail mechanisms."""
35
 
 
36
 
    def setUp(self):
37
 
        """Setup a BuildDSlave using the test config."""
38
 
        conf = SafeConfigParser()
39
 
        conf.read(test_conffile)
40
 
        conf.set("slave", "filecache", tempfile.mkdtemp())
41
 
 
42
 
        self.slave = BuildDSlave(conf)
43
 
        self.slave._log = True
44
 
        self.slave.manager = MockBuildManager()
45
 
 
46
 
        self.here = os.path.abspath(os.path.dirname(__file__))
47
 
 
48
 
    def tearDown(self):
49
 
        """Remove the 'filecache' directory used for the tests."""
50
 
        remove_tree(self.slave._cachepath)
51
 
 
52
 
    def makeLog(self, size):
53
 
        """Inject data into the default buildlog file."""
54
 
        f = open(self.slave.cachePath('buildlog'), 'w')
55
 
        f.write("x" * size)
56
 
        f.close()
57
 
 
58
 
 
59
 
class BuilddSlaveTestSetup(TacTestFixture):
60
 
    r"""Setup BuildSlave for use by functional tests
61
 
 
62
 
    >>> fixture = BuilddSlaveTestSetup()
63
 
    >>> fixture.setUp()
64
 
 
65
 
    Make sure the server is running
66
 
 
67
 
    >>> import xmlrpclib
68
 
    >>> s = xmlrpclib.Server('http://localhost:8221/rpc/')
69
 
    >>> s.echo('Hello World')
70
 
    ['Hello World']
71
 
    >>> fixture.tearDown()
72
 
 
73
 
    Again for luck !
74
 
 
75
 
    >>> fixture.setUp()
76
 
    >>> s = xmlrpclib.Server('http://localhost:8221/rpc/')
77
 
 
78
 
    >>> s.echo('Hello World')
79
 
    ['Hello World']
80
 
 
81
 
    >>> info = s.info()
82
 
    >>> len(info)
83
 
    3
84
 
    >>> print info[:2]
85
 
    ['1.0', 'i386']
86
 
 
87
 
    >>> for buildtype in sorted(info[2]):
88
 
    ...     print buildtype
89
 
    binarypackage
90
 
    debian
91
 
    sourcepackagerecipe
92
 
    translation-templates
93
 
 
94
 
    >>> s.status()
95
 
    ['BuilderStatus.IDLE', '']
96
 
 
97
 
    >>> fixture.tearDown()
98
 
    """
99
 
    def setUpRoot(self):
100
 
        """Recreate empty root directory to avoid problems."""
101
 
        remove_tree(self.root)
102
 
        os.mkdir(self.root)
103
 
        filecache = os.path.join(self.root, 'filecache')
104
 
        os.mkdir(filecache)
105
 
        os.environ['HOME'] = self.root
106
 
        os.environ['BUILDD_SLAVE_CONFIG'] = test_conffile
107
 
        # XXX cprov 2005-05-30:
108
 
        # When we are about running it seriously we need :
109
 
        # * install sbuild package
110
 
        # * to copy the scripts for sbuild
111
 
        self.addCleanup(remove_tree, self.root)
112
 
 
113
 
    @property
114
 
    def root(self):
115
 
        return '/var/tmp/buildd'
116
 
 
117
 
    @property
118
 
    def tacfile(self):
119
 
        return os.path.abspath(os.path.join(
120
 
            os.path.dirname(__file__),
121
 
            os.path.pardir,
122
 
            'buildd-slave.tac'
123
 
            ))
124
 
 
125
 
    @property
126
 
    def pidfile(self):
127
 
        return os.path.join(self.root, 'build-slave.pid')
128
 
 
129
 
    @property
130
 
    def logfile(self):
131
 
        return '/var/tmp/build-slave.log'
132
 
 
133
 
    def _hasDaemonStarted(self):
134
 
        """Called by the superclass to check if the daemon is listening.
135
 
 
136
 
        The slave is ready when it's accepting connections.
137
 
        """
138
 
        # This must match buildd-slave-test.conf.
139
 
        return self._isPortListening('localhost', 8221)