diff --git a/marconi/tests/functional/base.py b/marconi/tests/functional/base.py index 9a0cff0d7..96cd6242f 100644 --- a/marconi/tests/functional/base.py +++ b/marconi/tests/functional/base.py @@ -17,6 +17,8 @@ import abc import multiprocessing + +from marconi.openstack.common import timeutils from marconi.queues import bootstrap # NOTE(flaper87): This is necessary to register, # wsgi configs and won't be permanent. It'll be @@ -109,6 +111,52 @@ class FunctionalTestBase(testing.TestBase): self.assertEqual(result_json['messages']['total'], total) + if 'oldest' in result_json['messages']: + oldest_message = result_json['messages']['oldest'] + self.verify_message_stats(oldest_message) + + newest_message = result_json['messages']['newest'] + self.verify_message_stats(newest_message) + + def verify_message_stats(self, message): + """Verifies the oldest & newest message stats + + :param message: oldest (or) newest message returned by + queue_name/stats. + """ + expected_keys = ['age', 'created', 'href'] + + response_keys = message.keys() + response_keys.sort() + self.assertEqual(response_keys, expected_keys) + + # Verify that age has valid values + age = message['age'] + self.assertTrue(0 <= age <= self.limits.message_ttl_max, + msg='Invalid Age {0}'.format(age)) + + # Verify that GET on href returns 200 + path = message['href'] + result = self.client.get(path) + self.assertEqual(result.status_code, 200) + + # Verify that created time falls within the last 10 minutes + # NOTE(malini): The messages are created during the test. + created_time = message['created'] + created_time = timeutils.normalize_time( + timeutils.parse_isotime(created_time)) + now = timeutils.utcnow() + + delta = timeutils.delta_seconds(before=created_time, after=now) + # NOTE(malini): The 'int()' below is a work around for the small time + # difference between julianday & UTC. + # (needed to pass this test on sqlite driver) + delta = int(delta) + + msg = 'Invalid Time Delta {0}, Created time {1}, Now {2}' \ + .format(delta, created_time, now) + self.assertTrue(0 <= delta <= 6000, msg) + class Server(object): diff --git a/tests/functional/wsgi/v1/test_queues.py b/tests/functional/wsgi/v1/test_queues.py index fc08dc137..07c2cbfb8 100644 --- a/tests/functional/wsgi/v1/test_queues.py +++ b/tests/functional/wsgi/v1/test_queues.py @@ -74,6 +74,7 @@ class TestInsertQueue(base.FunctionalTestBase): self.headers_response_empty = set(['location']) self.client.set_base_url(self.base_url) + self.header = helpers.create_marconi_headers(self.cfg) @ddt.data('qtestqueue', 'TESTqueue', 'hyphen-name', '_undersore', annotated('test_insert_queue_long_name', 'i' * 64)) @@ -251,12 +252,12 @@ class TestQueueMisc(base.FunctionalTestBase): def setUp(self): super(TestQueueMisc, self).setUp() - self.base_url = '{0}/{1}'.format(self.cfg.marconi.url, - self.cfg.marconi.version) - + self.base_url = self.cfg.marconi.url self.client.set_base_url(self.base_url) - self.queue_url = self.base_url + '/queues/{0}'.format(uuid.uuid1()) + self.queue_url = self.base_url + '/{0}/queues/{1}' \ + .format(self.cfg.marconi.version, + uuid.uuid1()) def test_list_queues(self): """List Queues.""" @@ -264,7 +265,8 @@ class TestQueueMisc(base.FunctionalTestBase): self.client.put(self.queue_url) self.addCleanup(self.client.delete, self.queue_url) - result = self.client.get('/queues') + result = self.client.get('/{0}/queues' + .format(self.cfg.marconi.version)) self.assertEqual(result.status_code, 200) response_keys = result.json().keys() @@ -280,7 +282,9 @@ class TestQueueMisc(base.FunctionalTestBase): self.addCleanup(self.client.delete, self.queue_url) params = {'detailed': True} - result = self.client.get('/queues', params=params) + result = self.client.get('/{0}/queues' + .format(self.cfg.marconi.version), + params=params) self.assertEqual(result.status_code, 200) response_keys = result.json()['queues'][0].keys() @@ -289,12 +293,14 @@ class TestQueueMisc(base.FunctionalTestBase): test_list_queues_detailed.tags = ['smoke', 'positive'] - @ddt.data(0, -1, 30) + @ddt.data(0, -1, 1001) def test_list_queue_invalid_limit(self, limit): """List Queues with a limit value that is not allowed.""" params = {'limit': limit} - result = self.client.get('/queues', params=params) + result = self.client.get('/{0}/queues' + .format(self.cfg.marconi.version), + params=params) self.assertEqual(result.status_code, 400) test_list_queue_invalid_limit.tags = ['negative'] @@ -302,7 +308,8 @@ class TestQueueMisc(base.FunctionalTestBase): def test_check_health(self): """Test health endpoint.""" - result = self.client.get('/health') + result = self.client.get('/{0}/health' + .format(self.cfg.marconi.version)) self.assertEqual(result.status_code, 204) test_check_health.tags = ['positive'] @@ -322,7 +329,7 @@ class TestQueueMisc(base.FunctionalTestBase): def test_check_queue_exists_negative(self): """Checks non-existing queue.""" - path = '/queues/nonexistingqueue' + path = '/{0}/queues/nonexistingqueue'.format(self.cfg.marconi.version) result = self.client.get(path) self.assertEqual(result.status_code, 404) @@ -334,8 +341,8 @@ class TestQueueMisc(base.FunctionalTestBase): def test_get_queue_malformed_marker(self): """List queues with invalid marker.""" - url = self.base_url + '/queues?marker=zzz' - result = self.client.get(url) + path = '/{0}/queues?marker=zzz'.format(self.cfg.marconi.version) + result = self.client.get(path) self.assertEqual(result.status_code, 204) test_get_queue_malformed_marker.tags = ['negative']