azure-multistorage 0.6.4

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 (287) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -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 +42 -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 +234 -0
  12. data/lib/azure/base_management/location.rb +27 -0
  13. data/lib/azure/base_management/management_http_request.rb +172 -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 +140 -0
  23. data/lib/azure/cloud_service_management/serialization.rb +117 -0
  24. data/lib/azure/core.rb +39 -0
  25. data/lib/azure/core/auth/authorizer.rb +36 -0
  26. data/lib/azure/core/auth/shared_key.rb +110 -0
  27. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  28. data/lib/azure/core/auth/signer.rb +48 -0
  29. data/lib/azure/core/configuration.rb +211 -0
  30. data/lib/azure/core/error.rb +22 -0
  31. data/lib/azure/core/filtered_service.rb +44 -0
  32. data/lib/azure/core/http/debug_filter.rb +36 -0
  33. data/lib/azure/core/http/http_error.rb +88 -0
  34. data/lib/azure/core/http/http_filter.rb +53 -0
  35. data/lib/azure/core/http/http_request.rb +157 -0
  36. data/lib/azure/core/http/http_response.rb +140 -0
  37. data/lib/azure/core/http/retry_policy.rb +74 -0
  38. data/lib/azure/core/http/signer_filter.rb +34 -0
  39. data/lib/azure/core/service.rb +63 -0
  40. data/lib/azure/core/signed_service.rb +43 -0
  41. data/lib/azure/core/utility.rb +190 -0
  42. data/lib/azure/queue/message.rb +30 -0
  43. data/lib/azure/queue/queue.rb +29 -0
  44. data/lib/azure/queue/queue_service.rb +568 -0
  45. data/lib/azure/queue/serialization.rb +106 -0
  46. data/lib/azure/service/access_policy.rb +26 -0
  47. data/lib/azure/service/enumeration_results.rb +21 -0
  48. data/lib/azure/service/logging.rb +32 -0
  49. data/lib/azure/service/metrics.rb +31 -0
  50. data/lib/azure/service/retention_policy.rb +25 -0
  51. data/lib/azure/service/serialization.rb +240 -0
  52. data/lib/azure/service/signed_identifier.rb +30 -0
  53. data/lib/azure/service/storage_service.rb +79 -0
  54. data/lib/azure/service/storage_service_properties.rb +32 -0
  55. data/lib/azure/service_bus/action.rb +21 -0
  56. data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
  57. data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
  58. data/lib/azure/service_bus/brokered_message.rb +124 -0
  59. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
  60. data/lib/azure/service_bus/correlation_filter.rb +45 -0
  61. data/lib/azure/service_bus/empty_rule_action.rb +30 -0
  62. data/lib/azure/service_bus/false_filter.rb +38 -0
  63. data/lib/azure/service_bus/filter.rb +21 -0
  64. data/lib/azure/service_bus/interval.rb +104 -0
  65. data/lib/azure/service_bus/queue.rb +230 -0
  66. data/lib/azure/service_bus/resource.rb +109 -0
  67. data/lib/azure/service_bus/rule.rb +98 -0
  68. data/lib/azure/service_bus/rule_aspect.rb +34 -0
  69. data/lib/azure/service_bus/serialization.rb +160 -0
  70. data/lib/azure/service_bus/service_bus_service.rb +829 -0
  71. data/lib/azure/service_bus/sql_filter.rb +50 -0
  72. data/lib/azure/service_bus/sql_rule_action.rb +50 -0
  73. data/lib/azure/service_bus/subscription.rb +184 -0
  74. data/lib/azure/service_bus/topic.rb +187 -0
  75. data/lib/azure/service_bus/true_filter.rb +38 -0
  76. data/lib/azure/sql_database_management/serialization.rb +111 -0
  77. data/lib/azure/sql_database_management/sql_database.rb +31 -0
  78. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
  79. data/lib/azure/storage_management/serialization.rb +184 -0
  80. data/lib/azure/storage_management/storage_account.rb +40 -0
  81. data/lib/azure/storage_management/storage_management_service.rb +166 -0
  82. data/lib/azure/table/auth/shared_key.rb +92 -0
  83. data/lib/azure/table/auth/shared_key_lite.rb +44 -0
  84. data/lib/azure/table/batch.rb +330 -0
  85. data/lib/azure/table/batch_response.rb +118 -0
  86. data/lib/azure/table/edmtype.rb +127 -0
  87. data/lib/azure/table/entity.rb +31 -0
  88. data/lib/azure/table/guid.rb +24 -0
  89. data/lib/azure/table/query.rb +112 -0
  90. data/lib/azure/table/serialization.rb +108 -0
  91. data/lib/azure/table/table_service.rb +561 -0
  92. data/lib/azure/version.rb +31 -0
  93. data/lib/azure/virtual_machine_image_management/serialization.rb +51 -0
  94. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
  95. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
  96. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -0
  97. data/lib/azure/virtual_machine_management/serialization.rb +436 -0
  98. data/lib/azure/virtual_machine_management/virtual_machine.rb +42 -0
  99. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +549 -0
  100. data/lib/azure/virtual_network_management/serialization.rb +186 -0
  101. data/lib/azure/virtual_network_management/virtual_network.rb +36 -0
  102. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
  103. data/test/fixtures/32px-fulls-black.jpg +0 -0
  104. data/test/fixtures/affinity_group.xml +33 -0
  105. data/test/fixtures/all_containers.xml +20 -0
  106. data/test/fixtures/all_tables.xml +22 -0
  107. data/test/fixtures/certificate.pem +21 -0
  108. data/test/fixtures/container_acl.xml +11 -0
  109. data/test/fixtures/create_sql_database_server.xml +2 -0
  110. data/test/fixtures/create_storage_desc_error.xml +5 -0
  111. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  112. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  113. data/test/fixtures/create_storage_full_error.xml +6 -0
  114. data/test/fixtures/create_storage_label_error.xml +5 -0
  115. data/test/fixtures/create_storage_location_error.xml +5 -0
  116. data/test/fixtures/create_storage_name_error.xml +6 -0
  117. data/test/fixtures/create_table_response_entry.xml +15 -0
  118. data/test/fixtures/delete_storage_container_error.xml +5 -0
  119. data/test/fixtures/delete_storage_error.xml +5 -0
  120. data/test/fixtures/deployment_error.xml +5 -0
  121. data/test/fixtures/empty_xml_file +0 -0
  122. data/test/fixtures/get_storage_account_error.xml +5 -0
  123. data/test/fixtures/get_storage_account_properties.xml +32 -0
  124. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  125. data/test/fixtures/http_error.xml +5 -0
  126. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  127. data/test/fixtures/list_affinity_groups.xml +22 -0
  128. data/test/fixtures/list_blobs.xml +121 -0
  129. data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
  130. data/test/fixtures/list_blocks_all.xml +23 -0
  131. data/test/fixtures/list_blocks_committed.xml +13 -0
  132. data/test/fixtures/list_cloud_services.xml +39 -0
  133. data/test/fixtures/list_containers.xml +38 -0
  134. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  135. data/test/fixtures/list_images.xml +110 -0
  136. data/test/fixtures/list_locations.xml +62 -0
  137. data/test/fixtures/list_page_ranges.xml +11 -0
  138. data/test/fixtures/list_sql_database.xml +36 -0
  139. data/test/fixtures/list_sql_server_firewall.xml +23 -0
  140. data/test/fixtures/list_storage_account_single.xml +25 -0
  141. data/test/fixtures/list_storage_accounts.xml +46 -0
  142. data/test/fixtures/list_virtual_networks.xml +92 -0
  143. data/test/fixtures/logging.xml +11 -0
  144. data/test/fixtures/management_certificate.pem +55 -0
  145. data/test/fixtures/messages.xml +12 -0
  146. data/test/fixtures/metrics.xml +10 -0
  147. data/test/fixtures/privatekey.key +28 -0
  148. data/test/fixtures/query_entities_empty_response.xml +7 -0
  149. data/test/fixtures/query_entities_response.xml +45 -0
  150. data/test/fixtures/queue_service_properties.xml +22 -0
  151. data/test/fixtures/queue_service_properties_original.xml +19 -0
  152. data/test/fixtures/queues.xml +16 -0
  153. data/test/fixtures/retention_policy.xml +5 -0
  154. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  155. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  156. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  157. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  158. data/test/fixtures/storage_service_properties.xml +23 -0
  159. data/test/fixtures/update_storage_account.xml +16 -0
  160. data/test/fixtures/update_storage_error.xml +5 -0
  161. data/test/fixtures/updated_storage_accounts.xml +53 -0
  162. data/test/fixtures/virtual_machine.xml +113 -0
  163. data/test/fixtures/windows_virtual_machine.xml +106 -0
  164. data/test/integration/affinity_group/Affinity_test.rb +55 -0
  165. data/test/integration/affinity_group/Create_Affinity_test.rb +63 -0
  166. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
  167. data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
  168. data/test/integration/affinity_group/Update_Affinity_test.rb +82 -0
  169. data/test/integration/blob/blob_gb18030_test.rb +199 -0
  170. data/test/integration/blob/blob_metadata_test.rb +75 -0
  171. data/test/integration/blob/blob_pages_test.rb +119 -0
  172. data/test/integration/blob/blob_properties_test.rb +77 -0
  173. data/test/integration/blob/block_blob_test.rb +254 -0
  174. data/test/integration/blob/container/container_acl_test.rb +69 -0
  175. data/test/integration/blob/container/container_metadata_test.rb +50 -0
  176. data/test/integration/blob/container/create_container_test.rb +60 -0
  177. data/test/integration/blob/container/delete_container_test.rb +39 -0
  178. data/test/integration/blob/container/get_container_properties_test.rb +48 -0
  179. data/test/integration/blob/container/list_containers_test.rb +79 -0
  180. data/test/integration/blob/container/root_container_test.rb +54 -0
  181. data/test/integration/blob/copy_blob_test.rb +113 -0
  182. data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
  183. data/test/integration/blob/create_page_blob_test.rb +83 -0
  184. data/test/integration/blob/delete_blob_test.rb +159 -0
  185. data/test/integration/blob/get_blob_test.rb +65 -0
  186. data/test/integration/blob/informative_errors_test.rb +39 -0
  187. data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
  188. data/test/integration/blob/lease/break_lease_test.rb +40 -0
  189. data/test/integration/blob/lease/release_lease_test.rb +40 -0
  190. data/test/integration/blob/lease/renew_lease_test.rb +42 -0
  191. data/test/integration/blob/list_blobs_test.rb +113 -0
  192. data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
  193. data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
  194. data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
  195. data/test/integration/database/create_sql_server_test.rb +53 -0
  196. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
  197. data/test/integration/database/delete_sql_server_test.rb +58 -0
  198. data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
  199. data/test/integration/database/list_sql_servers_test.rb +44 -0
  200. data/test/integration/database/reset_password_sql_server_test.rb +55 -0
  201. data/test/integration/location/Location_List_test.rb +39 -0
  202. data/test/integration/queue/clear_messages_test.rb +42 -0
  203. data/test/integration/queue/create_message_test.rb +75 -0
  204. data/test/integration/queue/create_queue_test.rb +50 -0
  205. data/test/integration/queue/delete_message_test.rb +67 -0
  206. data/test/integration/queue/delete_queue_test.rb +45 -0
  207. data/test/integration/queue/informative_errors_test.rb +42 -0
  208. data/test/integration/queue/list_messages_encoded_test.rb +79 -0
  209. data/test/integration/queue/list_messages_test.rb +79 -0
  210. data/test/integration/queue/list_queues_test.rb +44 -0
  211. data/test/integration/queue/peek_messages_test.rb +59 -0
  212. data/test/integration/queue/queue_gb18030_test.rb +131 -0
  213. data/test/integration/queue/queue_metadata_test.rb +40 -0
  214. data/test/integration/queue/update_message_test.rb +74 -0
  215. data/test/integration/service_bus/informative_errors_test.rb +37 -0
  216. data/test/integration/service_bus/queues_scenario_test.rb +200 -0
  217. data/test/integration/service_bus/queues_test.rb +266 -0
  218. data/test/integration/service_bus/rules_test.rb +145 -0
  219. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
  220. data/test/integration/service_bus/scenario_test.rb +101 -0
  221. data/test/integration/service_bus/subscriptions_test.rb +211 -0
  222. data/test/integration/service_bus/topics_scenario_test.rb +406 -0
  223. data/test/integration/service_bus/topics_test.rb +129 -0
  224. data/test/integration/storage_management/storage_management_test.rb +160 -0
  225. data/test/integration/table/create_table_test.rb +36 -0
  226. data/test/integration/table/delete_entity_batch_test.rb +107 -0
  227. data/test/integration/table/delete_entity_test.rb +94 -0
  228. data/test/integration/table/delete_table_test.rb +40 -0
  229. data/test/integration/table/get_table_test.rb +37 -0
  230. data/test/integration/table/informative_errors_test.rb +39 -0
  231. data/test/integration/table/insert_entity_batch_test.rb +100 -0
  232. data/test/integration/table/insert_entity_test.rb +88 -0
  233. data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
  234. data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
  235. data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
  236. data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
  237. data/test/integration/table/merge_entity_batch_test.rb +128 -0
  238. data/test/integration/table/merge_entity_test.rb +113 -0
  239. data/test/integration/table/query_entities_test.rb +195 -0
  240. data/test/integration/table/query_tables_test.rb +43 -0
  241. data/test/integration/table/query_test.rb +251 -0
  242. data/test/integration/table/table_acl_test.rb +52 -0
  243. data/test/integration/table/table_gb18030_test.rb +355 -0
  244. data/test/integration/table/update_entity_batch_test.rb +149 -0
  245. data/test/integration/table/update_entity_test.rb +131 -0
  246. data/test/integration/test_helper.rb +42 -0
  247. data/test/integration/vm/VM_Create_test.rb +260 -0
  248. data/test/integration/vm/VM_Delete_test.rb +55 -0
  249. data/test/integration/vm/VM_Operations_test.rb +173 -0
  250. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
  251. data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
  252. data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -0
  253. data/test/integration/vnet/Virtual_Network_list_test.rb +53 -0
  254. data/test/support/env.rb +19 -0
  255. data/test/support/fixtures.rb +36 -0
  256. data/test/support/name_generator.rb +160 -0
  257. data/test/support/stubs.rb +42 -0
  258. data/test/support/virtual_machine_name_generator.rb +102 -0
  259. data/test/support/virtual_network_helper.rb +73 -0
  260. data/test/test_helper.rb +53 -0
  261. data/test/unit/affinity_group/affinity_group_test.rb +192 -0
  262. data/test/unit/affinity_group/serialization_test.rb +88 -0
  263. data/test/unit/base_management/location_test.rb +57 -0
  264. data/test/unit/blob/blob_service_test.rb +1947 -0
  265. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -0
  266. data/test/unit/cloud_service_management/serialization_test.rb +169 -0
  267. data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
  268. data/test/unit/core/auth/shared_key_test.rb +58 -0
  269. data/test/unit/core/auth/signer_test.rb +30 -0
  270. data/test/unit/core/http/http_error_test.rb +57 -0
  271. data/test/unit/core/http/http_request_test.rb +66 -0
  272. data/test/unit/core/http/http_response_test.rb +45 -0
  273. data/test/unit/core/http/retry_policy_test.rb +23 -0
  274. data/test/unit/database/serialization_test.rb +97 -0
  275. data/test/unit/database/sql_database_server_service_test.rb +288 -0
  276. data/test/unit/service/serialization_test.rb +502 -0
  277. data/test/unit/service/storage_service_test.rb +291 -0
  278. data/test/unit/storage_management/serialization_test.rb +232 -0
  279. data/test/unit/storage_management/storage_management_service_test.rb +261 -0
  280. data/test/unit/table/edmtype_test.rb +108 -0
  281. data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -0
  282. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -0
  283. data/test/unit/virtual_machine_management/serialization_test.rb +247 -0
  284. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -0
  285. data/test/unit/vnet/serialization_test.rb +187 -0
  286. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
  287. metadata +456 -0
@@ -0,0 +1,94 @@
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::CloudServiceManagementService do
18
+
19
+ subject { Azure::CloudServiceManagementService.new }
20
+ let(:request_path) { '/services/hostedservices' }
21
+ let(:cloud_services_xml) { Fixtures['list_cloud_services'] }
22
+ let(:method) { :get }
23
+ let(:mock_request) { mock }
24
+ let(:response) do
25
+ response = mock
26
+ response.stubs(:body).returns(cloud_services_xml)
27
+ response
28
+ end
29
+ let(:response_body) { Nokogiri::XML response.body }
30
+
31
+ before do
32
+ Loggerx.expects(:puts).returns(nil).at_least(0)
33
+ end
34
+
35
+ describe '#list_cloud_services' do
36
+ before do
37
+ ManagementHttpRequest.stubs(:new).with(method, request_path, nil).returns(mock_request)
38
+ mock_request.expects(:call).returns(response_body)
39
+ end
40
+
41
+ it 'assembles a URI for the request' do
42
+ subject.list_cloud_services
43
+ end
44
+
45
+ it 'sets the properties of the CloudService instance' do
46
+ cloud_service = subject.list_cloud_services.first
47
+ cloud_service.name.must_equal 'cloud-service-1'
48
+ end
49
+
50
+ it 'returns a list of cloud services for the subscription' do
51
+ results = subject.list_cloud_services
52
+ results.must_be_kind_of Array
53
+ results.length.must_equal 2
54
+ results.first.must_be_kind_of Azure::CloudServiceManagement::CloudService
55
+ end
56
+ end
57
+
58
+ describe '#get_cloud_service' do
59
+ before do
60
+ ManagementHttpRequest.stubs(:new).with(method, request_path, nil).returns(mock_request)
61
+ mock_request.expects(:call).returns(response_body)
62
+ end
63
+
64
+ it 'assembles a URI for the request' do
65
+ subject.get_cloud_service 'cloud-service-1'
66
+ end
67
+
68
+ it 'returns true if found cloud service with given name' do
69
+ result = subject.get_cloud_service 'cloud-service-1'
70
+ result.must_equal true
71
+ end
72
+
73
+ it "returns false if cloud service with given name doesn't exists" do
74
+ result = subject.get_cloud_service 'cloud-service-3'
75
+ result.must_equal false
76
+ end
77
+ end
78
+
79
+ describe '#create_cloud_service' do
80
+
81
+ it 'Create cloud service return message if cloud service exists of given name.' do
82
+ ManagementHttpRequest.any_instance.expects(:call).returns response_body
83
+ msg = subject.create_cloud_service 'cloud-service-1'
84
+ assert_match(/^Cloud service cloud-service-1 already exists*/, msg)
85
+ end
86
+
87
+ it "Create cloud service if cloud service doesn't exists of given name." do
88
+ Azure::CloudServiceManagementService.any_instance.stubs(:get_cloud_service).with('cloud-service-3').returns(false)
89
+ ManagementHttpRequest.any_instance.expects(:call).returns nil
90
+ subject.create_cloud_service 'cloud-service-3'
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,169 @@
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::CloudServiceManagement::Serialization do
18
+ subject { Azure::CloudServiceManagement::Serialization }
19
+
20
+ let(:cloud_services_from_xml) { Fixtures['list_cloud_services'] }
21
+
22
+ describe '#cloud_services_from_xml' do
23
+ let (:cloud_services_xml) { Nokogiri::XML(cloud_services_from_xml) }
24
+ it 'accepts an XML string' do
25
+ subject.cloud_services_from_xml Nokogiri::XML(cloud_services_from_xml)
26
+ end
27
+
28
+ it 'returns an Array of CloudService instances' do
29
+ results = subject.cloud_services_from_xml(cloud_services_xml)
30
+ results.must_be_kind_of Array
31
+ results[0].must_be_kind_of(Azure::CloudServiceManagement::CloudService)
32
+ results.count.must_equal 2
33
+ end
34
+
35
+ it 'populates all properties for a cloud service' do
36
+ results = subject.cloud_services_from_xml(cloud_services_xml)
37
+ cloud = results.first
38
+ cloud_xml = cloud_services_xml.css('HostedServices HostedService').first
39
+ cloud.url.must_equal(cloud_xml.css('Url').text)
40
+ cloud.name.must_equal(cloud_xml.css('ServiceName').text)
41
+ cloud.description.must_equal(cloud_xml.css('Description').text)
42
+ cloud.location.must_equal(cloud_xml.css('Location').text)
43
+ cloud.label.must_equal(Base64.decode64(cloud_xml.css('Label').text))
44
+ cloud.status.must_equal(cloud_xml.css('Status').text)
45
+ cloud.date_created.must_equal(cloud_xml.css('DateCreated').text)
46
+ cloud.date_modified.must_equal(cloud_xml.css('DateLastModified').text)
47
+ cloud.extended_properties.size.must_equal(
48
+ cloud_xml.css('ExtendedProperties ExtendedProperty').size
49
+ )
50
+ cloud_xml.css('ExtendedProperties ExtendedProperty').each do |p|
51
+ cloud.extended_properties[p.css('Name').text].must_equal(
52
+ p.css('Value').text
53
+ )
54
+ end
55
+ cloud.default_winrm_certificate_thumbprint.must_equal(
56
+ cloud_xml.css('DefaultWinRMCertificateThumbprint').text
57
+ )
58
+ end
59
+ end
60
+
61
+ describe '#cloud_services_to_xml' do
62
+ let(:cloud_service_name) { 'cloud-service' }
63
+
64
+ it 'accepts an name and options hash' do
65
+ subject.cloud_services_to_xml cloud_service_name
66
+ end
67
+
68
+ it 'uses name for label if label not provided' do
69
+ results = subject.cloud_services_to_xml(
70
+ cloud_service_name,
71
+
72
+ location: 'East Asia'
73
+
74
+ )
75
+
76
+ doc = Nokogiri::XML(results)
77
+ Base64.decode64(doc.css('Label').text).must_equal(cloud_service_name)
78
+ end
79
+
80
+ it 'uses label when label is provided' do
81
+ results = subject.cloud_services_to_xml(
82
+ cloud_service_name,
83
+
84
+ location: 'East Asia',
85
+ label: 'My Label'
86
+
87
+ )
88
+
89
+ doc = Nokogiri::XML(results)
90
+ Base64.decode64(doc.css('Label').text).must_equal('My Label')
91
+ end
92
+
93
+ it 'serializes the argument to xml' do
94
+ results = subject.cloud_services_to_xml(
95
+ cloud_service_name, location: 'West US'
96
+ )
97
+ results.must_be_kind_of String
98
+ doc = Nokogiri::XML results
99
+ doc.css('ServiceName').text.must_equal cloud_service_name
100
+ doc.css('Location').text.must_equal 'West US'
101
+ end
102
+
103
+ it 'uses affinity_group if provided and ignores location' do
104
+ results = subject.cloud_services_to_xml(
105
+ cloud_service_name,
106
+
107
+ affinity_group_name: 'my-affinity-group',
108
+ location: 'West US'
109
+
110
+ )
111
+ results.must_be_kind_of String
112
+ doc = Nokogiri::XML results
113
+ doc.css('ServiceName').text.must_equal(cloud_service_name)
114
+ doc.css('AffinityGroup').wont_be_empty
115
+ doc.css('AffinityGroup').text.must_equal('my-affinity-group')
116
+ doc.css('Location').must_be_empty
117
+ end
118
+
119
+ it 'uses location when affinity group not provided' do
120
+ results = subject.cloud_services_to_xml(
121
+ cloud_service_name,
122
+
123
+ location: 'East Asia'
124
+
125
+ )
126
+
127
+ doc = Nokogiri::XML(results)
128
+ doc.css('AffinityGroup').must_be_empty
129
+ doc.css('Location').wont_be_empty
130
+ doc.css('Location').text.must_equal('East Asia')
131
+ end
132
+
133
+ it 'serializes extended properties when provided' do
134
+ xtended_props = {
135
+ prop_1_name: 'prop_1_value',
136
+ prop_2_name: 'prop_2_value'
137
+ }
138
+ results = subject.cloud_services_to_xml(
139
+ cloud_service_name,
140
+
141
+ extended_properties: xtended_props
142
+
143
+ )
144
+
145
+ doc = Nokogiri::XML(results)
146
+ props_xml = doc.css('ExtendedProperties ExtendedProperty')
147
+ props_xml.wont_be_empty
148
+ props_xml.size.must_equal(2)
149
+ props_xml.css('Name').first.text.must_equal('prop_1_name')
150
+ props_xml.css('Value').first.text.must_equal(
151
+ xtended_props[:"#{props_xml.css('Name').first.text}"]
152
+ )
153
+ props_xml.css('Name').last.text.must_equal('prop_2_name')
154
+ props_xml.css('Value').last.text.must_equal(
155
+ xtended_props[:"#{props_xml.css('Name').last.text}"]
156
+ )
157
+ end
158
+
159
+ it 'serializes the options hash to xml' do
160
+ results = subject.cloud_services_to_xml(
161
+ cloud_service_name,
162
+ location: 'East US'
163
+ )
164
+ doc = Nokogiri::XML results
165
+ doc.css('Location').text.must_equal 'East US'
166
+ results.must_be_kind_of String
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,51 @@
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_lite"
17
+
18
+ describe Azure::Core::Auth::SharedKeyLite do
19
+ subject { Azure::Core::Auth::SharedKeyLite.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-MD5"=> "foo",
26
+ "Content-Type"=> "foo",
27
+ "Date"=> "foo"
28
+ }
29
+ end
30
+ let(:headers_without_date) {
31
+ headers_without_date = headers.clone
32
+ headers_without_date.delete "Date"
33
+ headers_without_date
34
+ }
35
+
36
+ describe "sign" do
37
+ it "creates a signature from the provided HTTP method, uri, and reduced set of standard headers" do
38
+ subject.sign(method, uri, headers).must_equal "account-name:vVFnj/+27JFABZgpt5H8g/JVU2HuWFnjv5aeUIxQvBE="
39
+ end
40
+
41
+ it "ignores standard headers other than Content-MD5, Content-Type, and Date" do
42
+ subject.sign(method, uri, headers.merge({"Content-Encoding"=> "foo"})).must_equal "account-name:vVFnj/+27JFABZgpt5H8g/JVU2HuWFnjv5aeUIxQvBE="
43
+ end
44
+
45
+ it "throws IndexError when there is no Date header" do
46
+ assert_raises IndexError do
47
+ subject.sign(method, uri, headers_without_date)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -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