azure-plus 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +11 -0
- data/ChangeLog.txt +40 -0
- data/Gemfile +16 -0
- data/README.md +590 -0
- data/Rakefile +129 -0
- data/azure.gemspec +47 -0
- data/lib/azure.rb +52 -0
- data/lib/azure/base_management/affinity_group.rb +32 -0
- data/lib/azure/base_management/base_management_service.rb +238 -0
- data/lib/azure/base_management/location.rb +27 -0
- data/lib/azure/base_management/management_http_request.rb +244 -0
- data/lib/azure/base_management/serialization.rb +129 -0
- data/lib/azure/base_management/sql_management_http_request.rb +45 -0
- data/lib/azure/blob/blob.rb +32 -0
- data/lib/azure/blob/blob_service.rb +1424 -0
- data/lib/azure/blob/block.rb +31 -0
- data/lib/azure/blob/container.rb +32 -0
- data/lib/azure/blob/serialization.rb +285 -0
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +361 -0
- data/lib/azure/cloud_service_management/configuration_set.rb +28 -0
- data/lib/azure/cloud_service_management/deployment.rb +64 -0
- data/lib/azure/cloud_service_management/input_endpoint.rb +29 -0
- data/lib/azure/cloud_service_management/instance_endpoint.rb +31 -0
- data/lib/azure/cloud_service_management/persistent_vm_downtime.rb +29 -0
- data/lib/azure/cloud_service_management/role.rb +30 -0
- data/lib/azure/cloud_service_management/role_instance.rb +40 -0
- data/lib/azure/cloud_service_management/serialization.rb +329 -0
- data/lib/azure/cloud_service_management/virtual_ip.rb +29 -0
- data/lib/azure/core.rb +39 -0
- data/lib/azure/core/auth/authorizer.rb +36 -0
- data/lib/azure/core/auth/shared_key.rb +110 -0
- data/lib/azure/core/auth/shared_key_lite.rb +48 -0
- data/lib/azure/core/auth/signer.rb +48 -0
- data/lib/azure/core/configuration.rb +211 -0
- data/lib/azure/core/error.rb +22 -0
- data/lib/azure/core/filtered_service.rb +44 -0
- data/lib/azure/core/http/debug_filter.rb +36 -0
- data/lib/azure/core/http/http_error.rb +88 -0
- data/lib/azure/core/http/http_filter.rb +53 -0
- data/lib/azure/core/http/http_request.rb +159 -0
- data/lib/azure/core/http/http_response.rb +140 -0
- data/lib/azure/core/http/retry_policy.rb +74 -0
- data/lib/azure/core/http/signer_filter.rb +34 -0
- data/lib/azure/core/service.rb +63 -0
- data/lib/azure/core/signed_service.rb +43 -0
- data/lib/azure/core/utility.rb +190 -0
- data/lib/azure/queue/message.rb +30 -0
- data/lib/azure/queue/queue.rb +29 -0
- data/lib/azure/queue/queue_service.rb +568 -0
- data/lib/azure/queue/serialization.rb +106 -0
- data/lib/azure/service/access_policy.rb +26 -0
- data/lib/azure/service/enumeration_results.rb +21 -0
- data/lib/azure/service/logging.rb +32 -0
- data/lib/azure/service/metrics.rb +31 -0
- data/lib/azure/service/retention_policy.rb +25 -0
- data/lib/azure/service/serialization.rb +240 -0
- data/lib/azure/service/signed_identifier.rb +30 -0
- data/lib/azure/service/storage_service.rb +79 -0
- data/lib/azure/service/storage_service_properties.rb +32 -0
- data/lib/azure/service_bus/action.rb +21 -0
- data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
- data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
- data/lib/azure/service_bus/brokered_message.rb +124 -0
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
- data/lib/azure/service_bus/correlation_filter.rb +45 -0
- data/lib/azure/service_bus/empty_rule_action.rb +30 -0
- data/lib/azure/service_bus/false_filter.rb +38 -0
- data/lib/azure/service_bus/filter.rb +21 -0
- data/lib/azure/service_bus/interval.rb +104 -0
- data/lib/azure/service_bus/queue.rb +230 -0
- data/lib/azure/service_bus/resource.rb +109 -0
- data/lib/azure/service_bus/rule.rb +98 -0
- data/lib/azure/service_bus/rule_aspect.rb +34 -0
- data/lib/azure/service_bus/serialization.rb +160 -0
- data/lib/azure/service_bus/service_bus_service.rb +829 -0
- data/lib/azure/service_bus/sql_filter.rb +50 -0
- data/lib/azure/service_bus/sql_rule_action.rb +50 -0
- data/lib/azure/service_bus/subscription.rb +184 -0
- data/lib/azure/service_bus/topic.rb +187 -0
- data/lib/azure/service_bus/true_filter.rb +38 -0
- data/lib/azure/sql_database_management/serialization.rb +111 -0
- data/lib/azure/sql_database_management/sql_database.rb +31 -0
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
- data/lib/azure/storage_management/serialization.rb +184 -0
- data/lib/azure/storage_management/storage_account.rb +40 -0
- data/lib/azure/storage_management/storage_management_service.rb +166 -0
- data/lib/azure/table/auth/shared_key.rb +92 -0
- data/lib/azure/table/auth/shared_key_lite.rb +44 -0
- data/lib/azure/table/batch.rb +330 -0
- data/lib/azure/table/batch_response.rb +118 -0
- data/lib/azure/table/edmtype.rb +127 -0
- data/lib/azure/table/entity.rb +31 -0
- data/lib/azure/table/guid.rb +24 -0
- data/lib/azure/table/query.rb +112 -0
- data/lib/azure/table/serialization.rb +108 -0
- data/lib/azure/table/table_service.rb +560 -0
- data/lib/azure/version.rb +31 -0
- data/lib/azure/virtual_machine_image_management/serialization.rb +51 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -0
- data/lib/azure/virtual_machine_management/serialization.rb +436 -0
- data/lib/azure/virtual_machine_management/virtual_machine.rb +42 -0
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +549 -0
- data/lib/azure/virtual_network_management/serialization.rb +186 -0
- data/lib/azure/virtual_network_management/virtual_network.rb +36 -0
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
- data/test/fixtures/32px-fulls-black.jpg +0 -0
- data/test/fixtures/affinity_group.xml +33 -0
- data/test/fixtures/all_containers.xml +20 -0
- data/test/fixtures/all_tables.xml +22 -0
- data/test/fixtures/certificate.pem +21 -0
- data/test/fixtures/container_acl.xml +11 -0
- data/test/fixtures/create_sql_database_server.xml +2 -0
- data/test/fixtures/create_storage_desc_error.xml +5 -0
- data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
- data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
- data/test/fixtures/create_storage_full_error.xml +6 -0
- data/test/fixtures/create_storage_label_error.xml +5 -0
- data/test/fixtures/create_storage_location_error.xml +5 -0
- data/test/fixtures/create_storage_name_error.xml +6 -0
- data/test/fixtures/create_table_response_entry.xml +15 -0
- data/test/fixtures/delete_storage_container_error.xml +5 -0
- data/test/fixtures/delete_storage_error.xml +5 -0
- data/test/fixtures/deployment_error.xml +5 -0
- data/test/fixtures/empty_xml_file +0 -0
- data/test/fixtures/get_deployment.xml +94 -0
- data/test/fixtures/get_deployment_existing.xml +94 -0
- data/test/fixtures/get_deployment_missing.xml +5 -0
- data/test/fixtures/get_storage_account_error.xml +5 -0
- data/test/fixtures/get_storage_account_properties.xml +32 -0
- data/test/fixtures/get_storage_account_properties_new.xml +32 -0
- data/test/fixtures/http_error.xml +5 -0
- data/test/fixtures/insert_entity_response_entry.xml +25 -0
- data/test/fixtures/list_affinity_groups.xml +22 -0
- data/test/fixtures/list_blobs.xml +121 -0
- data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
- data/test/fixtures/list_blocks_all.xml +23 -0
- data/test/fixtures/list_blocks_committed.xml +13 -0
- data/test/fixtures/list_cloud_services.xml +39 -0
- data/test/fixtures/list_containers.xml +38 -0
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
- data/test/fixtures/list_images.xml +110 -0
- data/test/fixtures/list_locations.xml +62 -0
- data/test/fixtures/list_page_ranges.xml +11 -0
- data/test/fixtures/list_sql_database.xml +36 -0
- data/test/fixtures/list_sql_server_firewall.xml +23 -0
- data/test/fixtures/list_storage_account_single.xml +25 -0
- data/test/fixtures/list_storage_accounts.xml +46 -0
- data/test/fixtures/list_virtual_networks.xml +92 -0
- data/test/fixtures/logging.xml +11 -0
- data/test/fixtures/management_certificate.pem +55 -0
- data/test/fixtures/messages.xml +12 -0
- data/test/fixtures/metrics.xml +10 -0
- data/test/fixtures/privatekey.key +28 -0
- data/test/fixtures/query_entities_empty_response.xml +7 -0
- data/test/fixtures/query_entities_response.xml +45 -0
- data/test/fixtures/queue_service_properties.xml +22 -0
- data/test/fixtures/queue_service_properties_original.xml +19 -0
- data/test/fixtures/queues.xml +16 -0
- data/test/fixtures/retention_policy.xml +5 -0
- data/test/fixtures/sb_default_create_queue_response.xml +23 -0
- data/test/fixtures/sb_default_create_topic_response.xml +18 -0
- data/test/fixtures/sb_get_access_token_response.txt +1 -0
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
- data/test/fixtures/storage_service_properties.xml +23 -0
- data/test/fixtures/update_storage_account.xml +16 -0
- data/test/fixtures/update_storage_error.xml +5 -0
- data/test/fixtures/updated_storage_accounts.xml +53 -0
- data/test/fixtures/virtual_machine.xml +113 -0
- data/test/fixtures/windows_virtual_machine.xml +106 -0
- data/test/integration/affinity_group/Affinity_test.rb +55 -0
- data/test/integration/affinity_group/Create_Affinity_test.rb +63 -0
- data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
- data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
- data/test/integration/affinity_group/Update_Affinity_test.rb +82 -0
- data/test/integration/blob/blob_gb18030_test.rb +199 -0
- data/test/integration/blob/blob_metadata_test.rb +75 -0
- data/test/integration/blob/blob_pages_test.rb +119 -0
- data/test/integration/blob/blob_properties_test.rb +77 -0
- data/test/integration/blob/block_blob_test.rb +254 -0
- data/test/integration/blob/container/container_acl_test.rb +69 -0
- data/test/integration/blob/container/container_metadata_test.rb +50 -0
- data/test/integration/blob/container/create_container_test.rb +60 -0
- data/test/integration/blob/container/delete_container_test.rb +39 -0
- data/test/integration/blob/container/get_container_properties_test.rb +48 -0
- data/test/integration/blob/container/list_containers_test.rb +79 -0
- data/test/integration/blob/container/root_container_test.rb +54 -0
- data/test/integration/blob/copy_blob_test.rb +113 -0
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
- data/test/integration/blob/create_page_blob_test.rb +83 -0
- data/test/integration/blob/delete_blob_test.rb +159 -0
- data/test/integration/blob/get_blob_test.rb +65 -0
- data/test/integration/blob/informative_errors_test.rb +39 -0
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
- data/test/integration/blob/lease/break_lease_test.rb +40 -0
- data/test/integration/blob/lease/release_lease_test.rb +40 -0
- data/test/integration/blob/lease/renew_lease_test.rb +42 -0
- data/test/integration/blob/list_blobs_test.rb +113 -0
- data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
- data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
- data/test/integration/database/create_sql_server_test.rb +53 -0
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
- data/test/integration/database/delete_sql_server_test.rb +58 -0
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
- data/test/integration/database/list_sql_servers_test.rb +44 -0
- data/test/integration/database/reset_password_sql_server_test.rb +55 -0
- data/test/integration/location/Location_List_test.rb +39 -0
- data/test/integration/queue/clear_messages_test.rb +42 -0
- data/test/integration/queue/create_message_test.rb +75 -0
- data/test/integration/queue/create_queue_test.rb +50 -0
- data/test/integration/queue/delete_message_test.rb +67 -0
- data/test/integration/queue/delete_queue_test.rb +45 -0
- data/test/integration/queue/informative_errors_test.rb +42 -0
- data/test/integration/queue/list_messages_encoded_test.rb +79 -0
- data/test/integration/queue/list_messages_test.rb +79 -0
- data/test/integration/queue/list_queues_test.rb +44 -0
- data/test/integration/queue/peek_messages_test.rb +59 -0
- data/test/integration/queue/queue_gb18030_test.rb +131 -0
- data/test/integration/queue/queue_metadata_test.rb +40 -0
- data/test/integration/queue/update_message_test.rb +74 -0
- data/test/integration/service_bus/informative_errors_test.rb +37 -0
- data/test/integration/service_bus/queues_scenario_test.rb +200 -0
- data/test/integration/service_bus/queues_test.rb +266 -0
- data/test/integration/service_bus/rules_test.rb +145 -0
- data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
- data/test/integration/service_bus/scenario_test.rb +101 -0
- data/test/integration/service_bus/subscriptions_test.rb +211 -0
- data/test/integration/service_bus/topics_scenario_test.rb +406 -0
- data/test/integration/service_bus/topics_test.rb +129 -0
- data/test/integration/storage_management/storage_management_test.rb +160 -0
- data/test/integration/table/create_table_test.rb +36 -0
- data/test/integration/table/delete_entity_batch_test.rb +107 -0
- data/test/integration/table/delete_entity_test.rb +94 -0
- data/test/integration/table/delete_table_test.rb +40 -0
- data/test/integration/table/get_table_test.rb +37 -0
- data/test/integration/table/informative_errors_test.rb +39 -0
- data/test/integration/table/insert_entity_batch_test.rb +100 -0
- data/test/integration/table/insert_entity_test.rb +88 -0
- data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
- data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
- data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
- data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
- data/test/integration/table/merge_entity_batch_test.rb +128 -0
- data/test/integration/table/merge_entity_test.rb +113 -0
- data/test/integration/table/query_entities_test.rb +195 -0
- data/test/integration/table/query_tables_test.rb +43 -0
- data/test/integration/table/query_test.rb +251 -0
- data/test/integration/table/table_acl_test.rb +52 -0
- data/test/integration/table/table_gb18030_test.rb +355 -0
- data/test/integration/table/update_entity_batch_test.rb +149 -0
- data/test/integration/table/update_entity_test.rb +131 -0
- data/test/integration/test_helper.rb +42 -0
- data/test/integration/vm/VM_Create_test.rb +260 -0
- data/test/integration/vm/VM_Delete_test.rb +55 -0
- data/test/integration/vm/VM_Operations_test.rb +173 -0
- data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
- data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
- data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -0
- data/test/integration/vnet/Virtual_Network_list_test.rb +53 -0
- data/test/support/env.rb +19 -0
- data/test/support/fixtures.rb +36 -0
- data/test/support/name_generator.rb +160 -0
- data/test/support/stubs.rb +42 -0
- data/test/support/virtual_machine_name_generator.rb +102 -0
- data/test/support/virtual_network_helper.rb +73 -0
- data/test/test_helper.rb +53 -0
- data/test/unit/affinity_group/affinity_group_test.rb +192 -0
- data/test/unit/affinity_group/serialization_test.rb +88 -0
- data/test/unit/base_management/location_test.rb +57 -0
- data/test/unit/blob/blob_service_test.rb +1947 -0
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +276 -0
- data/test/unit/cloud_service_management/serialization_test.rb +169 -0
- data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
- data/test/unit/core/auth/shared_key_test.rb +58 -0
- data/test/unit/core/auth/signer_test.rb +30 -0
- data/test/unit/core/http/http_error_test.rb +57 -0
- data/test/unit/core/http/http_request_test.rb +66 -0
- data/test/unit/core/http/http_response_test.rb +45 -0
- data/test/unit/core/http/retry_policy_test.rb +23 -0
- data/test/unit/database/serialization_test.rb +97 -0
- data/test/unit/database/sql_database_server_service_test.rb +288 -0
- data/test/unit/service/serialization_test.rb +502 -0
- data/test/unit/service/storage_service_test.rb +291 -0
- data/test/unit/storage_management/serialization_test.rb +232 -0
- data/test/unit/storage_management/storage_management_service_test.rb +261 -0
- data/test/unit/table/edmtype_test.rb +108 -0
- data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -0
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -0
- data/test/unit/virtual_machine_management/serialization_test.rb +247 -0
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -0
- data/test/unit/vnet/serialization_test.rb +187 -0
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
- metadata +470 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
require "integration/test_helper"
|
|
16
|
+
|
|
17
|
+
describe "ServiceBus Rules" do
|
|
18
|
+
subject { Azure::ServiceBus::ServiceBusService.new }
|
|
19
|
+
after { ServiceBusTopicNameHelper.clean }
|
|
20
|
+
let(:topic){ ServiceBusTopicNameHelper.name }
|
|
21
|
+
let(:subscription){ "mySubscription" }
|
|
22
|
+
let(:rule){ "myRule" }
|
|
23
|
+
|
|
24
|
+
before {
|
|
25
|
+
subject.create_topic topic
|
|
26
|
+
subject.create_subscription topic, subscription
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
it "should be able to create a new rule" do
|
|
30
|
+
result = subject.create_rule topic, subscription, rule
|
|
31
|
+
result.must_be :kind_of?, Azure::ServiceBus::Rule
|
|
32
|
+
result.filter.must_be_kind_of Azure::ServiceBus::TrueFilter
|
|
33
|
+
result.filter.sql_expression.must_equal "1=1"
|
|
34
|
+
result.filter.compatibility_level.must_equal 20
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should be able to create a new rule object" do
|
|
38
|
+
ruleObject = Azure::ServiceBus::Rule.new "my_other_rule"
|
|
39
|
+
ruleObject.subscription = subscription
|
|
40
|
+
ruleObject.topic = topic
|
|
41
|
+
|
|
42
|
+
result = subject.create_rule ruleObject
|
|
43
|
+
result.must_be :kind_of?, Azure::ServiceBus::Rule
|
|
44
|
+
result.filter.must_be_kind_of Azure::ServiceBus::TrueFilter
|
|
45
|
+
result.filter.sql_expression.must_equal "1=1"
|
|
46
|
+
result.filter.compatibility_level.must_equal 20
|
|
47
|
+
|
|
48
|
+
subject.delete_rule result
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should be able to create a new rule with an action" do
|
|
52
|
+
ruleObject = Azure::ServiceBus::Rule.new "my_other_rule"
|
|
53
|
+
ruleObject.subscription = subscription
|
|
54
|
+
ruleObject.topic = topic
|
|
55
|
+
ruleObject.filter = Azure::ServiceBus::SqlFilter.new({ :sql_expression => "MyProperty='XYZ'" })
|
|
56
|
+
ruleObject.action = Azure::ServiceBus::SqlRuleAction.new({ :sql_expression => "set MyProperty2 = 'ABC'" })
|
|
57
|
+
|
|
58
|
+
result = subject.create_rule ruleObject
|
|
59
|
+
result.must_be :kind_of?, Azure::ServiceBus::Rule
|
|
60
|
+
result.filter.must_be_kind_of Azure::ServiceBus::SqlFilter
|
|
61
|
+
result.filter.sql_expression.must_equal "MyProperty='XYZ'"
|
|
62
|
+
result.filter.compatibility_level.must_equal 20
|
|
63
|
+
|
|
64
|
+
result.action.must_be_kind_of Azure::ServiceBus::SqlRuleAction
|
|
65
|
+
result.action.sql_expression.must_equal "set MyProperty2 = 'ABC'"
|
|
66
|
+
result.action.compatibility_level.must_equal 20
|
|
67
|
+
|
|
68
|
+
subject.delete_rule result
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should be able to create a new rule with a correlation filter" do
|
|
72
|
+
ruleObject = Azure::ServiceBus::Rule.new "my_other_rule"
|
|
73
|
+
ruleObject.subscription = subscription
|
|
74
|
+
ruleObject.topic = topic
|
|
75
|
+
ruleObject.filter = Azure::ServiceBus::CorrelationFilter.new({ :correlation_id => "identifier" })
|
|
76
|
+
ruleObject.action = Azure::ServiceBus::SqlRuleAction.new({ :sql_expression => "set MyProperty2 = 'ABC'" })
|
|
77
|
+
|
|
78
|
+
result = subject.create_rule ruleObject
|
|
79
|
+
result.must_be :kind_of?, Azure::ServiceBus::Rule
|
|
80
|
+
result.filter.must_be_kind_of Azure::ServiceBus::CorrelationFilter
|
|
81
|
+
result.filter.correlation_id.must_equal "identifier"
|
|
82
|
+
|
|
83
|
+
result.action.must_be_kind_of Azure::ServiceBus::SqlRuleAction
|
|
84
|
+
result.action.sql_expression.must_equal "set MyProperty2 = 'ABC'"
|
|
85
|
+
result.action.compatibility_level.must_equal 20
|
|
86
|
+
|
|
87
|
+
subject.delete_rule result
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "when a rule exists" do
|
|
91
|
+
before { subject.create_rule topic, subscription, rule }
|
|
92
|
+
|
|
93
|
+
it "should be able to delete rules" do
|
|
94
|
+
subject.delete_rule topic, subscription, rule
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should be able to get rules" do
|
|
98
|
+
result = subject.get_rule topic, subscription, rule
|
|
99
|
+
result.must_be :kind_of?, Azure::ServiceBus::Rule
|
|
100
|
+
result.filter.must_be_kind_of Azure::ServiceBus::TrueFilter
|
|
101
|
+
result.filter.sql_expression.must_equal "1=1"
|
|
102
|
+
result.filter.compatibility_level.must_equal 20
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "should be able to list rules" do
|
|
106
|
+
result = subject.list_rules topic, subscription
|
|
107
|
+
rule_found = false
|
|
108
|
+
result.each { |r|
|
|
109
|
+
rule_found = true if r.name == rule
|
|
110
|
+
}
|
|
111
|
+
assert rule_found, "list_rules didn't include the expected rule"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe 'when multiple rules exist' do
|
|
115
|
+
let(:rule1) { "myRule1" }
|
|
116
|
+
let(:rule2) { "myRule2" }
|
|
117
|
+
before {
|
|
118
|
+
subject.create_rule topic, subscription, rule1
|
|
119
|
+
subject.create_rule topic, subscription, rule2
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
it "should be able to use $skip token" do
|
|
123
|
+
result = subject.list_rules topic, subscription
|
|
124
|
+
result2 = subject.list_rules topic, subscription, { :skip => 1 }
|
|
125
|
+
result2.length.must_equal result.length - 1
|
|
126
|
+
result2[0].id.must_equal result[1].id
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "should be able to use $top token" do
|
|
130
|
+
result = subject.list_rules topic, subscription
|
|
131
|
+
result.length.wont_equal 1
|
|
132
|
+
|
|
133
|
+
result2 = subject.list_rules topic, subscription, { :top => 1 }
|
|
134
|
+
result2.length.must_equal 1
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "should be able to use $skip and $top token together" do
|
|
138
|
+
result = subject.list_rules topic, subscription
|
|
139
|
+
result2 = subject.list_rules topic, subscription, { :skip => 1, :top => 1 }
|
|
140
|
+
result2.length.must_equal 1
|
|
141
|
+
result2[0].id.must_equal result[1].id
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
require "integration/test_helper"
|
|
16
|
+
require "azure/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe 'Service Bus Queue GB-18030' do
|
|
19
|
+
subject { Azure::ServiceBus::ServiceBusService.new }
|
|
20
|
+
let(:queue_name) { ServiceBusQueueNameHelper.name }
|
|
21
|
+
|
|
22
|
+
before { subject.create_queue queue_name }
|
|
23
|
+
after { ServiceBusQueueNameHelper.clean }
|
|
24
|
+
|
|
25
|
+
it 'Read/Write SB Queue Name UTF-8' do
|
|
26
|
+
# Expected results: Failure, because the Queue
|
|
27
|
+
# name can only contain ASCII
|
|
28
|
+
# characters, per the Service Bus Queue spec.
|
|
29
|
+
GB18030TestStrings.get.each { |k,v|
|
|
30
|
+
begin
|
|
31
|
+
subject.create_queue queue_name + v.encode("UTF-8")
|
|
32
|
+
flunk "No exception"
|
|
33
|
+
rescue
|
|
34
|
+
# Add validation?
|
|
35
|
+
end
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'Read/Write SB Queue Name GB-18030' do
|
|
40
|
+
# Expected results: Failure, because the Queue
|
|
41
|
+
# name can only contain ASCII
|
|
42
|
+
# characters, per the Service Bus Queue spec.
|
|
43
|
+
GB18030TestStrings.get.each { |k,v|
|
|
44
|
+
begin
|
|
45
|
+
subject.create_queue queue_name + v.encode("GB18030")
|
|
46
|
+
flunk "No exception"
|
|
47
|
+
rescue
|
|
48
|
+
# Add validation?
|
|
49
|
+
end
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'Read/Write SB Queue Metadata UTF-8' do
|
|
54
|
+
GB18030TestStrings.get.each { |k,v|
|
|
55
|
+
begin
|
|
56
|
+
subject.create_queue queue_name, {
|
|
57
|
+
:dead_lettering_on_message_expiration => v.encode("UTF-8"),
|
|
58
|
+
}
|
|
59
|
+
flunk "No exception"
|
|
60
|
+
rescue Azure::Core::Http::HTTPError => error
|
|
61
|
+
error.status_code.must_equal 400
|
|
62
|
+
end
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'Read/Write SB Queue Metadata GB18030' do
|
|
67
|
+
GB18030TestStrings.get.each { |k,v|
|
|
68
|
+
begin
|
|
69
|
+
subject.create_queue queue_name, {
|
|
70
|
+
:dead_lettering_on_message_expiration => v.encode("GB18030"),
|
|
71
|
+
}
|
|
72
|
+
flunk "No exception"
|
|
73
|
+
rescue Azure::Core::Http::HTTPError => error
|
|
74
|
+
error.status_code.must_equal 400
|
|
75
|
+
end
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'Read/Write SB Queue message UTF-8' do
|
|
80
|
+
GB18030TestStrings.get.each { |k,v|
|
|
81
|
+
msg = Azure::ServiceBus::BrokeredMessage.new(v.encode("UTF-8"))
|
|
82
|
+
subject.send_queue_message queue_name, msg
|
|
83
|
+
retrieved = subject.read_delete_queue_message queue_name
|
|
84
|
+
retrieved.body.force_encoding("UTF-8").must_equal v.encode("UTF-8")
|
|
85
|
+
}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'Read/Write SB Queue message GB18030' do
|
|
89
|
+
GB18030TestStrings.get.each { |k,v|
|
|
90
|
+
msg = Azure::ServiceBus::BrokeredMessage.new(v.encode("GB18030"))
|
|
91
|
+
subject.send_queue_message queue_name, msg
|
|
92
|
+
retrieved = subject.read_delete_queue_message queue_name
|
|
93
|
+
retrieved.body.force_encoding("GB18030").must_equal v.encode("GB18030")
|
|
94
|
+
}
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# it 'Read/Write SB Queue message Metadata UTF-8' do
|
|
98
|
+
# GB18030TestStrings.get.each { |k,v|
|
|
99
|
+
# msg = Azure::ServiceBus::BrokeredMessage.new("some text") do |m|
|
|
100
|
+
# m.to = v.encode("UTF-8")
|
|
101
|
+
# end
|
|
102
|
+
# begin
|
|
103
|
+
# subject.send_queue_message queue_name, msg
|
|
104
|
+
# # Do not flunk here; the service appears to let some
|
|
105
|
+
# # "bad" strings go through
|
|
106
|
+
# rescue Azure::Core::Http::HTTPError => error
|
|
107
|
+
# error.status_code.must_equal 500
|
|
108
|
+
# end
|
|
109
|
+
# }
|
|
110
|
+
# end
|
|
111
|
+
|
|
112
|
+
# it 'Read/Write SB Queue message Metadata GB18030' do
|
|
113
|
+
# GB18030TestStrings.get.each { |k,v|
|
|
114
|
+
# msg = Azure::ServiceBus::BrokeredMessage.new("some text") do |m|
|
|
115
|
+
# m.to = v.encode("GB18030")
|
|
116
|
+
# end
|
|
117
|
+
# begin
|
|
118
|
+
# subject.send_queue_message queue_name, msg
|
|
119
|
+
# # Do not flunk here; the service appears to let some
|
|
120
|
+
# # "bad" strings go through
|
|
121
|
+
# rescue Azure::Core::Http::HTTPError => error
|
|
122
|
+
# error.status_code.must_equal 500
|
|
123
|
+
# end
|
|
124
|
+
# }
|
|
125
|
+
# end
|
|
126
|
+
|
|
127
|
+
it 'Read/Write SB Queue Custom Property Key UTF-8' do
|
|
128
|
+
GB18030TestStrings.get.each { |k,v|
|
|
129
|
+
msg = Azure::ServiceBus::BrokeredMessage.new("some text", {
|
|
130
|
+
("key" + v).encode("UTF-8") => "CustomStringProperty"
|
|
131
|
+
})
|
|
132
|
+
begin
|
|
133
|
+
subject.send_queue_message queue_name, msg
|
|
134
|
+
flunk "No exception"
|
|
135
|
+
rescue Azure::Core::Http::HTTPError => error
|
|
136
|
+
error.status_code.must_equal 400
|
|
137
|
+
end
|
|
138
|
+
}
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'Read/Write SB Queue Custom Property Key GB18030' do
|
|
142
|
+
GB18030TestStrings.get.each { |k,v|
|
|
143
|
+
msg = Azure::ServiceBus::BrokeredMessage.new("some text", {
|
|
144
|
+
("key" + v).encode("GB18030") => "CustomStringProperty",
|
|
145
|
+
})
|
|
146
|
+
begin
|
|
147
|
+
subject.send_queue_message queue_name, msg
|
|
148
|
+
flunk "No exception"
|
|
149
|
+
rescue Azure::Core::Http::HTTPError => error
|
|
150
|
+
error.status_code.must_equal 400
|
|
151
|
+
end
|
|
152
|
+
}
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# it 'Read/Write SB Queue Custom Property Value UTF-8' do
|
|
156
|
+
# GB18030TestStrings.get.each { |k,v|
|
|
157
|
+
# msg = Azure::ServiceBus::BrokeredMessage.new("some text", {
|
|
158
|
+
# "key" => ("value" + v).encode("UTF-8")
|
|
159
|
+
# })
|
|
160
|
+
|
|
161
|
+
# begin
|
|
162
|
+
# subject.send_queue_message queue_name, msg
|
|
163
|
+
# end
|
|
164
|
+
# }
|
|
165
|
+
# end
|
|
166
|
+
|
|
167
|
+
# it 'Read/Write SB Queue Custom Property Value GB18030' do
|
|
168
|
+
# GB18030TestStrings.get.each { |k,v|
|
|
169
|
+
# msg = Azure::ServiceBus::BrokeredMessage.new("some text", {
|
|
170
|
+
# "key" => ("value" + v).encode("GB18030")
|
|
171
|
+
# })
|
|
172
|
+
# begin
|
|
173
|
+
# subject.send_queue_message queue_name, msg
|
|
174
|
+
# retrieved = subject.read_delete_queue_message queue_name
|
|
175
|
+
# # Do not flunk here; the service appears to let some
|
|
176
|
+
# # "bad" strings go through
|
|
177
|
+
# rescue Azure::Core::Http::HTTPError => error
|
|
178
|
+
# error.status_code.must_equal 500
|
|
179
|
+
# end
|
|
180
|
+
# }
|
|
181
|
+
# end
|
|
182
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http:#www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
require 'integration/test_helper'
|
|
16
|
+
|
|
17
|
+
require 'azure/service_bus/brokered_message'
|
|
18
|
+
|
|
19
|
+
class ScenarioHelper
|
|
20
|
+
def self.out(s)
|
|
21
|
+
print s + "\n" if false
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.get_custom_properties(i)
|
|
25
|
+
custom_properties = {}
|
|
26
|
+
custom_properties['i'] = i
|
|
27
|
+
custom_properties['test'] = Time.local(2001, i, 1)
|
|
28
|
+
custom_properties['name'] = 'Test' + i.to_s
|
|
29
|
+
custom_properties['meanname'] = "'\"Me`\\'&*<>!@#%^*)\n" + i.to_s
|
|
30
|
+
custom_properties['int'] = 50 + i
|
|
31
|
+
custom_properties['float'] = 3.14159 + i
|
|
32
|
+
custom_properties['even'] = (i % 2 == 0)
|
|
33
|
+
custom_properties
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.create_issue_message(issue_id, issue_body, label)
|
|
37
|
+
message = Azure::ServiceBus::BrokeredMessage.new(issue_body)
|
|
38
|
+
|
|
39
|
+
message.correlation_id = 'correlationid' + label
|
|
40
|
+
message.delivery_count = 1
|
|
41
|
+
message.sequence_number = 12
|
|
42
|
+
message.content_type = 'text/xml'
|
|
43
|
+
message.label = label
|
|
44
|
+
message.to = '1@1.com'
|
|
45
|
+
message.message_id = issue_id
|
|
46
|
+
|
|
47
|
+
custom_properties = ScenarioHelper.get_custom_properties issue_id.to_i
|
|
48
|
+
custom_properties.each do |key, value|
|
|
49
|
+
message.properties[key] = value
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
message
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.compare_messages(expected,
|
|
56
|
+
actual,
|
|
57
|
+
custom_properties = nil)
|
|
58
|
+
actual.body.must_equal expected.body
|
|
59
|
+
actual.content_type.must_equal expected.content_type
|
|
60
|
+
actual.correlation_id.must_equal expected.correlation_id
|
|
61
|
+
actual.label.must_equal expected.label
|
|
62
|
+
actual.message_id.must_equal expected.message_id
|
|
63
|
+
actual.reply_to.must_equal expected.reply_to
|
|
64
|
+
actual.reply_to_session_id.must_equal expected.reply_to_session_id
|
|
65
|
+
actual.scheduled_enqueue_time_utc.must_equal(
|
|
66
|
+
expected.scheduled_enqueue_time_utc
|
|
67
|
+
)
|
|
68
|
+
actual.session_id.must_equal expected.session_id
|
|
69
|
+
actual.to.must_equal expected.to
|
|
70
|
+
|
|
71
|
+
# Note: The following properties are controlled by the server,
|
|
72
|
+
# so we cannot verify as much
|
|
73
|
+
actual.delivery_count.must_be_kind_of Integer
|
|
74
|
+
actual.sequence_number.must_be_kind_of Integer
|
|
75
|
+
actual.enqueued_time_utc.must_be_kind_of Time
|
|
76
|
+
actual.lock_token.must_be_kind_of String unless actual.lock_token.nil?
|
|
77
|
+
|
|
78
|
+
actual.locked_until_utc.must_be_kind_of Time\
|
|
79
|
+
unless actual.locked_until_utc.nil?
|
|
80
|
+
|
|
81
|
+
if custom_properties.nil?
|
|
82
|
+
expected_properties = expected.properties
|
|
83
|
+
index = expected_properties['i']
|
|
84
|
+
index = 1 if index.nil?
|
|
85
|
+
custom_properties = get_custom_properties(index.to_i)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
custom_properties.each do |key, value|
|
|
89
|
+
ScenarioHelper.out key + ':' + value.to_s
|
|
90
|
+
k_d = actual.properties[key.downcase]
|
|
91
|
+
ScenarioHelper.out("#{k_d}:#{k_d.nil? ? '<nil>' : k_d.to_s}")
|
|
92
|
+
if value != 'GUID'
|
|
93
|
+
if !value.nil? && value.class == Time
|
|
94
|
+
value.httpdate.must_equal k_d
|
|
95
|
+
else
|
|
96
|
+
value.must_equal(k_d)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#-------------------------------------------------------------------------
|
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#--------------------------------------------------------------------------
|
|
15
|
+
require "integration/test_helper"
|
|
16
|
+
|
|
17
|
+
describe "ServiceBus Subscriptions" do
|
|
18
|
+
subject { Azure::ServiceBus::ServiceBusService.new }
|
|
19
|
+
after { ServiceBusTopicNameHelper.clean }
|
|
20
|
+
let(:topic){ ServiceBusTopicNameHelper.name }
|
|
21
|
+
let(:subscription) { "mySubscription" }
|
|
22
|
+
let(:subscription_alternative) { "mySubscription" }
|
|
23
|
+
let(:description_alternative) {{
|
|
24
|
+
:lock_duration => 'PT30S',
|
|
25
|
+
:requires_session => true,
|
|
26
|
+
:default_message_time_to_live => 'PT30M',
|
|
27
|
+
:dead_lettering_on_message_expiration => true,
|
|
28
|
+
:dead_lettering_on_filter_evaluation_exceptions => true,
|
|
29
|
+
:max_delivery_count => 20,
|
|
30
|
+
:enable_batched_operations => true
|
|
31
|
+
}}
|
|
32
|
+
|
|
33
|
+
before { subject.create_topic topic }
|
|
34
|
+
|
|
35
|
+
it "should be able to set description values to false" do
|
|
36
|
+
s = Azure::ServiceBus::Subscription.new(subscription, {
|
|
37
|
+
:requires_session => false
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
s.requires_session.must_equal false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should be able to create a new subscription" do
|
|
44
|
+
result = subject.create_subscription topic, subscription
|
|
45
|
+
result.must_be :kind_of?, Azure::ServiceBus::Subscription
|
|
46
|
+
result.name.must_equal subscription
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should be able to create a new subscription from a string and description Hash" do
|
|
50
|
+
result = subject.create_subscription topic, subscription_alternative, description_alternative
|
|
51
|
+
result.must_be :kind_of?, Azure::ServiceBus::Subscription
|
|
52
|
+
result.name.must_equal subscription_alternative
|
|
53
|
+
|
|
54
|
+
result.lock_duration.must_equal 30.0
|
|
55
|
+
result.requires_session.must_equal description_alternative[:requires_session]
|
|
56
|
+
result.default_message_time_to_live.must_equal 1800.0
|
|
57
|
+
result.dead_lettering_on_message_expiration.must_equal description_alternative[:dead_lettering_on_message_expiration]
|
|
58
|
+
result.dead_lettering_on_filter_evaluation_exceptions.must_equal description_alternative[:dead_lettering_on_filter_evaluation_exceptions]
|
|
59
|
+
result.max_delivery_count.must_equal description_alternative[:max_delivery_count]
|
|
60
|
+
result.enable_batched_operations.must_equal description_alternative[:enable_batched_operations]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should be able to create a new subscription with objects" do
|
|
64
|
+
subscriptionObject = Azure::ServiceBus::Subscription.new "my_other_sub"
|
|
65
|
+
subscriptionObject.topic = topic
|
|
66
|
+
subscriptionObject.max_delivery_count = 3
|
|
67
|
+
|
|
68
|
+
result = subject.create_subscription subscriptionObject
|
|
69
|
+
result.must_be :kind_of?, Azure::ServiceBus::Subscription
|
|
70
|
+
result.name.must_equal subscriptionObject.name
|
|
71
|
+
result.max_delivery_count.must_equal subscriptionObject.max_delivery_count
|
|
72
|
+
|
|
73
|
+
subject.delete_subscription result
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "when a subscription exists" do
|
|
77
|
+
before { subject.create_subscription topic, subscription }
|
|
78
|
+
it "should be able to delete the subscription" do
|
|
79
|
+
subject.delete_subscription topic, subscription
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should be able to get the subscription" do
|
|
83
|
+
result = subject.get_subscription topic, subscription
|
|
84
|
+
result.must_be :kind_of?, Azure::ServiceBus::Subscription
|
|
85
|
+
result.name.must_equal subscription
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should be able to list subscriptions" do
|
|
89
|
+
result = subject.list_subscriptions topic
|
|
90
|
+
subscription_found = false
|
|
91
|
+
result.each { |s|
|
|
92
|
+
subscription_found = true if s.name == subscription
|
|
93
|
+
}
|
|
94
|
+
assert subscription_found, "list_subscriptions didn't include the expected subscription"
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe "when there are messages" do
|
|
98
|
+
let(:msg) {
|
|
99
|
+
m = Azure::ServiceBus::BrokeredMessage.new("some message body", {:prop1 => "val1"})
|
|
100
|
+
m.to = "me"
|
|
101
|
+
m.label = "my_label"
|
|
102
|
+
m
|
|
103
|
+
}
|
|
104
|
+
before {
|
|
105
|
+
subject.send_topic_message topic, msg
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
it "should be able to peek lock a message" do
|
|
109
|
+
retrieved = subject.peek_lock_subscription_message topic, subscription
|
|
110
|
+
|
|
111
|
+
retrieved.to.must_equal msg.to
|
|
112
|
+
retrieved.body.must_equal msg.body
|
|
113
|
+
retrieved.label.must_equal msg.label
|
|
114
|
+
|
|
115
|
+
retrieved = subject.read_delete_subscription_message topic, subscription, { :timeout => 1 }
|
|
116
|
+
retrieved.must_be_nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should be able to read delete a message" do
|
|
120
|
+
retrieved = subject.read_delete_subscription_message topic, subscription
|
|
121
|
+
|
|
122
|
+
retrieved.must_be :kind_of?, Azure::ServiceBus::BrokeredMessage
|
|
123
|
+
retrieved.body.must_equal msg.body
|
|
124
|
+
retrieved.to.must_equal msg.to
|
|
125
|
+
|
|
126
|
+
# it should be deleted
|
|
127
|
+
retrieved = subject.read_delete_subscription_message topic, subscription, { :timeout => 1 }
|
|
128
|
+
retrieved.must_be_nil
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "should be able to unlock a message" do
|
|
132
|
+
retrieved = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 }
|
|
133
|
+
retrieved.body.must_equal msg.body
|
|
134
|
+
|
|
135
|
+
# There shouldn't be an available message in the queue
|
|
136
|
+
retrieved2 = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 }
|
|
137
|
+
retrieved2.must_be_nil
|
|
138
|
+
|
|
139
|
+
# Unlock the message
|
|
140
|
+
res = subject.unlock_subscription_message retrieved
|
|
141
|
+
res.must_be_nil
|
|
142
|
+
|
|
143
|
+
# The message should be available once again
|
|
144
|
+
retrieved = subject.peek_lock_subscription_message topic, subscription, { :timeout => 1 }
|
|
145
|
+
retrieved.body.must_equal msg.body
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "should be able to read a message from a subscription" do
|
|
149
|
+
subject.send_topic_message topic, msg
|
|
150
|
+
retrieved = subject.receive_subscription_message topic, subscription
|
|
151
|
+
|
|
152
|
+
retrieved.to.must_equal msg.to
|
|
153
|
+
retrieved.body.must_equal msg.body
|
|
154
|
+
retrieved.label.must_equal msg.label
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
describe 'when there are multiple subscriptions' do
|
|
159
|
+
let(:subscription1) { ServiceBusTopicNameHelper.name }
|
|
160
|
+
let(:subscription2) { ServiceBusTopicNameHelper.name }
|
|
161
|
+
|
|
162
|
+
before {
|
|
163
|
+
subject.create_subscription topic, subscription1
|
|
164
|
+
subject.create_subscription topic, subscription2
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
it "should be able to list subscriptions" do
|
|
168
|
+
result = subject.list_subscriptions topic
|
|
169
|
+
|
|
170
|
+
subscription_found = false
|
|
171
|
+
subscription1_found = false
|
|
172
|
+
subscription2_found = false
|
|
173
|
+
|
|
174
|
+
result.each { |s|
|
|
175
|
+
subscription_found = true if s.name == subscription
|
|
176
|
+
subscription1_found = true if s.name == subscription1
|
|
177
|
+
subscription2_found = true if s.name == subscription2
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
assert (subscription_found and subscription1_found and subscription2_found), "list_subscriptions didn't include the expected subscriptions"
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "should be able to use $skip token" do
|
|
184
|
+
result = subject.list_subscriptions topic
|
|
185
|
+
result2 = subject.list_subscriptions topic, { :skip => 1 }
|
|
186
|
+
result2.length.must_equal result.length - 1
|
|
187
|
+
result2.continuation_token.must_be_nil
|
|
188
|
+
result2[0].id.must_equal result[1].id
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "should be able to use $top token" do
|
|
192
|
+
result = subject.list_subscriptions topic
|
|
193
|
+
result.length.wont_equal 1
|
|
194
|
+
result.continuation_token.must_be_nil
|
|
195
|
+
|
|
196
|
+
result2 = subject.list_subscriptions topic, { :top => 1 }
|
|
197
|
+
result2.continuation_token.wont_be_nil
|
|
198
|
+
result2.continuation_token[:skip].wont_be_nil
|
|
199
|
+
result2.continuation_token[:top].wont_be_nil
|
|
200
|
+
result2.length.must_equal 1
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "should be able to use $skip and $top token together" do
|
|
204
|
+
result = subject.list_subscriptions topic
|
|
205
|
+
result2 = subject.list_subscriptions topic, { :skip => 1, :top => 1 }
|
|
206
|
+
result2.length.must_equal 1
|
|
207
|
+
result2[0].id.must_equal result[1].id
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|