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,58 @@
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/core/auth/shared_key"
17
+
18
+ describe Azure::Core::Auth::SharedKey do
19
+ subject { Azure::Core::Auth::SharedKey.new "account-name", "YWNjZXNzLWtleQ==" }
20
+
21
+ let(:method) { "POST" }
22
+ let(:uri) { URI.parse "http://dummy.uri/resource" }
23
+ let(:headers) do
24
+ {
25
+ "Content-Encoding"=> "foo",
26
+ "Content-Language"=> "foo",
27
+ "Content-Length"=> "foo",
28
+ "Content-MD5"=> "foo",
29
+ "Content-Type"=> "foo",
30
+ "Date"=> "foo",
31
+ "If-Modified-Since"=> "foo",
32
+ "If-Match"=> "foo",
33
+ "If-None-Match"=> "foo",
34
+ "If-Unmodified-Since"=> "foo",
35
+ "Range"=> "foo",
36
+ "x-ms-ImATeapot"=> "teapot",
37
+ "x-ms-ShortAndStout"=>"True"
38
+ }
39
+ end
40
+
41
+ describe "sign" do
42
+ it "creates a signature from the provided HTTP method, uri, and a specific set of standard headers" do
43
+ subject.sign(method, uri, headers).must_equal "account-name:vcdxlDVoE1QvJerkg0ci3Wlnj2Qq8yzlsrkRf5dEU/I="
44
+ end
45
+ end
46
+
47
+ describe "canonicalized_headers" do
48
+ it "creates a canonicalized header string" do
49
+ subject.canonicalized_headers(headers).must_equal "x-ms-imateapot:teapot\nx-ms-shortandstout:True"
50
+ end
51
+ end
52
+
53
+ describe "canonicalized_resource" do
54
+ it "creates a canonicalized resource string" do
55
+ subject.canonicalized_resource(uri).must_equal "/account-name/resource"
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,30 @@
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/core/auth/signer"
17
+
18
+ describe Azure::Core::Auth::Signer do
19
+ subject { Azure::Core::Auth::Signer.new "YWNjZXNzLWtleQ==" }
20
+
21
+ it "decodes the base64 encoded access_key" do
22
+ subject.access_key.must_equal "access-key"
23
+ end
24
+
25
+ describe "sign" do
26
+ it "creates a signature for the body, as a base64 encoded string, which represents a HMAC hash using the access_key" do
27
+ subject.sign("body").must_equal "iuUxVhs1E7PeSNx/90ViyJNO24160qYpoWeCcOsnMoM="
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,57 @@
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/core/http/http_error"
17
+
18
+ describe Azure::Core::Http::HTTPError do
19
+ let :http_response do
20
+ double(:body=> Fixtures[:http_error], :status_code=> 409, :uri=>'http://dummy.uri')
21
+ end
22
+
23
+ subject do
24
+ Azure::Core::Http::HTTPError.new(http_response)
25
+ end
26
+
27
+ it "is an instance of Azure::Core::Error" do
28
+ subject.must_be_kind_of Azure::Core::Error
29
+ end
30
+
31
+ it "lets us see the original uri" do
32
+ subject.uri.must_equal 'http://dummy.uri'
33
+ end
34
+
35
+ it "lets us see the errors'status code" do
36
+ subject.status_code.must_equal 409
37
+ end
38
+
39
+ it "lets us see the error's type" do
40
+ subject.type.must_equal "TableAlreadyExists"
41
+ end
42
+
43
+ it "lets us see the error's description" do
44
+ subject.description.must_equal "The table specified already exists."
45
+ end
46
+
47
+ it "generates an error message that wraps both the type and description" do
48
+ subject.message.must_equal "TableAlreadyExists (409): The table specified already exists."
49
+ end
50
+
51
+ it "sets the type to unknown if the response body is not an XML" do
52
+ http_response.body = "\r\nInvalid request\r\n"
53
+
54
+ subject.type.must_equal "Unknown"
55
+ subject.description.must_equal "Invalid request"
56
+ end
57
+ end
@@ -0,0 +1,66 @@
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/core/http/http_request"
17
+
18
+ describe Azure::Core::Http::HttpRequest do
19
+ describe " default_headers " do
20
+ subject do
21
+ Azure::Core::Http::HttpRequest.new(:get, URI("/"), nil, "Thu, 04 Oct 2012 06:38:27 GMT")
22
+ end
23
+
24
+ it "sets the x-ms-date header to the current_time" do
25
+ subject.headers["x-ms-date"] = "Thu, 04 Oct 2012 06:38:27 GMT"
26
+ end
27
+
28
+ it "sets the x-ms-version header to the current API version" do
29
+ subject.headers["x-ms-version"] = "2011-08-18"
30
+ end
31
+
32
+ it "sets the DataServiceVersion header to the current API version" do
33
+ subject.headers["DataServiceVersion"] = "1.0;NetFx"
34
+ end
35
+
36
+ it "sets the MaxDataServiceVersion header to the current max` API version" do
37
+ subject.headers["MaxDataServiceVersion"] = "2.0;NetFx"
38
+ end
39
+
40
+ describe " when passed a body " do
41
+ subject do
42
+ Azure::Core::Http::HttpRequest.new(:get, URI("/"), "<body/>")
43
+ end
44
+
45
+ it "sets the default Content-Type header" do
46
+ subject.headers["Content-Type"].must_equal "application/atom+xml; charset=utf-8"
47
+ end
48
+
49
+ it "sets the Content-Length header" do
50
+ subject.headers["Content-Length"].must_equal "7"
51
+ end
52
+
53
+ it "sets the Content-MD5 header to a Base64 encoded representation of the MD5 hash of the body" do
54
+ subject.headers["Content-MD5"].must_equal "PNeJy7qyzV4XUoBBHkVu0g=="
55
+ end
56
+ end
57
+
58
+ describe " when the body is nil " do
59
+ it "leaves the Content-Type, Content-Length, and Content-MD5 headers blank" do
60
+ subject.headers["Content-Type"].must_equal ""
61
+ subject.headers["Content-Length"].must_equal "0"
62
+ subject.headers["Content-MD5"].must_be_nil
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,45 @@
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/core/http/http_response"
17
+
18
+ describe Azure::Core::Http::HttpResponse do
19
+ it "converts net/http headers into strings" do
20
+ http_response = MiniTest::Mock.new
21
+ http_response.stub(:to_hash, { "Content-Type" => ["text/xml"] })
22
+
23
+ response = Azure::Core::Http::HttpResponse.new(http_response)
24
+ response.headers["Content-Type"].must_equal "text/xml"
25
+ end
26
+
27
+ describe Azure::Core::Http::HttpResponse::HeaderHash do
28
+ subject do
29
+ Azure::Core::Http::HttpResponse::HeaderHash.new(
30
+ "AsdAsd" => ["1"], "bazqux" => ["2"], "QUXFOO" => ["3"]
31
+ )
32
+ end
33
+
34
+ it "returns the header values as strings, not arrays" do
35
+ subject["AsdAsd"].must_equal "1"
36
+ subject["bazqux"].must_equal "2"
37
+ subject["QUXFOO"].must_equal "3"
38
+ end
39
+
40
+ it "obtains keys in a case-insensitive fashion" do
41
+ subject["asdasd"].must_equal "1"
42
+ subject["BaZqUx"].must_equal "2"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,23 @@
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/core/http/retry_policy"
17
+
18
+ describe Azure::Core::Http::RetryPolicy do
19
+ it "uses blocks as retry logic" do
20
+ retry_policy = Azure::Core::Http::RetryPolicy.new do |a,b| true end
21
+ retry_policy.should_retry?(nil, nil).must_equal true
22
+ end
23
+ end
@@ -0,0 +1,97 @@
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
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
+
17
+ describe Azure::SqlDatabaseManagement::Serialization do
18
+ subject { Azure::SqlDatabaseManagement::Serialization }
19
+
20
+ let(:sql_servers_xml) { Fixtures['list_sql_database'] }
21
+ before do
22
+ Azure.config.sql_database_authentication_mode = :sql_server
23
+ end
24
+ describe '#databases_from_xml' do
25
+
26
+ it 'accepts an XML string' do
27
+ subject.databases_from_xml Nokogiri::XML(sql_servers_xml)
28
+ end
29
+
30
+ it 'returns an Array of SqlDatabaseServer instances' do
31
+ results = subject.databases_from_xml Nokogiri::XML(sql_servers_xml)
32
+ results.must_be_kind_of Array
33
+ results[0].must_be_kind_of Azure::SqlDatabaseManagement::SqlDatabase
34
+ results.count.must_equal 3
35
+ end
36
+ end
37
+
38
+ describe '#database_to_xml' do
39
+ let(:login) { 'administrator' }
40
+ let(:password) { 'Password@123' }
41
+ let(:location) { 'West US' }
42
+
43
+ it 'accepts an name and options hash' do
44
+ subject.database_to_xml(login, password, location)
45
+ end
46
+
47
+ it 'serializes the argument to xml' do
48
+ results = subject.database_to_xml login, password, location
49
+ doc = Nokogiri::XML results
50
+ doc.css('AdministratorLogin').text.must_equal login
51
+ doc.css('AdministratorLoginPassword').text.must_equal password
52
+ doc.css('Location').text.must_equal location
53
+ results.must_be_kind_of String
54
+ end
55
+
56
+ end
57
+
58
+ describe '#firewall_rule_to_xml' do
59
+ let(:options) do
60
+ {
61
+ start_ip_address: '10.0.0.1',
62
+ end_ip_address: '10.0.0.255'
63
+ }
64
+ end
65
+
66
+ it 'accepts a ip range' do
67
+ subject.firewall_rule_to_xml(options)
68
+ end
69
+
70
+ it 'serializes the argument to xml' do
71
+ results = subject.firewall_rule_to_xml options
72
+ doc = Nokogiri::XML results
73
+ doc.css('StartIpAddress').text.must_equal options[:start_ip_address]
74
+ doc.css('EndIpAddress').text.must_equal options[:end_ip_address]
75
+ results.must_be_kind_of String
76
+ end
77
+
78
+ end
79
+
80
+ describe '#database_firewall_from_xml' do
81
+ let(:sql_server_firewall_xml) { Fixtures['list_sql_server_firewall'] }
82
+
83
+ it 'accepts an XML string' do
84
+ subject.database_firewall_from_xml Nokogiri::XML(sql_server_firewall_xml)
85
+ end
86
+
87
+ it 'returns an Array of SqlDatabaseServer instances with firewall' do
88
+ results = subject.database_firewall_from_xml(
89
+ Nokogiri::XML(sql_server_firewall_xml)
90
+ )
91
+ results.must_be_kind_of Array
92
+ results[0].must_be_kind_of Hash
93
+ results.count.must_equal 4
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,288 @@
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
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
+
17
+ describe 'Azure::SqlDatabaseManagementService' do
18
+ subject { Azure::SqlDatabaseManagementService.new }
19
+
20
+ let(:response_headers) { {} }
21
+ let(:mock_request) { mock }
22
+ let(:response) { mock }
23
+ let(:response_xml) { nil }
24
+
25
+ describe 'SQL Server authentication Endpoint' do
26
+ before do
27
+ Loggerx.expects(:puts).returns(nil).at_least(0)
28
+ mock_request.stubs(:headers).returns(response_headers)
29
+ mock_request.expects(:call).returns(Nokogiri::XML response_xml).at_least(0)
30
+ Azure.config.sql_database_authentication_mode = :sql_server
31
+ end
32
+
33
+ describe '#list_servers' do
34
+ let(:response_xml) { Fixtures['list_sql_database'] }
35
+ let(:method) { :get }
36
+ let(:request_path) { '/servers' }
37
+
38
+ before do
39
+ SqlManagementHttpRequest.stubs(:new).with(
40
+ method,
41
+ request_path,
42
+ nil
43
+ ).returns(mock_request)
44
+ end
45
+
46
+ it 'assembles a URI for the request' do
47
+ subject.list_servers
48
+ end
49
+
50
+ it 'returns a list of sql servers for the account' do
51
+ results = subject.list_servers
52
+ results.must_be_kind_of Array
53
+ results.length.must_equal 3
54
+ sql_server = results.first
55
+ sql_server.must_be_kind_of Azure::SqlDatabaseManagement::SqlDatabase
56
+ sql_server.name.must_equal 'nn1koc2ney'
57
+ sql_server.administrator_login.must_equal 'SqlServer2'
58
+ sql_server.location.must_equal 'West US'
59
+ sql_server.feature_name.must_equal 'Premium Mode'
60
+ sql_server.feature_value.must_equal 'false'
61
+ end
62
+ end
63
+
64
+ describe '#delete_server' do
65
+ before do
66
+ Azure::SqlDatabaseManagementService.any_instance.stubs(
67
+ :list_servers
68
+ ).returns([])
69
+ end
70
+
71
+ it 'error if sql server does not exists' do
72
+ s_name = 'unknown-server'
73
+ exception = assert_raises(Azure::Error::Error) do
74
+ subject.delete_server s_name
75
+ end
76
+ s_id = Azure.config.subscription_id
77
+ assert_match(/Subscription #{s_id} does not have server #{s_name}./i,
78
+ exception.message)
79
+ end
80
+
81
+ end
82
+
83
+ describe '#list_sql_server_firewall_rules' do
84
+ let(:response_xml) { Fixtures['list_sql_server_firewall'] }
85
+ let(:method) { :get }
86
+ let(:sql_server_name) { 'server1' }
87
+ let(:request_path) { "/servers/#{sql_server_name}/firewallrules" }
88
+
89
+ before do
90
+ sql_server = Azure::SqlDatabaseManagement::SqlDatabase.new do |server|
91
+ server.name = sql_server_name
92
+ end
93
+ Azure::SqlDatabaseManagementService.any_instance.stubs(
94
+ :list_servers
95
+ ).returns([sql_server])
96
+
97
+ SqlManagementHttpRequest.stubs(:new).with(
98
+ method,
99
+ request_path,
100
+ nil
101
+ ).returns(mock_request)
102
+ end
103
+
104
+ it 'assembles a URI for the sql server firewall request' do
105
+ subject.list_sql_server_firewall_rules sql_server_name
106
+ end
107
+
108
+ it 'returns a list of firewall of given sql servers' do
109
+ results = subject.list_sql_server_firewall_rules sql_server_name
110
+ results.must_be_kind_of Array
111
+ results.length.must_equal 4
112
+ results.first.must_be_kind_of Hash
113
+ end
114
+ end
115
+
116
+ describe '#create_server' do
117
+ let(:response_xml) { Fixtures['create_sql_database_server'] }
118
+ let(:method) { :post }
119
+ let(:request_path) { '/servers' }
120
+ let(:password) { 'User@123' }
121
+ let(:login) { 'ms_open_tech' }
122
+ let(:location) { 'West US' }
123
+
124
+ before do
125
+ SqlManagementHttpRequest.stubs(:new).with(
126
+ method,
127
+ request_path,
128
+ anything
129
+ ).returns(mock_request)
130
+
131
+ mock_request.stubs(:headers).returns(response_headers)
132
+ mock_request.expects(:call).returns(
133
+ Nokogiri::XML response_xml
134
+ ).at_least(0)
135
+ end
136
+
137
+ it 'create sql server' do
138
+ sql_server = subject.create_server(login, password, location)
139
+ sql_server.name.must_equal 'gxyfzrhx2c'
140
+ sql_server.administrator_login.must_equal login
141
+ sql_server.location.must_equal location
142
+ end
143
+ end
144
+
145
+ describe '#set_sql_server_firewall_rule' do
146
+ it 'create sql server' do
147
+ ip_range = { start_ip_address: '0.0.0.1', end_ip_address: '0.0.0.5' }
148
+ exception = assert_raises(RuntimeError) do
149
+ subject.set_sql_server_firewall_rule('zv2nfoah2t1', ip_range)
150
+ end
151
+ assert_match(/Missing parameter server_name or rule_name/i,
152
+ exception.message)
153
+ end
154
+ end
155
+ end
156
+
157
+ describe 'Management Certificate authentication Endpoint' do
158
+ before do
159
+ Loggerx.expects(:puts).returns(nil).at_least(0)
160
+ mock_request.stubs(:headers).returns(response_headers)
161
+ mock_request.expects(:call).returns(Nokogiri::XML response_xml).at_least(0)
162
+ Azure.config.sql_database_authentication_mode = :management_certificate
163
+ end
164
+
165
+ describe '#list_servers' do
166
+ let(:response_xml) { Fixtures['list_sql_database'] }
167
+ let(:method) { :get }
168
+ let(:request_path) { '/servers' }
169
+
170
+ before do
171
+ SqlManagementHttpRequest.stubs(:new).with(
172
+ method,
173
+ request_path,
174
+ nil
175
+ ).returns(mock_request)
176
+ end
177
+
178
+ it 'assembles a URI for the request' do
179
+ subject.list_servers
180
+ end
181
+
182
+ it 'returns a list of sql servers for the account' do
183
+ results = subject.list_servers
184
+ results.must_be_kind_of Array
185
+ results.length.must_equal 3
186
+ sql_server = results.first
187
+ sql_server.must_be_kind_of Azure::SqlDatabaseManagement::SqlDatabase
188
+ sql_server.name.must_equal 'nn1koc2ney'
189
+ sql_server.administrator_login.must_equal 'SqlServer2'
190
+ sql_server.location.must_equal 'West US'
191
+ sql_server.feature_name.must_equal 'Premium Mode'
192
+ sql_server.feature_value.must_equal 'false'
193
+ end
194
+ end
195
+
196
+ describe '#delete_server' do
197
+ before do
198
+ Azure::SqlDatabaseManagementService.any_instance.stubs(
199
+ :list_servers
200
+ ).returns([])
201
+ end
202
+
203
+ it 'error if sql server does not exists' do
204
+ s_name = 'unknown-server'
205
+ exception = assert_raises(Azure::Error::Error) do
206
+ subject.delete_server s_name
207
+ end
208
+ s_id = Azure.config.subscription_id
209
+ assert_match(/Subscription #{s_id} does not have server #{s_name}./i,
210
+ exception.message)
211
+ end
212
+
213
+ end
214
+
215
+ describe '#list_sql_server_firewall_rules' do
216
+ let(:response_xml) { Fixtures['list_firewall_management_endpoint'] }
217
+ let(:method) { :get }
218
+ let(:sql_server_name) { 'server1' }
219
+ let(:request_path) { "/servers/#{sql_server_name}/firewallrules" }
220
+
221
+ before do
222
+ sql_server = Azure::SqlDatabaseManagement::SqlDatabase.new do |server|
223
+ server.name = sql_server_name
224
+ end
225
+ Azure::SqlDatabaseManagementService.any_instance.stubs(
226
+ :list_servers
227
+ ).returns([sql_server])
228
+
229
+ SqlManagementHttpRequest.stubs(:new).with(
230
+ method,
231
+ request_path,
232
+ nil
233
+ ).returns(mock_request)
234
+ end
235
+
236
+ it 'assembles a URI for the sql server firewall request' do
237
+ subject.list_sql_server_firewall_rules sql_server_name
238
+ end
239
+
240
+ it 'returns a list of firewall of given sql servers' do
241
+ results = subject.list_sql_server_firewall_rules sql_server_name
242
+ results.must_be_kind_of Array
243
+ results.length.must_equal 4
244
+ results.first.must_be_kind_of Hash
245
+ end
246
+ end
247
+
248
+ describe '#create_server' do
249
+ let(:response_xml) { Fixtures['create_sql_database_server'] }
250
+ let(:method) { :post }
251
+ let(:request_path) { '/servers' }
252
+ let(:password) { 'User@123' }
253
+ let(:login) { 'ms_open_tech' }
254
+ let(:location) { 'West US' }
255
+
256
+ before do
257
+ SqlManagementHttpRequest.stubs(:new).with(
258
+ method,
259
+ request_path,
260
+ anything
261
+ ).returns(mock_request)
262
+
263
+ mock_request.stubs(:headers).returns(response_headers)
264
+ mock_request.expects(:call).returns(
265
+ Nokogiri::XML response_xml
266
+ ).at_least(0)
267
+ end
268
+
269
+ it 'create sql server' do
270
+ sql_server = subject.create_server(login, password, location)
271
+ sql_server.name.must_equal 'gxyfzrhx2c'
272
+ sql_server.administrator_login.must_equal login
273
+ sql_server.location.must_equal location
274
+ end
275
+ end
276
+
277
+ describe '#set_sql_server_firewall_rule' do
278
+ it 'create sql server' do
279
+ ip_range = { start_ip_address: '0.0.0.1', end_ip_address: '0.0.0.5' }
280
+ exception = assert_raises(RuntimeError) do
281
+ subject.set_sql_server_firewall_rule('zv2nfoah2t1', ip_range)
282
+ end
283
+ assert_match(/Missing parameter server_name or rule_name/i,
284
+ exception.message)
285
+ end
286
+ end
287
+ end
288
+ end