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.
Files changed (298) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +11 -0
  4. data/ChangeLog.txt +40 -0
  5. data/Gemfile +16 -0
  6. data/README.md +590 -0
  7. data/Rakefile +129 -0
  8. data/azure.gemspec +47 -0
  9. data/lib/azure.rb +52 -0
  10. data/lib/azure/base_management/affinity_group.rb +32 -0
  11. data/lib/azure/base_management/base_management_service.rb +238 -0
  12. data/lib/azure/base_management/location.rb +27 -0
  13. data/lib/azure/base_management/management_http_request.rb +244 -0
  14. data/lib/azure/base_management/serialization.rb +129 -0
  15. data/lib/azure/base_management/sql_management_http_request.rb +45 -0
  16. data/lib/azure/blob/blob.rb +32 -0
  17. data/lib/azure/blob/blob_service.rb +1424 -0
  18. data/lib/azure/blob/block.rb +31 -0
  19. data/lib/azure/blob/container.rb +32 -0
  20. data/lib/azure/blob/serialization.rb +285 -0
  21. data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
  22. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +361 -0
  23. data/lib/azure/cloud_service_management/configuration_set.rb +28 -0
  24. data/lib/azure/cloud_service_management/deployment.rb +64 -0
  25. data/lib/azure/cloud_service_management/input_endpoint.rb +29 -0
  26. data/lib/azure/cloud_service_management/instance_endpoint.rb +31 -0
  27. data/lib/azure/cloud_service_management/persistent_vm_downtime.rb +29 -0
  28. data/lib/azure/cloud_service_management/role.rb +30 -0
  29. data/lib/azure/cloud_service_management/role_instance.rb +40 -0
  30. data/lib/azure/cloud_service_management/serialization.rb +329 -0
  31. data/lib/azure/cloud_service_management/virtual_ip.rb +29 -0
  32. data/lib/azure/core.rb +39 -0
  33. data/lib/azure/core/auth/authorizer.rb +36 -0
  34. data/lib/azure/core/auth/shared_key.rb +110 -0
  35. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  36. data/lib/azure/core/auth/signer.rb +48 -0
  37. data/lib/azure/core/configuration.rb +211 -0
  38. data/lib/azure/core/error.rb +22 -0
  39. data/lib/azure/core/filtered_service.rb +44 -0
  40. data/lib/azure/core/http/debug_filter.rb +36 -0
  41. data/lib/azure/core/http/http_error.rb +88 -0
  42. data/lib/azure/core/http/http_filter.rb +53 -0
  43. data/lib/azure/core/http/http_request.rb +159 -0
  44. data/lib/azure/core/http/http_response.rb +140 -0
  45. data/lib/azure/core/http/retry_policy.rb +74 -0
  46. data/lib/azure/core/http/signer_filter.rb +34 -0
  47. data/lib/azure/core/service.rb +63 -0
  48. data/lib/azure/core/signed_service.rb +43 -0
  49. data/lib/azure/core/utility.rb +190 -0
  50. data/lib/azure/queue/message.rb +30 -0
  51. data/lib/azure/queue/queue.rb +29 -0
  52. data/lib/azure/queue/queue_service.rb +568 -0
  53. data/lib/azure/queue/serialization.rb +106 -0
  54. data/lib/azure/service/access_policy.rb +26 -0
  55. data/lib/azure/service/enumeration_results.rb +21 -0
  56. data/lib/azure/service/logging.rb +32 -0
  57. data/lib/azure/service/metrics.rb +31 -0
  58. data/lib/azure/service/retention_policy.rb +25 -0
  59. data/lib/azure/service/serialization.rb +240 -0
  60. data/lib/azure/service/signed_identifier.rb +30 -0
  61. data/lib/azure/service/storage_service.rb +79 -0
  62. data/lib/azure/service/storage_service_properties.rb +32 -0
  63. data/lib/azure/service_bus/action.rb +21 -0
  64. data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
  65. data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
  66. data/lib/azure/service_bus/brokered_message.rb +124 -0
  67. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
  68. data/lib/azure/service_bus/correlation_filter.rb +45 -0
  69. data/lib/azure/service_bus/empty_rule_action.rb +30 -0
  70. data/lib/azure/service_bus/false_filter.rb +38 -0
  71. data/lib/azure/service_bus/filter.rb +21 -0
  72. data/lib/azure/service_bus/interval.rb +104 -0
  73. data/lib/azure/service_bus/queue.rb +230 -0
  74. data/lib/azure/service_bus/resource.rb +109 -0
  75. data/lib/azure/service_bus/rule.rb +98 -0
  76. data/lib/azure/service_bus/rule_aspect.rb +34 -0
  77. data/lib/azure/service_bus/serialization.rb +160 -0
  78. data/lib/azure/service_bus/service_bus_service.rb +829 -0
  79. data/lib/azure/service_bus/sql_filter.rb +50 -0
  80. data/lib/azure/service_bus/sql_rule_action.rb +50 -0
  81. data/lib/azure/service_bus/subscription.rb +184 -0
  82. data/lib/azure/service_bus/topic.rb +187 -0
  83. data/lib/azure/service_bus/true_filter.rb +38 -0
  84. data/lib/azure/sql_database_management/serialization.rb +111 -0
  85. data/lib/azure/sql_database_management/sql_database.rb +31 -0
  86. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
  87. data/lib/azure/storage_management/serialization.rb +184 -0
  88. data/lib/azure/storage_management/storage_account.rb +40 -0
  89. data/lib/azure/storage_management/storage_management_service.rb +166 -0
  90. data/lib/azure/table/auth/shared_key.rb +92 -0
  91. data/lib/azure/table/auth/shared_key_lite.rb +44 -0
  92. data/lib/azure/table/batch.rb +330 -0
  93. data/lib/azure/table/batch_response.rb +118 -0
  94. data/lib/azure/table/edmtype.rb +127 -0
  95. data/lib/azure/table/entity.rb +31 -0
  96. data/lib/azure/table/guid.rb +24 -0
  97. data/lib/azure/table/query.rb +112 -0
  98. data/lib/azure/table/serialization.rb +108 -0
  99. data/lib/azure/table/table_service.rb +560 -0
  100. data/lib/azure/version.rb +31 -0
  101. data/lib/azure/virtual_machine_image_management/serialization.rb +51 -0
  102. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
  103. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
  104. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -0
  105. data/lib/azure/virtual_machine_management/serialization.rb +436 -0
  106. data/lib/azure/virtual_machine_management/virtual_machine.rb +42 -0
  107. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +549 -0
  108. data/lib/azure/virtual_network_management/serialization.rb +186 -0
  109. data/lib/azure/virtual_network_management/virtual_network.rb +36 -0
  110. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
  111. data/test/fixtures/32px-fulls-black.jpg +0 -0
  112. data/test/fixtures/affinity_group.xml +33 -0
  113. data/test/fixtures/all_containers.xml +20 -0
  114. data/test/fixtures/all_tables.xml +22 -0
  115. data/test/fixtures/certificate.pem +21 -0
  116. data/test/fixtures/container_acl.xml +11 -0
  117. data/test/fixtures/create_sql_database_server.xml +2 -0
  118. data/test/fixtures/create_storage_desc_error.xml +5 -0
  119. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  120. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  121. data/test/fixtures/create_storage_full_error.xml +6 -0
  122. data/test/fixtures/create_storage_label_error.xml +5 -0
  123. data/test/fixtures/create_storage_location_error.xml +5 -0
  124. data/test/fixtures/create_storage_name_error.xml +6 -0
  125. data/test/fixtures/create_table_response_entry.xml +15 -0
  126. data/test/fixtures/delete_storage_container_error.xml +5 -0
  127. data/test/fixtures/delete_storage_error.xml +5 -0
  128. data/test/fixtures/deployment_error.xml +5 -0
  129. data/test/fixtures/empty_xml_file +0 -0
  130. data/test/fixtures/get_deployment.xml +94 -0
  131. data/test/fixtures/get_deployment_existing.xml +94 -0
  132. data/test/fixtures/get_deployment_missing.xml +5 -0
  133. data/test/fixtures/get_storage_account_error.xml +5 -0
  134. data/test/fixtures/get_storage_account_properties.xml +32 -0
  135. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  136. data/test/fixtures/http_error.xml +5 -0
  137. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  138. data/test/fixtures/list_affinity_groups.xml +22 -0
  139. data/test/fixtures/list_blobs.xml +121 -0
  140. data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
  141. data/test/fixtures/list_blocks_all.xml +23 -0
  142. data/test/fixtures/list_blocks_committed.xml +13 -0
  143. data/test/fixtures/list_cloud_services.xml +39 -0
  144. data/test/fixtures/list_containers.xml +38 -0
  145. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  146. data/test/fixtures/list_images.xml +110 -0
  147. data/test/fixtures/list_locations.xml +62 -0
  148. data/test/fixtures/list_page_ranges.xml +11 -0
  149. data/test/fixtures/list_sql_database.xml +36 -0
  150. data/test/fixtures/list_sql_server_firewall.xml +23 -0
  151. data/test/fixtures/list_storage_account_single.xml +25 -0
  152. data/test/fixtures/list_storage_accounts.xml +46 -0
  153. data/test/fixtures/list_virtual_networks.xml +92 -0
  154. data/test/fixtures/logging.xml +11 -0
  155. data/test/fixtures/management_certificate.pem +55 -0
  156. data/test/fixtures/messages.xml +12 -0
  157. data/test/fixtures/metrics.xml +10 -0
  158. data/test/fixtures/privatekey.key +28 -0
  159. data/test/fixtures/query_entities_empty_response.xml +7 -0
  160. data/test/fixtures/query_entities_response.xml +45 -0
  161. data/test/fixtures/queue_service_properties.xml +22 -0
  162. data/test/fixtures/queue_service_properties_original.xml +19 -0
  163. data/test/fixtures/queues.xml +16 -0
  164. data/test/fixtures/retention_policy.xml +5 -0
  165. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  166. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  167. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  168. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  169. data/test/fixtures/storage_service_properties.xml +23 -0
  170. data/test/fixtures/update_storage_account.xml +16 -0
  171. data/test/fixtures/update_storage_error.xml +5 -0
  172. data/test/fixtures/updated_storage_accounts.xml +53 -0
  173. data/test/fixtures/virtual_machine.xml +113 -0
  174. data/test/fixtures/windows_virtual_machine.xml +106 -0
  175. data/test/integration/affinity_group/Affinity_test.rb +55 -0
  176. data/test/integration/affinity_group/Create_Affinity_test.rb +63 -0
  177. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
  178. data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
  179. data/test/integration/affinity_group/Update_Affinity_test.rb +82 -0
  180. data/test/integration/blob/blob_gb18030_test.rb +199 -0
  181. data/test/integration/blob/blob_metadata_test.rb +75 -0
  182. data/test/integration/blob/blob_pages_test.rb +119 -0
  183. data/test/integration/blob/blob_properties_test.rb +77 -0
  184. data/test/integration/blob/block_blob_test.rb +254 -0
  185. data/test/integration/blob/container/container_acl_test.rb +69 -0
  186. data/test/integration/blob/container/container_metadata_test.rb +50 -0
  187. data/test/integration/blob/container/create_container_test.rb +60 -0
  188. data/test/integration/blob/container/delete_container_test.rb +39 -0
  189. data/test/integration/blob/container/get_container_properties_test.rb +48 -0
  190. data/test/integration/blob/container/list_containers_test.rb +79 -0
  191. data/test/integration/blob/container/root_container_test.rb +54 -0
  192. data/test/integration/blob/copy_blob_test.rb +113 -0
  193. data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
  194. data/test/integration/blob/create_page_blob_test.rb +83 -0
  195. data/test/integration/blob/delete_blob_test.rb +159 -0
  196. data/test/integration/blob/get_blob_test.rb +65 -0
  197. data/test/integration/blob/informative_errors_test.rb +39 -0
  198. data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
  199. data/test/integration/blob/lease/break_lease_test.rb +40 -0
  200. data/test/integration/blob/lease/release_lease_test.rb +40 -0
  201. data/test/integration/blob/lease/renew_lease_test.rb +42 -0
  202. data/test/integration/blob/list_blobs_test.rb +113 -0
  203. data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
  204. data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
  205. data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
  206. data/test/integration/database/create_sql_server_test.rb +53 -0
  207. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
  208. data/test/integration/database/delete_sql_server_test.rb +58 -0
  209. data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
  210. data/test/integration/database/list_sql_servers_test.rb +44 -0
  211. data/test/integration/database/reset_password_sql_server_test.rb +55 -0
  212. data/test/integration/location/Location_List_test.rb +39 -0
  213. data/test/integration/queue/clear_messages_test.rb +42 -0
  214. data/test/integration/queue/create_message_test.rb +75 -0
  215. data/test/integration/queue/create_queue_test.rb +50 -0
  216. data/test/integration/queue/delete_message_test.rb +67 -0
  217. data/test/integration/queue/delete_queue_test.rb +45 -0
  218. data/test/integration/queue/informative_errors_test.rb +42 -0
  219. data/test/integration/queue/list_messages_encoded_test.rb +79 -0
  220. data/test/integration/queue/list_messages_test.rb +79 -0
  221. data/test/integration/queue/list_queues_test.rb +44 -0
  222. data/test/integration/queue/peek_messages_test.rb +59 -0
  223. data/test/integration/queue/queue_gb18030_test.rb +131 -0
  224. data/test/integration/queue/queue_metadata_test.rb +40 -0
  225. data/test/integration/queue/update_message_test.rb +74 -0
  226. data/test/integration/service_bus/informative_errors_test.rb +37 -0
  227. data/test/integration/service_bus/queues_scenario_test.rb +200 -0
  228. data/test/integration/service_bus/queues_test.rb +266 -0
  229. data/test/integration/service_bus/rules_test.rb +145 -0
  230. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
  231. data/test/integration/service_bus/scenario_test.rb +101 -0
  232. data/test/integration/service_bus/subscriptions_test.rb +211 -0
  233. data/test/integration/service_bus/topics_scenario_test.rb +406 -0
  234. data/test/integration/service_bus/topics_test.rb +129 -0
  235. data/test/integration/storage_management/storage_management_test.rb +160 -0
  236. data/test/integration/table/create_table_test.rb +36 -0
  237. data/test/integration/table/delete_entity_batch_test.rb +107 -0
  238. data/test/integration/table/delete_entity_test.rb +94 -0
  239. data/test/integration/table/delete_table_test.rb +40 -0
  240. data/test/integration/table/get_table_test.rb +37 -0
  241. data/test/integration/table/informative_errors_test.rb +39 -0
  242. data/test/integration/table/insert_entity_batch_test.rb +100 -0
  243. data/test/integration/table/insert_entity_test.rb +88 -0
  244. data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
  245. data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
  246. data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
  247. data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
  248. data/test/integration/table/merge_entity_batch_test.rb +128 -0
  249. data/test/integration/table/merge_entity_test.rb +113 -0
  250. data/test/integration/table/query_entities_test.rb +195 -0
  251. data/test/integration/table/query_tables_test.rb +43 -0
  252. data/test/integration/table/query_test.rb +251 -0
  253. data/test/integration/table/table_acl_test.rb +52 -0
  254. data/test/integration/table/table_gb18030_test.rb +355 -0
  255. data/test/integration/table/update_entity_batch_test.rb +149 -0
  256. data/test/integration/table/update_entity_test.rb +131 -0
  257. data/test/integration/test_helper.rb +42 -0
  258. data/test/integration/vm/VM_Create_test.rb +260 -0
  259. data/test/integration/vm/VM_Delete_test.rb +55 -0
  260. data/test/integration/vm/VM_Operations_test.rb +173 -0
  261. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
  262. data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
  263. data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -0
  264. data/test/integration/vnet/Virtual_Network_list_test.rb +53 -0
  265. data/test/support/env.rb +19 -0
  266. data/test/support/fixtures.rb +36 -0
  267. data/test/support/name_generator.rb +160 -0
  268. data/test/support/stubs.rb +42 -0
  269. data/test/support/virtual_machine_name_generator.rb +102 -0
  270. data/test/support/virtual_network_helper.rb +73 -0
  271. data/test/test_helper.rb +53 -0
  272. data/test/unit/affinity_group/affinity_group_test.rb +192 -0
  273. data/test/unit/affinity_group/serialization_test.rb +88 -0
  274. data/test/unit/base_management/location_test.rb +57 -0
  275. data/test/unit/blob/blob_service_test.rb +1947 -0
  276. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +276 -0
  277. data/test/unit/cloud_service_management/serialization_test.rb +169 -0
  278. data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
  279. data/test/unit/core/auth/shared_key_test.rb +58 -0
  280. data/test/unit/core/auth/signer_test.rb +30 -0
  281. data/test/unit/core/http/http_error_test.rb +57 -0
  282. data/test/unit/core/http/http_request_test.rb +66 -0
  283. data/test/unit/core/http/http_response_test.rb +45 -0
  284. data/test/unit/core/http/retry_policy_test.rb +23 -0
  285. data/test/unit/database/serialization_test.rb +97 -0
  286. data/test/unit/database/sql_database_server_service_test.rb +288 -0
  287. data/test/unit/service/serialization_test.rb +502 -0
  288. data/test/unit/service/storage_service_test.rb +291 -0
  289. data/test/unit/storage_management/serialization_test.rb +232 -0
  290. data/test/unit/storage_management/storage_management_service_test.rb +261 -0
  291. data/test/unit/table/edmtype_test.rb +108 -0
  292. data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -0
  293. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -0
  294. data/test/unit/virtual_machine_management/serialization_test.rb +247 -0
  295. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -0
  296. data/test/unit/vnet/serialization_test.rb +187 -0
  297. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
  298. 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