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,131 @@
1
+ #-------------------------------------------------------------------------
2
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #--------------------------------------------------------------------------
15
+ require "integration/test_helper"
16
+ require "azure/table/table_service"
17
+ require "azure/core/http/http_error"
18
+
19
+ describe Azure::Table::TableService do
20
+ describe "#update_entity" do
21
+ subject { Azure::Table::TableService.new }
22
+ let(:table_name){ TableNameHelper.name }
23
+
24
+ let(:entity_properties){
25
+ {
26
+ "PartitionKey" => "testingpartition",
27
+ "RowKey" => "abcd1234_existing",
28
+ "CustomStringProperty" => "CustomPropertyValue",
29
+ "CustomIntegerProperty" => 37,
30
+ "CustomBooleanProperty" => true,
31
+ "CustomDateProperty" => Time.now
32
+ }
33
+ }
34
+
35
+ before {
36
+ subject.create_table table_name
37
+ subject.insert_entity table_name, entity_properties
38
+ @existing_etag = ""
39
+
40
+ exists = false
41
+ begin
42
+ existing = subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
43
+ @existing_etag = existing.etag
44
+ exists = true
45
+ rescue
46
+ end
47
+
48
+ assert exists, "cannot verify existing record"
49
+ }
50
+
51
+ after { TableNameHelper.clean }
52
+
53
+ it "updates an existing entity, removing any properties not included in the update operation" do
54
+ etag = subject.update_entity table_name, {
55
+ "PartitionKey" => entity_properties["PartitionKey"],
56
+ "RowKey" => entity_properties["RowKey"],
57
+ "NewCustomProperty" => "NewCustomValue"
58
+ }
59
+
60
+ etag.must_be_kind_of String
61
+ etag.wont_equal @existing_etag
62
+
63
+ result = subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
64
+
65
+ result.must_be_kind_of Azure::Table::Entity
66
+ result.table.must_equal table_name
67
+
68
+ # removed all existing props
69
+ entity_properties.each { |k,v|
70
+ result.properties.wont_include k unless k == "PartitionKey" || k == "RowKey"
71
+ }
72
+
73
+ # and has the new one
74
+ result.properties["NewCustomProperty"].must_equal "NewCustomValue"
75
+ end
76
+
77
+ it "updates an existing entity, removing any properties not included in the update operation and adding nil one" do
78
+ etag = subject.update_entity table_name, {
79
+ "PartitionKey" => entity_properties["PartitionKey"],
80
+ "RowKey" => entity_properties["RowKey"],
81
+ "NewCustomProperty" => nil
82
+ }
83
+
84
+ etag.must_be_kind_of String
85
+ etag.wont_equal @existing_etag
86
+
87
+ result = subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
88
+
89
+ result.must_be_kind_of Azure::Table::Entity
90
+ result.table.must_equal table_name
91
+
92
+ # removed all existing props
93
+ entity_properties.each { |k,v|
94
+ result.properties.wont_include k unless k == "PartitionKey" || k == "RowKey"
95
+ }
96
+
97
+ # and has the new one
98
+ result.properties["NewCustomProperty"].must_equal nil
99
+ end
100
+
101
+ it "errors on a non-existing row key" do
102
+ assert_raises(Azure::Core::Http::HTTPError) do
103
+ entity = entity_properties.dup
104
+ entity["RowKey"] = "this-row-key-does-not-exist"
105
+ subject.update_entity table_name, entity
106
+ end
107
+ end
108
+
109
+ it "errors on an invalid table name" do
110
+ assert_raises(Azure::Core::Http::HTTPError) do
111
+ subject.update_entity "this_table.cannot-exist!", entity_properties
112
+ end
113
+ end
114
+
115
+ it "errors on an invalid partition key" do
116
+ assert_raises(Azure::Core::Http::HTTPError) do
117
+ entity = entity_properties.dup
118
+ entity["PartitionKey"] = "this/partition_key#is?invalid"
119
+ subject.update_entity table_name, entity
120
+ end
121
+ end
122
+
123
+ it "errors on an invalid row key" do
124
+ assert_raises(Azure::Core::Http::HTTPError) do
125
+ entity = entity_properties.dup
126
+ entity["RowKey"] = "this/row_key#is?invalid"
127
+ subject.update_entity table_name, entity
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,42 @@
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"
17
+
18
+ Azure::Core.configure do |config|
19
+ config.storage_access_key = ENV.fetch("AZURE_STORAGE_ACCESS_KEY")
20
+ config.storage_account_name = ENV.fetch("AZURE_STORAGE_ACCOUNT")
21
+ # config.storage_table_host = ENV.fetch("AZURE_STORAGE_TABLE_HOST")
22
+ # config.storage_blob_host = ENV.fetch("AZURE_STORAGE_BLOB_HOST")
23
+ # config.storage_queue_host = ENV.fetch("AZURE_STORAGE_QUEUE_HOST")
24
+
25
+ config.sb_namespace = ENV.fetch("AZURE_SERVICEBUS_NAMESPACE")
26
+ config.sb_access_key = ENV.fetch("AZURE_SERVICEBUS_ACCESS_KEY")
27
+ # config.sb_issuer = ENV.fetch("AZURE_SERVICEBUS_ISSUER")
28
+ config.management_certificate = ENV.fetch('AZURE_MANAGEMENT_CERTIFICATE')
29
+ # config.management_endpoint = ENV.fetch("AZURE_MANAGEMENT_ENDPOINT")
30
+ config.subscription_id = ENV.fetch("AZURE_SUBSCRIPTION_ID")
31
+ end
32
+
33
+ StorageAccountName = random_string('storagetest',10)
34
+ Images = Azure::VirtualMachineImageManagementService.new.list_virtual_machine_images
35
+ LinuxImage = Images.select{|image| image.os_type == 'Linux'}.first
36
+ WindowsImage = Images.select{|image| image.os_type == 'Windows'}.first
37
+ WindowsImageLocation = WindowsImage.locations.split(';').first
38
+ LinuxImageLocation = LinuxImage.locations.split(';').first
39
+
40
+ MiniTest::Unit.after_tests {
41
+ VirtualMachineNameGenerator.cleanup
42
+ }
@@ -0,0 +1,260 @@
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 'integration/test_helper'
16
+
17
+ describe Azure::VirtualMachineManagementService do
18
+ subject { Azure::VirtualMachineManagementService.new }
19
+ let(:cloud_service) { Azure::CloudServiceManagementService.new }
20
+ let(:names) { VirtualMachineNameHelper.name }
21
+ let(:virtual_machine_name) { names.first }
22
+ let(:cloud_service_name) { names.last }
23
+ let(:storage_account_name) { StorageAccountName }
24
+ let(:username) { 'adminuser' }
25
+ let(:password) { 'Admin123' }
26
+ let(:certificate) { Fixtures['certificate.pem'] }
27
+ let(:private_key) { Fixtures['privatekey.key'] }
28
+
29
+ let(:params)do
30
+ {
31
+ vm_name: virtual_machine_name,
32
+ vm_user: username,
33
+ image: LinuxImage.name,
34
+ password: password,
35
+ location: LinuxImageLocation
36
+ }
37
+ end
38
+
39
+ let(:windows_params)do
40
+ {
41
+ vm_name: virtual_machine_name,
42
+ vm_user: username,
43
+ image: WindowsImage.name,
44
+ password: password,
45
+ location: WindowsImageLocation
46
+ }
47
+ end
48
+
49
+ let(:options)do
50
+ {
51
+ storage_account_name: storage_account_name,
52
+ cloud_service_name: cloud_service_name,
53
+ vm_size: 'Basic_A0'
54
+ }
55
+ end
56
+
57
+ let(:default_options) do
58
+ {
59
+ storage_account_name: storage_account_name,
60
+ cloud_service_name: cloud_service_name
61
+ }
62
+ end
63
+
64
+ before do
65
+ Loggerx.expects(:puts).returns(nil).at_least(0)
66
+ end
67
+
68
+ describe '#deployment' do
69
+
70
+ describe '#add_role' do
71
+ before do
72
+ @vm_obj = subject.create_virtual_machine(params, options)
73
+ params[:cloud_service_name] = options[:cloud_service_name]
74
+ options.delete(:cloud_service_name)
75
+ params.delete(:location)
76
+ params[:vm_name] = "add-#{virtual_machine_name}"
77
+ sleep 30
78
+ end
79
+
80
+ it 'should add role to existing storage account and cloud service' do
81
+ vm = subject.add_role(params, options)
82
+ vm.cloud_service_name.must_equal params[:cloud_service_name]
83
+ vm.vm_name.must_equal params[:vm_name]
84
+ vm.deployment_name.must_equal @vm_obj.deployment_name
85
+ vm.os_type.must_equal 'Linux'
86
+ end
87
+
88
+ it 'should add role and create new storage account' do
89
+ params[:vm_name] = "Add-storage-#{virtual_machine_name}"
90
+ vm = subject.add_role(params)
91
+ vm.cloud_service_name.must_equal params[:cloud_service_name]
92
+ vm.vm_name.must_equal params[:vm_name].downcase
93
+ vm.deployment_name.must_equal @vm_obj.deployment_name
94
+ end
95
+ end
96
+
97
+ describe '#virtual_network' do
98
+ before do
99
+ options[:virtual_network_name] = 'v-net'
100
+ affinity_gorup_name = random_string('affinity-group-', 10)
101
+ Azure::BaseManagementService.new.create_affinity_group(
102
+ affinity_gorup_name,
103
+ params[:location],
104
+ 'AG1'
105
+ ) rescue nil
106
+ vnet_service = Azure::VirtualNetworkManagementService
107
+ vnet_service.new.set_network_configuration(
108
+ options[:virtual_network_name],
109
+ affinity_gorup_name,
110
+ ['172.16.0.0/12']
111
+ ) rescue nil
112
+ subject.create_virtual_machine(params, options)
113
+ end
114
+
115
+ it 'should provision virtual machine in a existing virtual network' do
116
+ virtual_machine = subject.get_virtual_machine(virtual_machine_name, cloud_service_name)
117
+ virtual_machine.must_be_kind_of Azure::VirtualMachineManagement::VirtualMachine
118
+ virtual_machine.vm_name.must_equal virtual_machine_name
119
+ virtual_machine.virtual_network_name.must_equal options[:virtual_network_name]
120
+ end
121
+ end
122
+
123
+ it 'should set options hash with valid cloud_service_name, deployment_name, storage_account_name and virtual network' do
124
+ csn = options[:cloud_service_name]
125
+ options[:availability_set_name] = 'aval-set-test'
126
+ vm = subject.create_virtual_machine(params, options)
127
+ vm.must_be_kind_of Azure::VirtualMachineManagement::VirtualMachine
128
+ vm.cloud_service_name.wont_be_nil
129
+ vm.vm_name.must_equal virtual_machine_name
130
+ vm.deployment_name.wont_be_nil
131
+ vm.deployment_name.must_equal vm.cloud_service_name
132
+ vm.os_type.must_equal 'Linux'
133
+ vm.role_size.must_equal 'Basic_A0'
134
+ vm.availability_set_name.must_equal 'aval-set-test'
135
+ options[:storage_account_name].wont_be_nil
136
+ assert_match(/^#{params[:vm_name] + '-service'}*/, csn)
137
+ end
138
+
139
+ it 'should creates http and https enabled winrm virtual machine without certificate.' do
140
+ default_options.merge!(winrm_transport: %w(https http))
141
+ result = subject.create_virtual_machine(windows_params, default_options)
142
+ result.must_be_kind_of Azure::VirtualMachineManagement::VirtualMachine
143
+ assert_equal(result.os_type, 'Windows')
144
+ tcp_endpoints_names = []
145
+ result.tcp_endpoints.each do |tcp_endpoint|
146
+ tcp_endpoints_names << tcp_endpoint[:name]
147
+ end
148
+ tcp_endpoints_names.must_include 'PowerShell'
149
+ tcp_endpoints_names.must_include 'WinRm-Http'
150
+ sleep 30
151
+ end
152
+
153
+ it 'should creates https enabled winrm virtual machine using certificate.' do
154
+ default_options.merge!(
155
+ winrm_transport: ['https'],
156
+ private_key_file: private_key,
157
+ certificate_file: certificate
158
+ )
159
+ result = subject.create_virtual_machine(windows_params, default_options)
160
+ result.must_be_kind_of Azure::VirtualMachineManagement::VirtualMachine
161
+ assert_equal(result.os_type, 'Windows')
162
+ tcp_endpoints_names = []
163
+ result.tcp_endpoints.each do |tcp_endpoint|
164
+ tcp_endpoints_names << tcp_endpoint[:name]
165
+ end
166
+ tcp_endpoints_names.must_include 'PowerShell'
167
+ end
168
+
169
+ it 'should creates windows virtual machine without winrm.' do
170
+ default_options.merge!(winrm_transport: ['none'])
171
+ result = subject.create_virtual_machine(windows_params, default_options)
172
+ result.must_be_kind_of Azure::VirtualMachineManagement::VirtualMachine
173
+ assert_equal(result.os_type, 'Windows')
174
+ tcp_endpoints_names = []
175
+ result.tcp_endpoints.each do |tcp_endpoint|
176
+ tcp_endpoints_names << tcp_endpoint['Name']
177
+ end
178
+ assert !tcp_endpoints_names.include?('PowerShell')
179
+ assert !tcp_endpoints_names.include?('WinRm-Http')
180
+ end
181
+
182
+ it 'created linux virtual machine should be accessible using password and certificate' do
183
+ default_options.merge!(
184
+ private_key_file: private_key,
185
+ certificate_file: certificate
186
+ )
187
+ result = subject.create_virtual_machine(params, default_options)
188
+ result.must_be_kind_of Azure::VirtualMachineManagement::VirtualMachine
189
+ assert_equal(result.os_type, 'Linux')
190
+ sleep 30
191
+ end
192
+
193
+ it 'throws error as port value is beyond or less than actual range' do
194
+ default_options.merge!(tcp_endpoints: '80,166535:166535')
195
+ msg = subject.create_virtual_machine(params, default_options)
196
+ error_msg = "invalid. Allowed values are 'a number between 1 to 65535'."
197
+ assert_match(/#{error_msg}/i, msg)
198
+
199
+ default_options.merge!(tcp_endpoints: '80,0:0')
200
+ msg = subject.create_virtual_machine(params, default_options)
201
+ assert_match(/#{error_msg}/i, msg)
202
+ cloud_service.delete_cloud_service(cloud_service_name)
203
+ end
204
+
205
+ it 'throws error when multiple VMs created under same DNS' do
206
+ subject.create_virtual_machine(params, default_options)
207
+ msg = subject.create_virtual_machine(windows_params, default_options)
208
+ error_msg = 'The specified deployment slot Production is occupied.'
209
+ assert_match(/#{error_msg}/i, msg)
210
+ end
211
+
212
+ it 'throws SystemExit error when vm_user not provided' do
213
+ params.delete(:vm_user)
214
+ msg = subject.create_virtual_machine(params)
215
+ assert_match(/You did not provide a valid 'vm_user' value./i, msg)
216
+ end
217
+
218
+ it 'throws Runtime error when image not provide' do
219
+ params.delete(:image)
220
+ msg = subject.create_virtual_machine(params)
221
+ assert_match(/The virtual machine image source is not valid/i, msg)
222
+ end
223
+
224
+ it 'error thrown when invalid storage account name is given' do
225
+ default_options.merge!(storage_account_name: 'storageuse_91')
226
+ msg = subject.create_virtual_machine(params, default_options)
227
+ assert_match(/The name is not a valid storage account name./i, msg)
228
+ cloud_service.delete_cloud_service(cloud_service_name)
229
+ end
230
+
231
+ it 'error thrown when invalid cloud name is given' do
232
+ default_options.merge!(cloud_service_name: 'cloud-server-test_91')
233
+ msg = subject.create_virtual_machine(params, default_options)
234
+ assert_match(/The hosted service name is invalid/i, msg)
235
+ end
236
+
237
+ it 'error thrown when invalid deployment name provided' do
238
+ default_options.merge!(deployment_name: 'instance_B')
239
+ msg = subject.create_virtual_machine(params, default_options)
240
+ assert_match(/The deployment name is invalid/i, msg)
241
+ cloud_service.delete_cloud_service(cloud_service_name)
242
+ end
243
+
244
+ it 'error thrown when invalid VM name given for Windows OS' do
245
+ windows_params.merge!(vm_name: 'MSServerInstnce01')
246
+ msg = subject.create_virtual_machine(windows_params, default_options)
247
+ error_msg = 'The computer name cannot be more than 15 characters long'
248
+ assert_match(/#{error_msg}/i, msg)
249
+ cloud_service.delete_cloud_service(cloud_service_name)
250
+ end
251
+
252
+ it 'error thrown when blank password for Windows OS provided' do
253
+ windows_params.delete(:password)
254
+ msg = subject.create_virtual_machine(windows_params, default_options)
255
+ assert_match(/You did not provide a valid 'password' value./i, msg)
256
+ end
257
+
258
+ end # deployment
259
+
260
+ end
@@ -0,0 +1,55 @@
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 'integration/test_helper'
16
+
17
+ describe Azure::VirtualMachineManagementService do
18
+
19
+ subject { Azure::VirtualMachineManagementService.new }
20
+ let(:names) { VirtualMachineNameHelper.name }
21
+ let(:virtual_machine_name) { names.first }
22
+ let(:csn) { names.last }
23
+ let(:username) { 'admin' }
24
+ before do
25
+ Loggerx.expects(:puts).at_least_once.returns(nil)
26
+ params = {
27
+ vm_name: virtual_machine_name,
28
+ vm_user: 'user',
29
+ image: LinuxImage.name,
30
+ password: 'User123',
31
+ location: LinuxImageLocation
32
+ }
33
+ options = {
34
+ storage_account_name: StorageAccountName,
35
+ cloud_service_name: csn,
36
+ }
37
+ subject.create_virtual_machine(params, options)
38
+ sleep 60
39
+ end
40
+
41
+ describe '#delete_virtual_machine' do
42
+
43
+ it 'delete existing virtual machine and cloud service' do
44
+ subject.delete_virtual_machine(virtual_machine_name, csn)
45
+ sleep 60
46
+ vm = subject.get_virtual_machine(virtual_machine_name, csn)
47
+ vm.must_be_nil
48
+ cloud_service = Azure::CloudServiceManagementService.new
49
+ cloud_presence = cloud_service.get_cloud_service(csn)
50
+ cloud_presence.must_equal false
51
+ end
52
+
53
+ end
54
+
55
+ end