From 2b83f872e5e280dce5d8da83cb1c82ef3b7b5134 Mon Sep 17 00:00:00 2001 From: yangzhenyu Date: Tue, 31 Oct 2017 18:36:21 +0800 Subject: [PATCH] Create subscription return error id When create a subscription which use a repeat ``subscriber`` base on mongo beckend. The return id may be a error one. Because it does not to filter the queue name. Closes-Bug: #1729152 Change-Id: I863750df5e7c77a3fcdb308e9dd1e2c400dc67de --- zaqar/storage/mongodb/subscriptions.py | 1 + zaqar/tests/unit/storage/base.py | 33 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/zaqar/storage/mongodb/subscriptions.py b/zaqar/storage/mongodb/subscriptions.py index 862add6b3..7e0fbe040 100644 --- a/zaqar/storage/mongodb/subscriptions.py +++ b/zaqar/storage/mongodb/subscriptions.py @@ -162,6 +162,7 @@ class SubscriptionController(base.Subscription): @utils.raises_conn_error def get_with_subscriber(self, queue, subscriber, project=None): res = self._collection.find_one({'u': subscriber, + 's': queue, 'p': project}) now = timeutils.utcnow_ts() return _basic_subscription(res, now) diff --git a/zaqar/tests/unit/storage/base.py b/zaqar/tests/unit/storage/base.py index c926c72e7..da5df9d95 100644 --- a/zaqar/tests/unit/storage/base.py +++ b/zaqar/tests/unit/storage/base.py @@ -1218,6 +1218,39 @@ class SubscriptionControllerTest(ControllerBaseTest): project=self.project) self.assertIsNone(s_id) + def test_create_existed_and_get_correct_id(self): + queue_name1 = 'test_queue1' + queue_name2 = 'test_queue2' + subscriber = 'http://fake' + self.queue_controller.create(queue_name1, project=self.project) + self.queue_controller.create(queue_name2, project=self.project) + + self.subscription_controller.create(queue_name1, + subscriber, + self.ttl, + self.options, + project=self.project) + + s_id_2 = self.subscription_controller.create(queue_name2, + subscriber, + self.ttl, + self.options, + project=self.project) + + s_id_3 = self.subscription_controller.create(queue_name2, + subscriber, + self.ttl, + self.options, + project=self.project) + self.assertIsNone(s_id_3) + + s_id = self.subscription_controller. \ + get_with_subscriber(queue_name2, + subscriber, + project=self.project)['id'] + + self.assertEqual(str(s_id_2), s_id) + def test_get_update_delete_on_non_existing_queue(self): self._precreate_queue(precreate_queue=True) s_id = self.subscription_controller.create(