test/integration/service_bus/subscriptions_test.rb in azure-0.6.0 vs test/integration/service_bus/subscriptions_test.rb in azure-0.6.1

- old
+ new

@@ -1,211 +1,211 @@ -#------------------------------------------------------------------------- -# # Copyright (c) Microsoft and contributors. 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. -#-------------------------------------------------------------------------- -require "integration/test_helper" - -describe "ServiceBus Subscriptions" do - subject { Azure::ServiceBus::ServiceBusService.new } - after { ServiceBusTopicNameHelper.clean } - let(:topic){ ServiceBusTopicNameHelper.name } - let(:subscription) { "mySubscription" } - let(:subscription_alternative) { "mySubscription" } - let(:description_alternative) {{ - :lock_duration => 'PT30S', - :requires_session => true, - :default_message_time_to_live => 'PT30M', - :dead_lettering_on_message_expiration => true, - :dead_lettering_on_filter_evaluation_exceptions => true, - :max_delivery_count => 20, - :enable_batched_operations => true - }} - - before { subject.create_topic topic } - - it "should be able to set description values to false" do - s = Azure::ServiceBus::Subscription.new(subscription, { - :requires_session => false - }) - - s.requires_session.must_equal false - end - - it "should be able to create a new subscription" do - result = subject.create_subscription topic, subscription - result.must_be :kind_of?, Azure::ServiceBus::Subscription - result.name.must_equal subscription - end - - it "should be able to create a new subscription from a string and description Hash" do - result = subject.create_subscription topic, subscription_alternative, description_alternative - result.must_be :kind_of?, Azure::ServiceBus::Subscription - result.name.must_equal subscription_alternative - - result.lock_duration.must_equal 30.0 - result.requires_session.must_equal description_alternative[:requires_session] - result.default_message_time_to_live.must_equal 1800.0 - result.dead_lettering_on_message_expiration.must_equal description_alternative[:dead_lettering_on_message_expiration] - result.dead_lettering_on_filter_evaluation_exceptions.must_equal description_alternative[:dead_lettering_on_filter_evaluation_exceptions] - result.max_delivery_count.must_equal description_alternative[:max_delivery_count] - result.enable_batched_operations.must_equal description_alternative[:enable_batched_operations] - end - - it "should be able to create a new subscription with objects" do - subscriptionObject = Azure::ServiceBus::Subscription.new "my_other_sub" - subscriptionObject.topic = topic - subscriptionObject.max_delivery_count = 3 - - result = subject.create_subscription subscriptionObject - result.must_be :kind_of?, Azure::ServiceBus::Subscription - result.name.must_equal subscriptionObject.name - result.max_delivery_count.must_equal subscriptionObject.max_delivery_count - - subject.delete_subscription result - end - - describe "when a subscription exists" do - before { subject.create_subscription topic, subscription } - it "should be able to delete the subscription" do - subject.delete_subscription topic, subscription - end - - it "should be able to get the subscription" do - result = subject.get_subscription topic, subscription - result.must_be :kind_of?, Azure::ServiceBus::Subscription - result.name.must_equal subscription - end - - it "should be able to list subscriptions" do - result = subject.list_subscriptions topic - subscription_found = false - result.each { |s| - subscription_found = true if s.name == subscription - } - assert subscription_found, "list_subscriptions didn't include the expected subscription" - end - - describe "when there are messages" do - let(:msg) { - m = Azure::ServiceBus::BrokeredMessage.new("some message body", {:prop1 => "val1"}) - m.to = "me" - m.label = "my_label" - m - } - before { - subject.send_topic_message topic, msg - } - - it "should be able to peek lock a message" do - retrieved = subject.peek_lock_subscription_message topic, subscription - - retrieved.to.must_equal msg.to - retrieved.body.must_equal msg.body - retrieved.label.must_equal msg.label - - retrieved = subject.read_delete_subscription_message topic, subscription, { :timeout => 1 } - retrieved.must_be_nil - end - - it "should be able to read delete a message" do - retrieved = subject.read_delete_subscription_message topic, subscription - - retrieved.must_be :kind_of?, Azure::ServiceBus::BrokeredMessage - retrieved.body.must_equal msg.body - retrieved.to.must_equal msg.to - - # it should be deleted - retrieved = subject.read_delete_subscription_message topic, subscription, { :timeout => 1 } - retrieved.must_be_nil - end - - it "should be able to unlock a message" do - retrieved = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 } - retrieved.body.must_equal msg.body - - # There shouldn't be an available message in the queue - retrieved2 = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 } - retrieved2.must_be_nil - - # Unlock the message - res = subject.unlock_subscription_message retrieved - res.must_be_nil - - # The message should be available once again - retrieved = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 } - retrieved.body.must_equal msg.body - end - - it "should be able to read a message from a subscription" do - subject.send_topic_message topic, msg - retrieved = subject.receive_subscription_message topic, subscription - - retrieved.to.must_equal msg.to - retrieved.body.must_equal msg.body - retrieved.label.must_equal msg.label - end - end - - describe 'when there are multiple subscriptions' do - let(:subscription1) { ServiceBusTopicNameHelper.name } - let(:subscription2) { ServiceBusTopicNameHelper.name } - - before { - subject.create_subscription topic, subscription1 - subject.create_subscription topic, subscription2 - } - - it "should be able to list subscriptions" do - result = subject.list_subscriptions topic - - subscription_found = false - subscription1_found = false - subscription2_found = false - - result.each { |s| - subscription_found = true if s.name == subscription - subscription1_found = true if s.name == subscription1 - subscription2_found = true if s.name == subscription2 - } - - assert (subscription_found and subscription1_found and subscription2_found), "list_subscriptions didn't include the expected subscriptions" - end - - it "should be able to use $skip token" do - result = subject.list_subscriptions topic - result2 = subject.list_subscriptions topic, { :skip => 1 } - result2.length.must_equal result.length - 1 - result2.continuation_token.must_be_nil - result2[0].id.must_equal result[1].id - end - - it "should be able to use $top token" do - result = subject.list_subscriptions topic - result.length.wont_equal 1 - result.continuation_token.must_be_nil - - result2 = subject.list_subscriptions topic, { :top => 1 } - result2.continuation_token.wont_be_nil - result2.continuation_token[:skip].wont_be_nil - result2.continuation_token[:top].wont_be_nil - result2.length.must_equal 1 - end - - it "should be able to use $skip and $top token together" do - result = subject.list_subscriptions topic - result2 = subject.list_subscriptions topic, { :skip => 1, :top => 1 } - result2.length.must_equal 1 - result2[0].id.must_equal result[1].id - end - end - end -end +#------------------------------------------------------------------------- +# # Copyright (c) Microsoft and contributors. 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. +#-------------------------------------------------------------------------- +require "integration/test_helper" + +describe "ServiceBus Subscriptions" do + subject { Azure::ServiceBus::ServiceBusService.new } + after { ServiceBusTopicNameHelper.clean } + let(:topic){ ServiceBusTopicNameHelper.name } + let(:subscription) { "mySubscription" } + let(:subscription_alternative) { "mySubscription" } + let(:description_alternative) {{ + :lock_duration => 'PT30S', + :requires_session => true, + :default_message_time_to_live => 'PT30M', + :dead_lettering_on_message_expiration => true, + :dead_lettering_on_filter_evaluation_exceptions => true, + :max_delivery_count => 20, + :enable_batched_operations => true + }} + + before { subject.create_topic topic } + + it "should be able to set description values to false" do + s = Azure::ServiceBus::Subscription.new(subscription, { + :requires_session => false + }) + + s.requires_session.must_equal false + end + + it "should be able to create a new subscription" do + result = subject.create_subscription topic, subscription + result.must_be :kind_of?, Azure::ServiceBus::Subscription + result.name.must_equal subscription + end + + it "should be able to create a new subscription from a string and description Hash" do + result = subject.create_subscription topic, subscription_alternative, description_alternative + result.must_be :kind_of?, Azure::ServiceBus::Subscription + result.name.must_equal subscription_alternative + + result.lock_duration.must_equal 30.0 + result.requires_session.must_equal description_alternative[:requires_session] + result.default_message_time_to_live.must_equal 1800.0 + result.dead_lettering_on_message_expiration.must_equal description_alternative[:dead_lettering_on_message_expiration] + result.dead_lettering_on_filter_evaluation_exceptions.must_equal description_alternative[:dead_lettering_on_filter_evaluation_exceptions] + result.max_delivery_count.must_equal description_alternative[:max_delivery_count] + result.enable_batched_operations.must_equal description_alternative[:enable_batched_operations] + end + + it "should be able to create a new subscription with objects" do + subscriptionObject = Azure::ServiceBus::Subscription.new "my_other_sub" + subscriptionObject.topic = topic + subscriptionObject.max_delivery_count = 3 + + result = subject.create_subscription subscriptionObject + result.must_be :kind_of?, Azure::ServiceBus::Subscription + result.name.must_equal subscriptionObject.name + result.max_delivery_count.must_equal subscriptionObject.max_delivery_count + + subject.delete_subscription result + end + + describe "when a subscription exists" do + before { subject.create_subscription topic, subscription } + it "should be able to delete the subscription" do + subject.delete_subscription topic, subscription + end + + it "should be able to get the subscription" do + result = subject.get_subscription topic, subscription + result.must_be :kind_of?, Azure::ServiceBus::Subscription + result.name.must_equal subscription + end + + it "should be able to list subscriptions" do + result = subject.list_subscriptions topic + subscription_found = false + result.each { |s| + subscription_found = true if s.name == subscription + } + assert subscription_found, "list_subscriptions didn't include the expected subscription" + end + + describe "when there are messages" do + let(:msg) { + m = Azure::ServiceBus::BrokeredMessage.new("some message body", {:prop1 => "val1"}) + m.to = "me" + m.label = "my_label" + m + } + before { + subject.send_topic_message topic, msg + } + + it "should be able to peek lock a message" do + retrieved = subject.peek_lock_subscription_message topic, subscription + + retrieved.to.must_equal msg.to + retrieved.body.must_equal msg.body + retrieved.label.must_equal msg.label + + retrieved = subject.read_delete_subscription_message topic, subscription, { :timeout => 1 } + retrieved.must_be_nil + end + + it "should be able to read delete a message" do + retrieved = subject.read_delete_subscription_message topic, subscription + + retrieved.must_be :kind_of?, Azure::ServiceBus::BrokeredMessage + retrieved.body.must_equal msg.body + retrieved.to.must_equal msg.to + + # it should be deleted + retrieved = subject.read_delete_subscription_message topic, subscription, { :timeout => 1 } + retrieved.must_be_nil + end + + it "should be able to unlock a message" do + retrieved = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 } + retrieved.body.must_equal msg.body + + # There shouldn't be an available message in the queue + retrieved2 = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 } + retrieved2.must_be_nil + + # Unlock the message + res = subject.unlock_subscription_message retrieved + res.must_be_nil + + # The message should be available once again + retrieved = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 } + retrieved.body.must_equal msg.body + end + + it "should be able to read a message from a subscription" do + subject.send_topic_message topic, msg + retrieved = subject.receive_subscription_message topic, subscription + + retrieved.to.must_equal msg.to + retrieved.body.must_equal msg.body + retrieved.label.must_equal msg.label + end + end + + describe 'when there are multiple subscriptions' do + let(:subscription1) { ServiceBusTopicNameHelper.name } + let(:subscription2) { ServiceBusTopicNameHelper.name } + + before { + subject.create_subscription topic, subscription1 + subject.create_subscription topic, subscription2 + } + + it "should be able to list subscriptions" do + result = subject.list_subscriptions topic + + subscription_found = false + subscription1_found = false + subscription2_found = false + + result.each { |s| + subscription_found = true if s.name == subscription + subscription1_found = true if s.name == subscription1 + subscription2_found = true if s.name == subscription2 + } + + assert (subscription_found and subscription1_found and subscription2_found), "list_subscriptions didn't include the expected subscriptions" + end + + it "should be able to use $skip token" do + result = subject.list_subscriptions topic + result2 = subject.list_subscriptions topic, { :skip => 1 } + result2.length.must_equal result.length - 1 + result2.continuation_token.must_be_nil + result2[0].id.must_equal result[1].id + end + + it "should be able to use $top token" do + result = subject.list_subscriptions topic + result.length.wont_equal 1 + result.continuation_token.must_be_nil + + result2 = subject.list_subscriptions topic, { :top => 1 } + result2.continuation_token.wont_be_nil + result2.continuation_token[:skip].wont_be_nil + result2.continuation_token[:top].wont_be_nil + result2.length.must_equal 1 + end + + it "should be able to use $skip and $top token together" do + result = subject.list_subscriptions topic + result2 = subject.list_subscriptions topic, { :skip => 1, :top => 1 } + result2.length.must_equal 1 + result2[0].id.must_equal result[1].id + end + end + end +end