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,502 @@
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 "test_helper"
16
+ require "azure/service/serialization"
17
+
18
+ require 'azure/service/enumeration_results'
19
+ require 'azure/service/signed_identifier'
20
+ require 'azure/service/access_policy'
21
+
22
+ require 'azure/service/storage_service_properties'
23
+ require 'azure/service/logging'
24
+ require 'azure/service/metrics'
25
+ require 'azure/service/retention_policy'
26
+
27
+ describe Azure::Service::Serialization do
28
+ subject { Azure::Service::Serialization }
29
+
30
+ let(:storage_service_properties) { Azure::Service::StorageServiceProperties.new }
31
+ let(:storage_service_properties_xml) { Fixtures["storage_service_properties"] }
32
+
33
+ describe "#signed_identifiers_from_xml" do
34
+ let(:signed_identifiers_xml) { Fixtures["container_acl"]}
35
+
36
+ it "accepts an XML string" do
37
+ subject.signed_identifiers_from_xml signed_identifiers_xml
38
+ end
39
+
40
+ it "returns an Array of SignedIdentifier instances" do
41
+ results = subject.signed_identifiers_from_xml signed_identifiers_xml
42
+ results.must_be_kind_of Array
43
+ results[0].must_be_kind_of Azure::Service::SignedIdentifier
44
+ results.count.must_equal 1
45
+ end
46
+ end
47
+
48
+ describe "#signed_identifiers_to_xml" do
49
+ let(:signed_identifiers) {
50
+ identifier = Azure::Service::SignedIdentifier.new
51
+ identifier.id = "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
52
+ identifier.access_policy.start = "2009-09-28T08:49:37.0000000Z"
53
+ identifier.access_policy.expiry = "2009-09-29T08:49:37.0000000Z"
54
+ identifier.access_policy.permission = "rwd"
55
+ [identifier]
56
+ }
57
+
58
+ let(:signed_identifiers_xml) { Fixtures["container_acl"]}
59
+
60
+ it "accepts a list of SignedIdentifier instances" do
61
+ subject.signed_identifiers_to_xml signed_identifiers
62
+ end
63
+
64
+ it "returns a XML graph of the provided values" do
65
+ xml = subject.signed_identifiers_to_xml signed_identifiers
66
+ xml.must_equal signed_identifiers_xml
67
+ end
68
+ end
69
+
70
+ describe "#signed_identifier_from_xml" do
71
+ let(:signed_identifier_xml) { Nokogiri.Slop(Fixtures["container_acl"]).root.SignedIdentifier }
72
+ let(:mock_access_policy) { mock() }
73
+ before { subject.expects(:access_policy_from_xml).with(signed_identifier_xml.AccessPolicy).returns(mock_access_policy) }
74
+
75
+ it "accepts an XML node" do
76
+ subject.signed_identifier_from_xml signed_identifier_xml
77
+ end
78
+
79
+ it "returns a SignedIdentifier instance" do
80
+ identifier = subject.signed_identifier_from_xml signed_identifier_xml
81
+ identifier.must_be_kind_of Azure::Service::SignedIdentifier
82
+ end
83
+
84
+ it "sets the properties of the SignedIdentifier" do
85
+ identifier = subject.signed_identifier_from_xml signed_identifier_xml
86
+ identifier.wont_be_nil
87
+ identifier.id.must_equal "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
88
+ end
89
+ end
90
+
91
+ describe "#access_policy_from_xml" do
92
+ let(:access_policy_xml) { Nokogiri.Slop(Fixtures["container_acl"]).root.SignedIdentifier.AccessPolicy }
93
+
94
+ it "accepts an XML node" do
95
+ subject.access_policy_from_xml access_policy_xml
96
+ end
97
+
98
+ it "returns a AccessPolicy instance" do
99
+ access_policy = subject.access_policy_from_xml access_policy_xml
100
+ access_policy.must_be_kind_of Azure::Service::AccessPolicy
101
+ end
102
+
103
+ it "sets the properties of the AccessPolicy" do
104
+ access_policy = subject.access_policy_from_xml access_policy_xml
105
+
106
+ access_policy.wont_be_nil
107
+ access_policy.start.must_equal "2009-09-28T08:49:37.0000000Z"
108
+ access_policy.expiry.must_equal "2009-09-29T08:49:37.0000000Z"
109
+ access_policy.permission.must_equal "rwd"
110
+ end
111
+ end
112
+
113
+ describe "#enumeration_results_from_xml" do
114
+ let(:enumeration_results_xml) { Fixtures[:list_containers] }
115
+
116
+ describe "when passed an instance of EnumerationResults" do
117
+ let(:enumeration_results) { Azure::Service::EnumerationResults.new }
118
+
119
+ it "parses the XML and populates the provided EnumerationResults instance" do
120
+ result = subject.enumeration_results_from_xml enumeration_results_xml, enumeration_results
121
+ result.must_be :kind_of?, Azure::Service::EnumerationResults
122
+ result.continuation_token.must_equal "video"
123
+ end
124
+
125
+ it "returns the same instance provided" do
126
+ result = subject.enumeration_results_from_xml enumeration_results_xml, enumeration_results
127
+ result.must_equal enumeration_results
128
+ end
129
+ end
130
+
131
+ describe "when passed nil" do
132
+ it "returns a new instance of EnumerationResults" do
133
+ result = subject.enumeration_results_from_xml enumeration_results_xml, nil
134
+ result.must_be_kind_of Azure::Service::EnumerationResults
135
+ end
136
+ end
137
+ end
138
+
139
+ describe "#metadata_from_xml" do
140
+ let(:list_containers_xml) { Fixtures["list_containers"] }
141
+ let(:metadata_xml_node) { Nokogiri.Slop(list_containers_xml).root.Containers.Container[1].Metadata }
142
+
143
+ it "converts a Metadata XML element to a Hash" do
144
+ subject.metadata_from_xml(metadata_xml_node).must_be_kind_of Hash
145
+ end
146
+
147
+ it "uses the child element names as keys" do
148
+ hash = subject.metadata_from_xml(metadata_xml_node)
149
+ hash.has_key?("mymetadata1").must_equal true
150
+ hash.has_key?("mymetadata2").must_equal true
151
+ hash.has_key?("x-ms-invalid-name").must_equal true
152
+ end
153
+
154
+ it "uses the child element text contents as values" do
155
+ hash = subject.metadata_from_xml(metadata_xml_node)
156
+ hash["mymetadata1"].must_equal "first value"
157
+ hash["mymetadata2"].must_equal "second value"
158
+ end
159
+
160
+ describe "when it encounters more than one of the same element name" do
161
+ it "returns and array of values for that key" do
162
+ hash = subject.metadata_from_xml(metadata_xml_node)
163
+ hash["x-ms-invalid-name"].must_be_kind_of Array
164
+ hash["x-ms-invalid-name"].must_equal ["invalid-metadata-name","invalid-metadata-name2"]
165
+ end
166
+ end
167
+ end
168
+
169
+ describe "#metadata_from_headers" do
170
+ let(:headers) { { "Content-Type"=>"application/xml", "Content-Length"=>"37" } }
171
+
172
+ let(:metadata_headers) { headers.merge({ "x-ms-meta-MyMetadata1" => "first value", "x-ms-meta-MyMetadata2" => "second value" })}
173
+
174
+ it "returns a Hash" do
175
+ subject.metadata_from_headers(metadata_headers).must_be_kind_of Hash
176
+ end
177
+
178
+ it "extracts metadata from a Hash for keys that start with x-ms-meta-* and removes that prefix" do
179
+ hash = subject.metadata_from_headers(metadata_headers)
180
+ hash.has_key?("MyMetadata1").must_equal true
181
+ hash.has_key?("MyMetadata2").must_equal true
182
+ end
183
+
184
+ it "sets the metadata values to the corresponding header values" do
185
+ hash = subject.metadata_from_headers(metadata_headers)
186
+ hash["MyMetadata1"].must_equal "first value"
187
+ hash["MyMetadata2"].must_equal "second value"
188
+ end
189
+ end
190
+
191
+ describe "#retention_policy_to_xml" do
192
+ let(:retention_policy) {
193
+ retention_policy = Azure::Service::RetentionPolicy.new
194
+ retention_policy.enabled = true
195
+ retention_policy.days = 7
196
+
197
+ retention_policy
198
+ }
199
+
200
+ let(:retention_policy_xml) { Fixtures["retention_policy"]}
201
+
202
+ it "accepts a RetentionPolicy instance and an Nokogiri::XML::Builder instance" do
203
+ Nokogiri::XML::Builder.new do |xml|
204
+ subject.retention_policy_to_xml retention_policy, xml
205
+ end
206
+ end
207
+
208
+ it "adds to the XML Builder, which will create the XML graph of the provided values" do
209
+ builder = Nokogiri::XML::Builder.new do |xml|
210
+ subject.retention_policy_to_xml retention_policy, xml
211
+ end
212
+ builder.to_xml.must_equal retention_policy_xml
213
+ end
214
+ end
215
+
216
+ describe "#retention_policy_from_xml" do
217
+ let(:retention_policy_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.Metrics.RetentionPolicy }
218
+
219
+ it "accepts an XML Node" do
220
+ subject.retention_policy_from_xml retention_policy_xml
221
+ end
222
+
223
+ it "returns an RetentionPolicy instance" do
224
+ retention_policy = subject.retention_policy_from_xml retention_policy_xml
225
+ retention_policy.wont_be_nil
226
+ retention_policy.must_be_kind_of Azure::Service::RetentionPolicy
227
+ end
228
+
229
+ it "sets the properties of the RetentionPolicy instance" do
230
+ retention_policy = subject.retention_policy_from_xml retention_policy_xml
231
+ retention_policy.enabled.must_equal true
232
+ retention_policy.days.must_equal 7
233
+ end
234
+ end
235
+
236
+ describe "#metrics_to_xml" do
237
+ let(:metrics) {
238
+ metrics = Azure::Service::Metrics.new
239
+ metrics.version = "1.0"
240
+ metrics.enabled = true
241
+ metrics.include_apis = false
242
+ retention_policy = metrics.retention_policy = Azure::Service::RetentionPolicy.new
243
+ retention_policy.enabled = true
244
+ retention_policy.days = 7
245
+
246
+ metrics
247
+ }
248
+
249
+ let(:metrics_xml) { Fixtures["metrics"]}
250
+
251
+ it "accepts a Metrics instance and an Nokogiri::XML::Builder instance" do
252
+ Nokogiri::XML::Builder.new do |xml|
253
+ subject.metrics_to_xml metrics, xml
254
+ end
255
+ end
256
+
257
+ it "adds to the XML Builder, which will create the XML graph of the provided values" do
258
+ builder = Nokogiri::XML::Builder.new do |xml|
259
+ subject.metrics_to_xml metrics, xml
260
+ end
261
+ builder.to_xml.must_equal metrics_xml
262
+ end
263
+ end
264
+
265
+ describe "#metrics_from_xml" do
266
+ let(:metrics_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.Metrics }
267
+ let(:mock_retention_policy) { mock }
268
+
269
+ before {
270
+ subject.expects(:retention_policy_from_xml).returns(mock_retention_policy)
271
+ }
272
+
273
+ it "accepts an XML Node" do
274
+ subject.metrics_from_xml metrics_xml
275
+ end
276
+
277
+ it "returns an Metrics instance" do
278
+ metrics = subject.metrics_from_xml metrics_xml
279
+ metrics.wont_be_nil
280
+ metrics.must_be_kind_of Azure::Service::Metrics
281
+ end
282
+
283
+ it "sets the properties of the Metrics instance" do
284
+ metrics = subject.metrics_from_xml metrics_xml
285
+ metrics.version.must_equal "1.0"
286
+ metrics.enabled.must_equal true
287
+ metrics.include_apis.must_equal false
288
+ metrics.retention_policy.must_equal mock_retention_policy
289
+ end
290
+ end
291
+
292
+
293
+ describe "#logging_to_xml" do
294
+ let(:logging) {
295
+ logging = Azure::Service::Logging.new
296
+ logging.version = "1.0"
297
+ logging.delete = true
298
+ logging.read = false
299
+ logging.write = true
300
+
301
+ retention_policy = logging.retention_policy = Azure::Service::RetentionPolicy.new
302
+ retention_policy.enabled = true
303
+ retention_policy.days = 7
304
+
305
+ logging
306
+ }
307
+
308
+ let(:logging_xml) { Fixtures["logging"]}
309
+
310
+ it "accepts a Logging instance and an Nokogiri::XML::Builder instance" do
311
+ Nokogiri::XML::Builder.new do |xml|
312
+ subject.logging_to_xml logging, xml
313
+ end
314
+ end
315
+
316
+ it "adds to the XML Builder, which will create the XML graph of the provided values" do
317
+ builder = Nokogiri::XML::Builder.new do |xml|
318
+ subject.logging_to_xml logging, xml
319
+ end
320
+ builder.to_xml.must_equal logging_xml
321
+ end
322
+ end
323
+
324
+ describe "#logging_from_xml" do
325
+ let(:logging_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.Logging }
326
+ let(:mock_retention_policy) { mock }
327
+
328
+ before {
329
+ subject.expects(:retention_policy_from_xml).returns(mock_retention_policy)
330
+ }
331
+
332
+ it "accepts an XML Node" do
333
+ subject.logging_from_xml logging_xml
334
+ end
335
+
336
+ it "returns an Logging instance" do
337
+ logging = subject.logging_from_xml logging_xml
338
+ logging.wont_be_nil
339
+ logging.must_be_kind_of Azure::Service::Logging
340
+ end
341
+
342
+ it "sets the properties of the Logging instance" do
343
+ logging = subject.logging_from_xml logging_xml
344
+ logging.version.must_equal "1.0"
345
+ logging.delete.must_equal true
346
+ logging.read.must_equal false
347
+ logging.write.must_equal true
348
+ logging.retention_policy.must_equal mock_retention_policy
349
+ end
350
+ end
351
+
352
+ describe "#service_properties_to_xml" do
353
+ let(:service_properties) {
354
+ service_properties = Azure::Service::StorageServiceProperties.new
355
+ service_properties.default_service_version = "2011-08-18"
356
+ logging = service_properties.logging = Azure::Service::Logging.new
357
+ logging.version = "1.0"
358
+ logging.delete = true
359
+ logging.read = false
360
+ logging.write = true
361
+ retention_policy = logging.retention_policy = Azure::Service::RetentionPolicy.new
362
+ retention_policy.enabled = true
363
+ retention_policy.days = 7
364
+
365
+ metrics = service_properties.metrics = Azure::Service::Metrics.new
366
+ metrics.version = "1.0"
367
+ metrics.enabled = true
368
+ metrics.include_apis = false
369
+ retention_policy = metrics.retention_policy = Azure::Service::RetentionPolicy.new
370
+ retention_policy.enabled = true
371
+ retention_policy.days = 7
372
+
373
+ service_properties
374
+ }
375
+
376
+ let(:service_properties_xml) { Fixtures["storage_service_properties"]}
377
+
378
+ it "accepts a StorageServiceProperties instance" do
379
+ subject.service_properties_to_xml service_properties
380
+ end
381
+
382
+ it "returns a XML graph of the provided values" do
383
+ xml = subject.service_properties_to_xml service_properties
384
+ xml.must_equal service_properties_xml
385
+ end
386
+ end
387
+
388
+ describe "#service_properties_from_xml" do
389
+ let(:service_properties_xml) { Fixtures["storage_service_properties"]}
390
+ let(:mock_logging) { mock }
391
+ let(:mock_metrics) { mock }
392
+
393
+ before {
394
+ subject.expects(:logging_from_xml).returns(mock_logging)
395
+ subject.expects(:metrics_from_xml).returns(mock_metrics)
396
+ }
397
+
398
+ it "accepts an XML string" do
399
+ subject.service_properties_from_xml service_properties_xml
400
+ end
401
+
402
+ it "returns an StorageServiceProperties instance" do
403
+ service_properties = subject.service_properties_from_xml service_properties_xml
404
+ service_properties.wont_be_nil
405
+ service_properties.must_be_kind_of Azure::Service::StorageServiceProperties
406
+ end
407
+
408
+ it "sets the properties of the StorageServiceProperties instance" do
409
+ service_properties = subject.service_properties_from_xml service_properties_xml
410
+ service_properties.default_service_version.must_equal "2011-08-18"
411
+ service_properties.logging.must_equal mock_logging
412
+ service_properties.metrics.must_equal mock_metrics
413
+ end
414
+ end
415
+
416
+ describe "#to_bool" do
417
+ it "converts a valid string value to a Boolean" do
418
+ subject.to_bool('true').must_be_kind_of TrueClass
419
+ subject.to_bool('false').must_be_kind_of FalseClass
420
+ end
421
+
422
+ it "is case insensitive" do
423
+ # mixed case
424
+ subject.to_bool('True').must_equal true
425
+
426
+ # upper case
427
+ subject.to_bool('TRUE').must_equal true
428
+ end
429
+
430
+ it "returns false for any value other than 'true'" do
431
+ subject.to_bool('random string').must_equal false
432
+ subject.to_bool(nil).must_equal false
433
+ end
434
+ end
435
+
436
+ describe "#slopify" do
437
+ let(:xml_data) { '<?xml version="1.0" encoding="utf-8"?><Foo></Foo>' }
438
+ let(:document) { Nokogiri.Slop xml_data }
439
+ let(:root_node) { document.root }
440
+ let(:non_slop_node) { Nokogiri.parse(xml_data).root }
441
+
442
+ describe "when passed a String" do
443
+
444
+ it "parses the string into a Nokogiri::XML::Element node" do
445
+ result = subject.slopify(xml_data)
446
+ result.must_be_kind_of Nokogiri::XML::Element
447
+ end
448
+
449
+ it "returns the root of the parsed Document" do
450
+ result = subject.slopify(xml_data)
451
+ result.name.must_equal root_node.name
452
+ end
453
+
454
+ it "enables Nokogiri 'Slop' mode on the returned Element" do
455
+ result = subject.slopify(xml_data)
456
+ result.must_respond_to :method_missing
457
+ end
458
+ end
459
+
460
+ describe "when passed a Nokogiri::XML::Document" do
461
+ it "returns a Nokogiri::XML::Element node" do
462
+ result = subject.slopify(document)
463
+ result.must_be_kind_of Nokogiri::XML::Element
464
+ end
465
+
466
+ it "returns the root of the Document" do
467
+ result = subject.slopify(document)
468
+ result.name.must_equal root_node.name
469
+ end
470
+
471
+ it "enables Nokogiri 'Slop' mode on the returned Element" do
472
+ result = subject.slopify(xml_data)
473
+ result.must_respond_to :method_missing
474
+ end
475
+ end
476
+
477
+ describe "when passed a Nokogiri::XML::Element" do
478
+ it "returns the Element unchanged" do
479
+ result = subject.slopify(root_node)
480
+ result.must_equal root_node
481
+ end
482
+
483
+ it "does not enable Nokogiri 'Slop' mode on the returned Element if it didn't already have it" do
484
+ result = subject.slopify(root_node)
485
+ result.respond_to?(:method_missing).must_equal root_node.respond_to?(:method_missing)
486
+
487
+ result = subject.slopify(non_slop_node)
488
+ result.respond_to?(:method_missing).must_equal non_slop_node.respond_to?(:method_missing)
489
+ end
490
+ end
491
+ end
492
+
493
+ describe "#expect_node" do
494
+ let(:node) { mock() }
495
+ it "throws an error if the xml node doesn't match the passed element name" do
496
+ node.expects(:name).returns("NotFoo")
497
+ assert_raises RuntimeError do
498
+ subject.expect_node("Foo", node)
499
+ end
500
+ end
501
+ end
502
+ end