annotate bitten/tests/master.py @ 446:a8c331c2d500

Attempt at a fix for #165.
author cmlenz
date Thu, 23 Aug 2007 17:59:58 +0000
parents cfbc9ee622d5
children c9ac97df8a5e
rev   line source
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
2 #
408
933105ab516b Update file headers and other stuff pointing to the old home.
cmlenz
parents: 403
diff changeset
3 # Copyright (C) 2005-2007 Christopher Lenz <cmlenz@gmx.de>
933105ab516b Update file headers and other stuff pointing to the old home.
cmlenz
parents: 403
diff changeset
4 # Copyright (C) 2007 Edgewall Software
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
5 # All rights reserved.
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
6 #
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
408
933105ab516b Update file headers and other stuff pointing to the old home.
cmlenz
parents: 403
diff changeset
9 # are also available at http://bitten.edgewall.org/wiki/License.
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
10
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
11 import re
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
12 import shutil
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
13 from StringIO import StringIO
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
14 import tempfile
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
15 import unittest
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
16
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents: 408
diff changeset
17 from trac.db import DatabaseManager
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
18 from trac.perm import PermissionCache, PermissionSystem
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
19 from trac.test import EnvironmentStub, Mock
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
20 from trac.web.api import HTTPBadRequest, HTTPMethodNotAllowed, HTTPNotFound, \
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
21 RequestDone
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
22 from trac.web.href import Href
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
23
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
24 from bitten.master import BuildMaster
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
25 from bitten.model import BuildConfig, TargetPlatform, Build, BuildStep, \
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
26 BuildLog, Report, schema
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
27
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
28
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
29 class BuildMasterTestCase(unittest.TestCase):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
30
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
31 def setUp(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
32 self.env = EnvironmentStub()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
33 self.env.path = tempfile.mkdtemp()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
34
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
35 PermissionSystem(self.env).grant_permission('hal', 'BUILD_EXEC')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
36
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
37 # Create tables
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
38 db = self.env.get_db_cnx()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
39 cursor = db.cursor()
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents: 408
diff changeset
40 connector, _ = DatabaseManager(self.env)._get_connector()
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
41 for table in schema:
410
7930cdd83d13 More restructuring: got rid of the `trac_ext` subpackage, which makes no sense now that the master is also coupled to Trac.
cmlenz
parents: 408
diff changeset
42 for stmt in connector.to_sql(table):
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
43 cursor.execute(stmt)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
44
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
45 self.repos = Mock()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
46 self.env.get_repository = lambda authname=None: self.repos
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
47
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
48 def tearDown(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
49 shutil.rmtree(self.env.path)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
50
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
51 def test_create_build(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
52 BuildConfig(self.env, 'test', path='somepath', active=True).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
53 platform = TargetPlatform(self.env, config='test', name="Unix")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
54 platform.rules.append(('family', 'posix'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
55 platform.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
56
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
57 self.repos = Mock(
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
58 get_node=lambda path, rev=None: Mock(
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
59 get_entries=lambda: [Mock(), Mock()],
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
60 get_history=lambda: [('somepath', 123, 'edit'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
61 ('somepath', 121, 'edit'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
62 ('somepath', 120, 'edit')]
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
63 ),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
64 get_changeset=lambda rev: Mock(date=42),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
65 normalize_path=lambda path: path,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
66 rev_older_than=lambda rev1, rev2: rev1 < rev2
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
67 )
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
68
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
69 inheaders = {'Content-Type': 'application/x-bitten+xml'}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
70 inbody = StringIO("""<slave name="hal">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
71 <platform>Power Macintosh</platform>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
72 <os family="posix" version="8.1.0">Darwin</os>
426
a08fa5ce9aff Applied patch by Sam Steele for #167.
cmlenz
parents: 420
diff changeset
73 <package name="java" version="2.4.3"/>
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
74 </slave>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
75 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
76 outbody = StringIO()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
77 req = Mock(method='POST', base_path='', path_info='/builds',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
78 href=Href('/trac'), abs_href=Href('http://example.org/trac'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
79 remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
80 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
81 get_header=lambda x: inheaders.get(x), read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
82 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
83 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
84 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
85
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
86 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
87 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
88 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
89 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
90 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
91 except RequestDone:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
92 self.assertEqual(201, outheaders['Status'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
93 self.assertEqual('text/plain', outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
94 location = outheaders['Location']
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
95 mo = re.match('http://example.org/trac/builds/(\d+)', location)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
96 assert mo, 'Location was %r' % location
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
97 self.assertEqual('Build pending', outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
98 build = Build.fetch(self.env, int(mo.group(1)))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
99 self.assertEqual(Build.IN_PROGRESS, build.status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
100 self.assertEqual('hal', build.slave)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
101
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
102 def test_create_build_invalid_xml(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
103 inheaders = {'Content-Type': 'application/x-bitten+xml'}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
104 inbody = StringIO('<slave></salve>')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
105 req = Mock(method='POST', base_path='', path_info='/builds',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
106 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
107 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
108 get_header=lambda x: inheaders.get(x), read=inbody.read)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
109
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
110 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
111 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
112 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
113 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
114 self.fail('Expected HTTPBadRequest')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
115 except HTTPBadRequest, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
116 self.assertEqual('XML parser error', e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
117
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
118 def test_create_build_no_post(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
119 req = Mock(method='GET', base_path='', path_info='/builds',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
120 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
121 perm=PermissionCache(self.env, 'hal'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
122 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
123 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
124 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
125 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
126 self.fail('Expected HTTPMethodNotAllowed')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
127 except HTTPMethodNotAllowed, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
128 self.assertEqual('Method not allowed', e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
129
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
130 def test_create_build_no_match(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
131 inheaders = {'Content-Type': 'application/x-bitten+xml'}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
132 inbody = StringIO("""<slave name="hal">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
133 <platform>Power Macintosh</platform>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
134 <os family="posix" version="8.1.0">Darwin</os>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
135 </slave>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
136 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
137 outbody = StringIO()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
138 req = Mock(method='POST', base_path='', path_info='/builds',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
139 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
140 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
141 get_header=lambda x: inheaders.get(x), read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
142 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
143 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
144 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
145
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
146 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
147 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
148 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
149 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
150 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
151 except RequestDone:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
152 self.assertEqual(204, outheaders['Status'])
420
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
153 self.assertEqual('', outbody.getvalue())
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
154
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
155 def test_cancel_build(self):
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
156 config = BuildConfig(self.env, 'test', path='somepath', active=True,
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
157 recipe='<build></build>')
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
158 config.insert()
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
159 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
160 status=Build.IN_PROGRESS, started=42)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
161 build.insert()
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
162
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
163 outheaders = {}
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
164 outbody = StringIO()
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
165 req = Mock(method='DELETE', base_path='',
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
166 path_info='/builds/%d' % build.id,
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
167 href=Href('/trac'), remote_addr='127.0.0.1', args={},
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
168 perm=PermissionCache(self.env, 'hal'),
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
169 send_response=lambda x: outheaders.setdefault('Status', x),
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
170 send_header=lambda x, y: outheaders.setdefault(x, y),
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
171 write=outbody.write)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
172
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
173 module = BuildMaster(self.env)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
174 assert module.match_request(req)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
175 try:
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
176 module.process_request(req)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
177 self.fail('Expected RequestDone')
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
178 except RequestDone:
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
179 self.assertEqual(204, outheaders['Status'])
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
180 self.assertEqual('', outbody.getvalue())
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
181
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
182 # Make sure the started timestamp has been set
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
183 build = Build.fetch(self.env, build.id)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
184 self.assertEqual(Build.PENDING, build.status)
23de253435b8 Slaves now attempt to explicitly cancel builds when they are interrupted.
cmlenz
parents: 410
diff changeset
185 assert not build.started
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
186
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
187 def test_initiate_build(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
188 config = BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
189 recipe='<build></build>')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
190 config.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
191 platform = TargetPlatform(self.env, config='test', name="Unix")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
192 platform.rules.append(('family', 'posix'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
193 platform.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
194 build = Build(self.env, 'test', '123', platform.id, slave='hal',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
195 rev_time=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
196 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
197
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
198 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
199 outbody = StringIO()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
200
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
201 req = Mock(method='GET', base_path='',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
202 path_info='/builds/%d' % build.id,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
203 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
204 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
205 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
206 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
207 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
208
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
209 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
210 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
211 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
212 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
213 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
214 except RequestDone:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
215 self.assertEqual(200, outheaders['Status'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
216 self.assertEqual('39', outheaders['Content-Length'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
217 self.assertEqual('application/x-bitten+xml',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
218 outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
219 self.assertEqual('attachment; filename=recipe_test_r123.xml',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
220 outheaders['Content-Disposition'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
221 self.assertEqual('<build path="somepath" revision="123"/>',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
222 outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
223
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
224 # Make sure the started timestamp has been set
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
225 build = Build.fetch(self.env, build.id)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
226 assert build.started
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
227
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
228 def test_initiate_build_no_such_build(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
229 req = Mock(method='GET', base_path='',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
230 path_info='/builds/123', href=Href('/trac'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
231 remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
232 perm=PermissionCache(self.env, 'hal'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
233
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
234 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
235 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
236 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
237 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
238 self.fail('Expected HTTPNotFound')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
239 except HTTPNotFound, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
240 self.assertEqual('No such build', e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
241
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
242 def test_process_unknown_collection(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
243 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
244 recipe='<build></build>').insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
245 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
246 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
247
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
248 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
249 path_info='/builds/%d/files/' % build.id,
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
250 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
251 perm=PermissionCache(self.env, 'hal'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
252
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
253 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
254 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
255 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
256 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
257 self.fail('Expected HTTPNotFound')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
258 except HTTPNotFound, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
259 self.assertEqual('No such collection', e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
260
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
261 def test_process_build_step_success(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
262 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
263 <step id="foo">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
264 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
265 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
266 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
267 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
268 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
269 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
270 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
271
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
272 inbody = StringIO("""<result step="foo" status="success"
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
273 time="2007-04-01T15:30:00.0000"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
274 duration="3.45">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
275 </result>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
276 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
277 outbody = StringIO()
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
278 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
279 path_info='/builds/%d/steps/' % build.id,
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
280 href=Href('/trac'), abs_href=Href('http://example.org/trac'),
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
281 remote_addr='127.0.0.1', args={},
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
282 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
283 read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
284 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
285 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
286 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
287 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
288 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
289 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
290 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
291 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
292 except RequestDone:
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
293 self.assertEqual(201, outheaders['Status'])
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
294 self.assertEqual('20', outheaders['Content-Length'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
295 self.assertEqual('text/plain', outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
296 self.assertEqual('Build step processed', outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
297
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
298 build = Build.fetch(self.env, build.id)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
299 self.assertEqual(Build.SUCCESS, build.status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
300 assert build.stopped
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
301 assert build.stopped > build.started
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
302
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
303 steps = list(BuildStep.select(self.env, build.id))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
304 self.assertEqual(1, len(steps))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
305 self.assertEqual('foo', steps[0].name)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
306 self.assertEqual(BuildStep.SUCCESS, steps[0].status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
307
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
308 def test_process_build_step_success_with_log(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
309 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
310 <step id="foo">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
311 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
312 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
313 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
314 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
315 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
316 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
317 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
318
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
319 inbody = StringIO("""<result step="foo" status="success"
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
320 time="2007-04-01T15:30:00.0000"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
321 duration="3.45">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
322 <log generator="http://bitten.cmlenz.net/tools/python#unittest">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
323 <message level="info">Doing stuff</message>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
324 <message level="error">Ouch that hurt</message>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
325 </log>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
326 </result>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
327 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
328 outbody = StringIO()
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
329 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
330 path_info='/builds/%d/steps/' % build.id,
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
331 href=Href('/trac'), abs_href=Href('http://example.org/trac'),
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
332 remote_addr='127.0.0.1', args={},
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
333 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
334 read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
335 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
336 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
337 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
338 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
339 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
340 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
341 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
342 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
343 except RequestDone:
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
344 self.assertEqual(201, outheaders['Status'])
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
345 self.assertEqual('20', outheaders['Content-Length'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
346 self.assertEqual('text/plain', outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
347 self.assertEqual('Build step processed', outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
348
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
349 build = Build.fetch(self.env, build.id)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
350 self.assertEqual(Build.SUCCESS, build.status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
351 assert build.stopped
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
352 assert build.stopped > build.started
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
353
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
354 steps = list(BuildStep.select(self.env, build.id))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
355 self.assertEqual(1, len(steps))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
356 self.assertEqual('foo', steps[0].name)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
357 self.assertEqual(BuildStep.SUCCESS, steps[0].status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
358
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
359 logs = list(BuildLog.select(self.env, build=build.id, step='foo'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
360 self.assertEqual(1, len(logs))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
361 self.assertEqual('http://bitten.cmlenz.net/tools/python#unittest',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
362 logs[0].generator)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
363 self.assertEqual(2, len(logs[0].messages))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
364 self.assertEqual((u'info', u'Doing stuff'), logs[0].messages[0])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
365 self.assertEqual((u'error', u'Ouch that hurt'), logs[0].messages[1])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
366
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
367 def test_process_build_step_success_with_report(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
368 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
369 <step id="foo">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
370 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
371 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
372 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
373 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
374 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
375 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
376 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
377
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
378 inbody = StringIO("""<result step="foo" status="success"
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
379 time="2007-04-01T15:30:00.0000"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
380 duration="3.45">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
381 <report category="test"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
382 generator="http://bitten.cmlenz.net/tools/python#unittest">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
383 <test fixture="my.Fixture" file="my/test/file.py">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
384 <stdout>Doing my thing</stdout>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
385 </test>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
386 </report>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
387 </result>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
388 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
389 outbody = StringIO()
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
390 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
391 path_info='/builds/%d/steps/' % build.id,
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
392 href=Href('/trac'), abs_href=Href('http://example.org/trac'),
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
393 remote_addr='127.0.0.1', args={},
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
394 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
395 read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
396 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
397 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
398 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
399 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
400 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
401 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
402 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
403 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
404 except RequestDone:
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
405 self.assertEqual(201, outheaders['Status'])
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
406 self.assertEqual('20', outheaders['Content-Length'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
407 self.assertEqual('text/plain', outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
408 self.assertEqual('Build step processed', outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
409
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
410 build = Build.fetch(self.env, build.id)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
411 self.assertEqual(Build.SUCCESS, build.status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
412 assert build.stopped
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
413 assert build.stopped > build.started
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
414
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
415 steps = list(BuildStep.select(self.env, build.id))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
416 self.assertEqual(1, len(steps))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
417 self.assertEqual('foo', steps[0].name)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
418 self.assertEqual(BuildStep.SUCCESS, steps[0].status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
419
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
420 reports = list(Report.select(self.env, build=build.id, step='foo'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
421 self.assertEqual(1, len(reports))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
422 self.assertEqual('test', reports[0].category)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
423 self.assertEqual('http://bitten.cmlenz.net/tools/python#unittest',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
424 reports[0].generator)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
425 self.assertEqual(1, len(reports[0].items))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
426 self.assertEqual({
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
427 'fixture': 'my.Fixture',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
428 'file': 'my/test/file.py',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
429 'stdout': 'Doing my thing',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
430 'type': 'test',
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
431 }, reports[0].items[0])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
432
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
433 def test_process_build_step_failure(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
434 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
435 <step id="foo">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
436 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
437 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
438 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
439 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
440 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
441 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
442 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
443
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
444 inbody = StringIO("""<result step="foo" status="failure"
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
445 time="2007-04-01T15:30:00.0000"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
446 duration="3.45">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
447 </result>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
448 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
449 outbody = StringIO()
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
450 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
451 path_info='/builds/%d/steps/' % build.id,
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
452 href=Href('/trac'), abs_href=Href('http://example.org/trac'),
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
453 remote_addr='127.0.0.1', args={},
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
454 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
455 read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
456 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
457 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
458 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
459 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
460 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
461 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
462 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
463 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
464 except RequestDone:
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
465 self.assertEqual(201, outheaders['Status'])
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
466 self.assertEqual('20', outheaders['Content-Length'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
467 self.assertEqual('text/plain', outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
468 self.assertEqual('Build step processed', outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
469
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
470 build = Build.fetch(self.env, build.id)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
471 self.assertEqual(Build.FAILURE, build.status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
472 assert build.stopped
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
473 assert build.stopped > build.started
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
474
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
475 steps = list(BuildStep.select(self.env, build.id))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
476 self.assertEqual(1, len(steps))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
477 self.assertEqual('foo', steps[0].name)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
478 self.assertEqual(BuildStep.FAILURE, steps[0].status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
479
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
480 def test_process_build_step_failure_ignored(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
481 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
482 <step id="foo" onerror="ignore">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
483 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
484 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
485 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
486 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
487 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
488 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
489 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
490
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
491 inbody = StringIO("""<result step="foo" status="failure"
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
492 time="2007-04-01T15:30:00.0000"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
493 duration="3.45">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
494 </result>""")
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
495 outheaders = {}
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
496 outbody = StringIO()
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
497 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
498 path_info='/builds/%d/steps/' % build.id,
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
499 href=Href('/trac'), abs_href=Href('http://example.org/trac'),
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
500 remote_addr='127.0.0.1', args={},
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
501 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
502 read=inbody.read,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
503 send_response=lambda x: outheaders.setdefault('Status', x),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
504 send_header=lambda x, y: outheaders.setdefault(x, y),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
505 write=outbody.write)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
506 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
507 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
508 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
509 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
510 self.fail('Expected RequestDone')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
511 except RequestDone:
403
b187f0894838 Fix build master unit tests broken in [449].
cmlenz
parents: 401
diff changeset
512 self.assertEqual(201, outheaders['Status'])
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
513 self.assertEqual('20', outheaders['Content-Length'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
514 self.assertEqual('text/plain', outheaders['Content-Type'])
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
515 self.assertEqual('Build step processed', outbody.getvalue())
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
516
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
517 build = Build.fetch(self.env, build.id)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
518 self.assertEqual(Build.SUCCESS, build.status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
519 assert build.stopped
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
520 assert build.stopped > build.started
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
521
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
522 steps = list(BuildStep.select(self.env, build.id))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
523 self.assertEqual(1, len(steps))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
524 self.assertEqual('foo', steps[0].name)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
525 self.assertEqual(BuildStep.FAILURE, steps[0].status)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
526
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
527 def test_process_build_step_invalid_xml(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
528 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
529 <step id="foo">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
530 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
531 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
532 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
533 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
534 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
535 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
536 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
537
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
538 inbody = StringIO("""<result></rsleut>""")
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
539 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
540 path_info='/builds/%d/steps/' % build.id,
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
541 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
542 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
543 read=inbody.read)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
544
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
545 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
546 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
547 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
548 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
549 self.fail('Expected HTTPBadRequest')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
550 except HTTPBadRequest, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
551 self.assertEqual('XML parser error', e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
552
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
553 def test_process_build_step_invalid_datetime(self):
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
554 recipe = """<build>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
555 <step id="foo">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
556 </step>
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
557 </build>"""
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
558 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
559 recipe=recipe).insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
560 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
561 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
562 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
563
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
564 inbody = StringIO("""<result step="foo" status="success"
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
565 time="sometime tomorrow maybe"
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
566 duration="3.45">
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
567 </result>""")
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
568 req = Mock(method='POST', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
569 path_info='/builds/%d/steps/' % build.id,
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
570 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
571 perm=PermissionCache(self.env, 'hal'),
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
572 read=inbody.read)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
573
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
574 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
575 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
576 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
577 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
578 self.fail('Expected HTTPBadRequest')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
579 except HTTPBadRequest, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
580 self.assertEqual("Invalid ISO date/time 'sometime tomorrow maybe'",
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
581 e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
582
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
583 def test_process_build_step_no_post(self):
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
584 BuildConfig(self.env, 'test', path='somepath', active=True,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
585 recipe='<build></build>').insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
586 build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
587 started=42)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
588 build.insert()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
589
401
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
590 req = Mock(method='GET', base_path='',
a10942252ebc Use POST for submitting step results, instead of PUT.
cmlenz
parents: 392
diff changeset
591 path_info='/builds/%d/steps/' % build.id,
392
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
592 href=Href('/trac'), remote_addr='127.0.0.1', args={},
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
593 perm=PermissionCache(self.env, 'hal'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
594
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
595 module = BuildMaster(self.env)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
596 assert module.match_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
597 try:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
598 module.process_request(req)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
599 self.fail('Expected HTTPMethodNotAllowed')
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
600 except HTTPMethodNotAllowed, e:
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
601 self.assertEqual('Method not allowed', e.detail)
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
602
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
603
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
604 def suite():
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
605 suite = unittest.TestSuite()
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
606 suite.addTest(unittest.makeSuite(BuildMasterTestCase, 'test'))
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
607 return suite
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
608
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
609 if __name__ == '__main__':
026d9aa41b85 Merged HTTP branch into trunk.
cmlenz
parents:
diff changeset
610 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software