# Copyright (c) 2016 LARSEN & TOUBRO LIMITED. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. from oslo_utils import uuidutils from tempest import config from tempest.lib.common.utils import data_utils from tempest.lib import decorators from tempest.lib import exceptions as lib_exc from zaqar_tempest_plugin.tests import base CONF = config.CONF class TestSubscriptionsNegative(base.BaseV2MessagingTest): @classmethod def resource_setup(cls): super(TestSubscriptionsNegative, cls).resource_setup() cls.queue_name = data_utils.rand_name('Queues-Test') # Create Queue cls.client.create_queue(cls.queue_name) def _create_subscriptions(self): bodys = self.generate_subscription_body() results = [] for body in bodys: resp, body = self.create_subscription(queue_name=self.queue_name, rbody=body) results.append((resp, body)) return results @decorators.attr(type=['negative']) @decorators.idempotent_id('0bda2907-a783-4614-af16-23d7a7d53b72') def test_create_subscriptions_with_invalid_body(self): # Missing subscriber parameter in body message_ttl = data_utils.\ rand_int_id(start=60, end=CONF.messaging.max_message_ttl) key = data_utils.arbitrary_string(size=20, base_text='MessagingKey') value = data_utils.arbitrary_string(size=20, base_text='MessagingValue') option_body = {key: value} rbody = {'options': option_body, 'ttl': message_ttl} self.assertRaises(lib_exc.BadRequest, self.create_subscription, self.queue_name, rbody) @decorators.attr(type=['negative']) @decorators.idempotent_id('36601d23-77d5-42b1-b234-6789acdda7ba') def test_create_subscriptions_with_no_body(self): # Missing parameters in body rbody = {} self.assertRaises(lib_exc.BadRequest, self.create_subscription, self.queue_name, rbody) @decorators.attr(type=['negative']) @decorators.idempotent_id('1d510d93-635f-4161-b071-91f838d6907e') def test_create_subscriptions_with_invalid_subscriber(self): # The subscriber type of subscription must be supported in the list # ['http', 'https', 'mailto'] message_ttl = data_utils.\ rand_int_id(start=60, end=CONF.messaging.max_message_ttl) key = data_utils.arbitrary_string(size=20, base_text='MessagingKey') value = data_utils.arbitrary_string(size=20, base_text='MessagingValue') option_body = {key: value} subscriber = 'fake' rbody = {'options': option_body, 'ttl': message_ttl, 'subscriber': subscriber} self.assertRaises(lib_exc.BadRequest, self.create_subscription, self.queue_name, rbody) @decorators.attr(type=['negative']) @decorators.idempotent_id('65be33a4-a063-47e1-b56b-9d7aa979bbcb') def test_create_subscriptions_with_unsupported_subscriber(self): # The subscriber type of subscription must be supported in the list # ['http', 'https', 'mailto'] message_ttl = data_utils.\ rand_int_id(start=60, end=CONF.messaging.max_message_ttl) key = data_utils.arbitrary_string(size=20, base_text='MessagingKey') value = data_utils.arbitrary_string(size=20, base_text='MessagingValue') option_body = {key: value} subscriber = 'email://fake' rbody = {'options': option_body, 'ttl': message_ttl, 'subscriber': subscriber} self.assertRaises(lib_exc.BadRequest, self.create_subscription, self.queue_name, rbody) @decorators.attr(type=['negative']) @decorators.idempotent_id('cada6c25-0f59-4021-a4c3-961945913998') def test_create_subscriptions_with_invalid_options(self): # Options must be a dict message_ttl = data_utils.\ rand_int_id(start=60, end=CONF.messaging.max_message_ttl) option_body = '123' subscriber = 'http://fake:8080' rbody = {'options': option_body, 'ttl': message_ttl, 'subscriber': subscriber} self.assertRaises(lib_exc.BadRequest, self.create_subscription, self.queue_name, rbody) @decorators.attr(type=['negative']) @decorators.idempotent_id('84c1e298-c632-4ccb-859f-afe9a390081c') def test_create_subscriptions_with_non_integer_value_for_ttl(self): # The subscriber type of subscription must be supported in the list # ['http', 'https', 'mailto'] message_ttl = "123" key = data_utils.arbitrary_string(size=20, base_text='MessagingKey') value = data_utils.arbitrary_string(size=20, base_text='MessagingValue') option_body = {key: value} subscriber = 'http://fake:8080' rbody = {'options': option_body, 'ttl': message_ttl, 'subscriber': subscriber} self.assertRaises(lib_exc.BadRequest, self.create_subscription, self.queue_name, rbody) @decorators.attr(type=['negative']) @decorators.idempotent_id('1302e137-4db6-48ad-b779-ef2095198bc2') def test_create_a_subscription_without_a_token(self): # X-Auth-Token is not provided message_ttl = data_utils.\ rand_int_id(start=60, end=CONF.messaging.max_message_ttl) key = data_utils.arbitrary_string(size=20, base_text='MessagingKey') value = data_utils.arbitrary_string(size=20, base_text='MessagingValue') option_body = {key: value} subscriber = 'http://fake:8080' rbody = {'options': option_body, 'ttl': message_ttl, 'subscriber': subscriber} self.client.auth_provider.set_alt_auth_data( request_part='headers', auth_data=None ) self.assertRaises(lib_exc.Unauthorized, self.create_subscription, self.queue_name, rbody) # List Subscriptions @decorators.attr(type=['negative']) @decorators.idempotent_id('e2109835-34ad-4f0a-8bbb-43d475d1315d') def test_list_subscriptions_from_non_existing_queue(self): # Request for listing subscriptions from a non existent queue non_existent_queue = data_utils.rand_name('rand_queuename') resp, _ = self.client.list_subscription(non_existent_queue) self.assertEqual('200', resp['status']) @decorators.attr(type=['negative']) @decorators.idempotent_id('95d7c77f-4912-49ce-9f38-cfcc6d5cd65b') def test_list_subscriptions_from_queue_with_no_subsciptions(self): # Request to list subscription resp, _ = self.client.list_subscription(self.queue_name) self.assertEqual('200', resp['status']) @decorators.attr(type=['negative']) @decorators.idempotent_id('72f8c0b7-23d8-40ef-ae7c-212cc0751946') def test_list_subscription_without_a_token(self): # X-Auth-Token is not provided self.client.auth_provider.set_alt_auth_data( request_part='headers', auth_data=None ) self.assertRaises(lib_exc.Unauthorized, self.list_subscription, self.queue_name) # Show Subscriptions @decorators.attr(type=['negative']) @decorators.idempotent_id('7ecc2cb9-a0f4-4d03-b903-ecf2917fda13') def test_show_subscriptions_from_non_existing_queue(self): # Show subscription details from a non existent queue non_existent_queue = data_utils.rand_name('rand_queuename') invalid_id = '123' self.assertRaises(lib_exc.NotFound, self.show_subscription, non_existent_queue, invalid_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('bb46d838-e9f9-4851-a788-c30bff41c484') def test_show_subscriptions_with_invalid_id(self): # Show subscription details with invaild id invalid_id = '123' self.assertRaises(lib_exc.NotFound, self.show_subscription, self.queue_name, invalid_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('1120f006-397a-4e8b-9e79-e2dc96b37d46') def test_show_subscriptions_after_deleting_subscription(self): # Create subscription results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] # Delete subscription for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) # Show the details of the subscription self.assertRaises(lib_exc.NotFound, self.show_subscription, self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('47a3f29f-6ddb-4cf2-87ed-a2b97733f386') def test_show_subscription_without_a_token(self): # X-Auth-Token is not provided results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] self.client.auth_provider.set_alt_auth_data( request_part='headers', auth_data=None ) self.assertRaises(lib_exc.Unauthorized, self.show_subscription, self.queue_name, subscription_id) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) # Update Subscriptions @decorators.attr(type=['negative']) @decorators.idempotent_id('5c93b468-cb84-424f-af35-d4f5febc7c56') def test_update_subscription_on_non_existing_queue(self): # Update subscription on a non existing queue results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] non_existent_queue = data_utils.rand_name('rand_queuename') update_rbody = {'ttl': 1000} self.assertRaises(lib_exc.NotFound, self.client.update_subscription, non_existent_queue, subscription_id, update_rbody) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('b383a29a-08f1-418f-8adb-c29ef080358c') def test_update_subscription_with_invalid_id(self): # Update subscription using invalid id results = self._create_subscriptions() subscription_id = uuidutils.generate_uuid() update_rbody = {'ttl': 100} self.assertRaises(lib_exc.NotFound, self.client.update_subscription, self.queue_name, subscription_id, update_rbody) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('4e446118-fa90-4f67-9a91-e157fbaa5a4c') def test_update_subscription_with_empty_body(self): # Update subscription with no body results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] update_rbody = {' '} self.assertRaises(lib_exc.BadRequest, self.client.update_subscription, self.queue_name, subscription_id, update_rbody) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('966f5356-9d0b-46c6-9d57-26bcd9d8e699') def test_update_subscription_with_invalid_TTL(self): # Update subscription using invalid TTL results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] update_rbody = {'ttl': 50} self.assertRaises(lib_exc.BadRequest, self.client.update_subscription, self.queue_name, subscription_id, update_rbody) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('8838f3b2-d4c3-42e2-840c-4314e334a2f0') def test_update_subscription_with_invalid_json_in_request_body(self): # Update subscription with invalid json results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] update_rbody = {"123"} self.assertRaises(lib_exc.BadRequest, self.client.update_subscription, self.queue_name, subscription_id, update_rbody) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('8bfe5638-0126-483e-b88a-2767fa6564e6') def test_update_subscription_with_invalid_token(self): # X-Auth-Token is not provided results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] update_rbody = {"ttl": "1000"} self.client.auth_provider.set_alt_auth_data( request_part='headers', auth_data=None ) self.assertRaises(lib_exc.Unauthorized, self.client.update_subscription, self.queue_name, subscription_id, update_rbody) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) # Delete Subscriptions @decorators.attr(type=['negative']) @decorators.idempotent_id('bb885255-ccac-47e1-a491-2630f205df58') def test_delete_subscription_from_a_non_existing_queue(self): # Delete subscription from a non existing queue rbody = {'subscriber': 'http://fake123:8080', 'options': {'MessagingKey': 'MessagingValue'}, 'ttl': 2935} results = self.create_subscription(self.queue_name, rbody) subscription_id = results[1]["subscription_id"] non_existent_queue = data_utils.rand_name('rand_queuename') resp, _ = self.client.delete_subscription(non_existent_queue, subscription_id) self.assertEqual('204', resp['status']) @decorators.attr(type=['negative']) @decorators.idempotent_id('a7007b4b-1ab1-4121-9d59-afe5eb82d31c') def test_delete_subscription_using_a_nonexisting_id(self): # Delete subscription with non existent id results = self._create_subscriptions() subscription_id = uuidutils.generate_uuid() resp, _ = self.client.delete_subscription(self.queue_name, subscription_id) self.assertEqual('204', resp['status']) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @decorators.attr(type=['negative']) @decorators.idempotent_id('8faf37ee-4abe-4586-9e4b-ed896129a3e8') def test_delete_subscription_with_invalid_token(self): # X-Auth-Token is not provided results = self._create_subscriptions() subscription_id = results[0][1]["subscription_id"] self.client.auth_provider.set_alt_auth_data( request_part='headers', auth_data=None ) self.assertRaises(lib_exc.Unauthorized, self.client.delete_subscription, self.queue_name, subscription_id) for result in results: subscription_id = result[1]["subscription_id"] self.delete_subscription(self.queue_name, subscription_id) @classmethod def resource_cleanup(cls): cls.delete_queue(cls.queue_name) super(TestSubscriptionsNegative, cls).resource_cleanup()