def test_format_link_not_in_repos_with_line(self): BuildConfig(self.env, name='test', path='trunk').insert() build = Build(self.env, config='test', platform=1, rev=123, rev_time=42, status=Build.SUCCESS, slave='hal') build.insert() step = BuildStep(self.env, build=build.id, name='foo', status=BuildStep.SUCCESS) step.insert() def _raise(): raise TracError('No such node') self.repos.get_node = lambda path, rev: _raise() req = Mock(method='GET', href=Href('/trac'), authname='hal') comp = SourceFileLinkFormatter(self.env) formatter = comp.get_formatter(req, build) output = formatter(step, None, None, u'error in foo/bar.c:123: bad') self.assertEqual(Markup, type(output)) self.assertEqual('error in foo/bar.c:123: bad', output)
def test_format_link_in_repos_with_line(self): BuildConfig(self.env, name='test', path='trunk').insert() build = Build(self.env, config='test', platform=1, rev=123, rev_time=42, status=Build.SUCCESS, slave='hal') build.insert() step = BuildStep(self.env, build=build.id, name='foo', status=BuildStep.SUCCESS) step.insert() self.repos.get_node = lambda path, rev: (path, rev) req = Mock(method='GET', href=Href('/trac'), authname='hal') comp = SourceFileLinkFormatter(self.env) formatter = comp.get_formatter(req, build) # posix output = formatter(step, None, None, u'error in foo/bar.c:123: bad') self.assertEqual(Markup, type(output)) self.assertEqual( 'error in <a href="/trac/browser/trunk/foo/bar.c#L123">' 'foo/bar.c:123</a>: bad', output) # windows output = formatter(step, None, None, u'error in foo\\win.c:123: bad') self.assertEqual(Markup, type(output)) self.assertEqual( r'error in <a href="/trac/browser/trunk/foo/win.c#L123">' 'foo\win.c:123</a>: bad', output)
def test_format_bad_links(self): BuildConfig(self.env, name='test', path='trunk').insert() build = Build(self.env, config='test', platform=1, rev=123, rev_time=42, status=Build.SUCCESS, slave='hal') build.insert() step = BuildStep(self.env, build=build.id, name='foo', status=BuildStep.SUCCESS) step.insert() self.repos.get_node = lambda path, rev: (path, rev) req = Mock(method='GET', href=Href('/trac'), authname='hal') comp = SourceFileLinkFormatter(self.env) formatter = comp.get_formatter(req, build) output = formatter(step, None, None, u'Linking -I../.. with ../libtool') self.assertEqual(Markup, type(output)) self.assertEqual('Linking -I../.. with ../libtool', output)
def _start_new_step(self, build, stepname): """Creates the in-memory representation for a newly started step, ready to be persisted to the database. """ step = BuildStep(self.env, build=build.id, name=stepname) step.status = BuildStep.IN_PROGRESS step.started = int(time.time()) step.stopped = 0 return step
def test_insert(self): step = BuildStep(self.env, build=1, name='test', description='Foo bar', status=BuildStep.SUCCESS) step.insert() self.assertEqual(True, step.exists) db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute("SELECT build,name,description,status,started,stopped " "FROM bitten_step") self.assertEqual((1, 'test', 'Foo bar', BuildStep.SUCCESS, 0, 0), cursor.fetchone())
def test_insert_with_errors(self): step = BuildStep(self.env, build=1, name='test', description='Foo bar', status=BuildStep.SUCCESS) step.errors += ['Foo', 'Bar'] step.insert() self.assertEqual(True, step.exists) db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute("SELECT build,name,description,status,started,stopped " "FROM bitten_step") self.assertEqual((1, 'test', 'Foo bar', BuildStep.SUCCESS, 0, 0), cursor.fetchone()) cursor.execute("SELECT message FROM bitten_error ORDER BY orderno") self.assertEqual(('Foo',), cursor.fetchone()) self.assertEqual(('Bar',), cursor.fetchone())
def test_insert_no_build_or_step(self): log = BuildLog(self.env, step='test') self.assertRaises(AssertionError, log.insert) # No build step = BuildStep(self.env, build=1) self.assertRaises(AssertionError, log.insert) # No step
def test_insert_no_build_or_name(self): step = BuildStep(self.env, name='test') self.assertRaises(AssertionError, step.insert) # No build step = BuildStep(self.env, build=1) self.assertRaises(AssertionError, step.insert) # No name
def test_new(self): step = BuildStep(self.env) self.assertEqual(False, step.exists) self.assertEqual(None, step.build) self.assertEqual(None, step.name)
if recipe_step.id == stepname: index = num current_step = recipe_step if index is None: self._send_error(req, HTTP_FORBIDDEN, 'No such build step' % stepname) last_step = index == num self.log.debug( 'Slave %s (build %d) completed step %d (%s) with ' 'status %s', build.slave, build.id, index, stepname, elem.attr['status']) db = self.env.get_db_cnx() step = BuildStep(self.env, build=build.id, name=stepname) try: step.started = int(_parse_iso_datetime(elem.attr['time'])) step.stopped = step.started + float(elem.attr['duration']) except ValueError, e: self.log.error('Error parsing build step timestamp: %s', e, exc_info=True) self._send_error(req, HTTP_BAD_REQUEST, e.args[0]) if elem.attr['status'] == 'failure': self.log.warning('Build %s step %s failed', build.id, stepname) step.status = BuildStep.FAILURE if current_step.onerror == 'fail': last_step = True else: step.status = BuildStep.SUCCESS