Fix RSS feed unavailable when no failure

This commit fixes RSS feed unavailable error to return zero length entry
list when there is specified run_metadata_key and value with no failure.

Closes-Bug: #1573630
Change-Id: I48659140314a2d8737611dd0a86097f10c1f3ac8
This commit is contained in:
Masayuki Igawa 2016-05-31 17:53:57 +09:00 committed by Matthew Treinish
parent 0a45cdb81f
commit 8d9eb1da5d
3 changed files with 37 additions and 4 deletions

View File

@ -457,9 +457,12 @@ def get_recent_failed_runs_rss(run_metadata_key, value):
return feeds[run_metadata_key][value].rss_str()
feeds["last runs"][run_metadata_key][value] = last_run
else:
msg = 'No Failed Runs for run metadata %s: %s' % (
run_metadata_key, value)
return abort(make_response(msg, 400))
count = api.get_runs_counts_by_run_metadata(
run_metadata_key, value, session=session)
if count == 0:
msg = 'No Failed Runs for run metadata %s: %s' % (
run_metadata_key, value)
return abort(make_response(msg, 400))
for run in failed_runs:
meta = api.get_run_metadata(run.uuid, session=session)
uuid = [x.value for x in meta if x.key == 'build_uuid'][0]

View File

@ -1029,3 +1029,33 @@ class TestRestAPI(base.TestCase):
self.assertEqual(timestamp_b,
date_parser.parse(out.entries[0].published).replace(
tzinfo=None))
@mock.patch('subunit2sql.db.api.get_recent_failed_runs_by_run_metadata',
return_value=[])
@mock.patch('subunit2sql.db.api.get_runs_counts_by_run_metadata',
return_value=1)
def test_get_recent_failed_runs_rss_no_failure_valid_meta(self, count_mock,
db_mock):
api.rss_opts['data_dir'] = tempfile.gettempdir()
api.rss_opts['frontend_url'] = 'http://status.openstack.org'
build_uuid = str(uuid.uuid4())
meta_mock = mock.patch(
'subunit2sql.db.api.get_run_metadata',
return_value=[
models.RunMetadata(key='build_name', value='job'),
models.RunMetadata(key='build_uuid', value=build_uuid)])
meta_mock.start()
self.addCleanup(meta_mock.stop)
res = self.app.get('/runs/key/b_key/b_value/recent/rss')
self.assertEqual(200, res.status_code)
db_mock.assert_called_once_with('b_key', 'b_value',
start_date=None, session=api.Session())
count_mock.assert_called_once_with('b_key', 'b_value',
session=api.Session())
db_mock.reset_mock()
count_mock.reset_mock()
out = feedparser.parse(res.data.decode('utf-8'))
title = 'Failures for %s: %s' % ('b_key', 'b_value')
self.assertEqual(title, out['feed']['title'])
self.assertEqual('en', out['feed']['language'])
self.assertEqual(0, len(out.entries))

View File

@ -5,7 +5,7 @@ pbr>=1.6 # Apache-2.0
Flask<1.0,>=0.11 # BSD
pymemcache >= 1.3.5 # Apache-2.0
dogpile.cache>=0.6.0 # BSD
subunit2sql>=1.6.0 # Apache-2.0
subunit2sql>=1.7.0 # Apache-2.0
SQLAlchemy<1.1.0,>=1.0.10 # MIT
flask-jsonpify>=1.5.0 # MIT
PyMySQL>=0.6.2 # MIT License