def test_parse_info_property_fail(self): value = 'invalid json' self.assertRaises(ValueError, lambda: common.parse_info_property(value)) value = {'build': "invalid json"} self.assertRaises(ValueError, lambda: common.parse_info_property(value)) value = '42' # not a dict self.assertRaises(ValueError, lambda: common.parse_info_property(value))
def test_parse_info_property_succeed(self): value, expected = {'build': {'foo': 'bar'}}, {'build': {'foo': 'bar'}} self.assertDictEqual(common.parse_info_property(value), expected) value, expected = {'build': '{"foo": "bar"}'}, {'build': {'foo': 'bar'}} self.assertDictEqual(common.parse_info_property(value), expected) value, expected = '{"build": {"foo": "bar"}}', {'build': {'foo': 'bar'}} self.assertDictEqual(common.parse_info_property(value), expected)
def _get_build_def(build): """Returns buildbucket build def a buildbot build.""" info = build.properties.getProperty(common.INFO_PROPERTY) if info is None: return None try: info = common.parse_info_property(info) except ValueError: return None return info.get(common.BUILD_PROPERTY)
def test_parse_info_property_succeed(self): value, expected = {'build': {'foo': 'bar'}}, {'build': {'foo': 'bar'}} self.assertDictEqual(common.parse_info_property(value), expected) value, expected = { 'build': '{"foo": "bar"}' }, { 'build': { 'foo': 'bar' } } self.assertDictEqual(common.parse_info_property(value), expected) value, expected = '{"build": {"foo": "bar"}}', { 'build': { 'foo': 'bar' } } self.assertDictEqual(common.parse_info_property(value), expected)
def _get_leases_from_db(self): """Returns currently held leases from the database. Queries for not-completed-yet build requests. This may take a long time. Returns: A dict of the same structure, as self._leases. See its description. """ assert self.started self.log( ('Requesting for all not yet completed build requests. ' 'This may take a long time...'), level=logging.DEBUG) build_requests = yield self.buildbot.get_incomplete_build_requests() self.log( 'Received %d build requests' % len(build_requests), level=logging.DEBUG) leases = {} for build_request in build_requests: info = yield build_request.get_property(common.INFO_PROPERTY) if not info: # Not a buildbucket build request. continue try: info = common.parse_info_property(info) except ValueError as e: self.log('invalid buildbucket property: %s' % e, level=logging.ERROR) continue build = info.get('build', {}) build_id = build.get('id') lease_key = build.get('lease_key') if not (build_id and lease_key): self.log( 'build_id or lease_key are not found in %r' % build_request, level=logging.WARNING) continue if build_id in leases: self.log( 'more than one non-completed build request for build %s' % build_id, level=logging.WARNING) continue leases[build_id] = { 'key': lease_key, 'build_request': build_request, } returnValue(leases)