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,152 @@
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/batch"
17
+ require "azure/table/table_service"
18
+ require "azure/core/http/http_error"
19
+
20
+ describe Azure::Table::TableService do
21
+ describe "#insert_or_replace_entity_batch" do
22
+ subject { Azure::Table::TableService.new }
23
+ let(:table_name){ TableNameHelper.name }
24
+
25
+ let(:entity_properties) {
26
+ {
27
+ "PartitionKey" => "testingpartition",
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
+ }
38
+
39
+ after { TableNameHelper.clean }
40
+
41
+ it "creates an entity if it does not already exist" do
42
+ entity = entity_properties.dup
43
+ entity["RowKey"] = "abcd1234"
44
+
45
+ does_not_exist = true
46
+ begin
47
+ subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
48
+ does_not_exist = false
49
+ rescue
50
+ end
51
+
52
+ assert does_not_exist
53
+
54
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
55
+ batch.insert_or_replace entity["RowKey"], entity
56
+ etags = subject.execute_batch batch
57
+
58
+ etags[0].must_be_kind_of String
59
+
60
+ result = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
61
+
62
+ result.must_be_kind_of Azure::Table::Entity
63
+ result.table.must_equal table_name
64
+ result.etag.must_equal etags[0]
65
+
66
+ entity.each { |k,v|
67
+ unless entity[k].class == Time
68
+ result.properties[k].must_equal entity[k]
69
+ else
70
+ result.properties[k].to_i.must_equal entity[k].to_i
71
+ end
72
+ }
73
+ end
74
+
75
+ it "updates an existing entity, removing any properties not included in the update operation" do
76
+ entity = entity_properties.dup
77
+ entity["RowKey"] = "abcd1234_existing"
78
+
79
+ result = subject.insert_entity table_name, entity
80
+
81
+ existing_etag = ""
82
+
83
+ exists = false
84
+ begin
85
+ existing = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
86
+ existing_etag = existing.etag
87
+ exists = true
88
+ rescue
89
+ end
90
+
91
+ assert exists, "cannot verify existing record"
92
+
93
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
94
+ batch.insert_or_replace entity["RowKey"], {
95
+ "PartitionKey" => entity["PartitionKey"],
96
+ "RowKey" => entity["RowKey"],
97
+ "NewCustomProperty" => "NewCustomValue"
98
+ }
99
+ etags = subject.execute_batch batch
100
+
101
+ etags[0].must_be_kind_of String
102
+ etags[0].wont_equal existing_etag
103
+
104
+ result = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
105
+
106
+ result.must_be_kind_of Azure::Table::Entity
107
+ result.table.must_equal table_name
108
+
109
+ # removed all existing props
110
+ entity.each { |k,v|
111
+ result.properties.wont_include k unless k == "PartitionKey" || k == "RowKey"
112
+ }
113
+
114
+ # and has the new one
115
+ result.properties["NewCustomProperty"].must_equal "NewCustomValue"
116
+ end
117
+
118
+ it "errors on an invalid table name" do
119
+ assert_raises(Azure::Core::Http::HTTPError) do
120
+ entity = entity_properties.dup
121
+ entity["RowKey"] = "row_key"
122
+
123
+ batch = Azure::Table::Batch.new "this_table.cannot-exist!", entity["PartitionKey"]
124
+ batch.insert_or_replace entity["RowKey"], entity
125
+ etags = subject.execute_batch batch
126
+ end
127
+ end
128
+
129
+ it "errors on an invalid partition key" do
130
+ assert_raises(Azure::Core::Http::HTTPError) do
131
+ entity = entity_properties.dup
132
+ entity["PartitionKey"] = "this/partition_key#is?invalid"
133
+ entity["RowKey"] = "row_key"
134
+
135
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
136
+ batch.insert_or_replace entity["RowKey"], entity
137
+ etags = subject.execute_batch batch
138
+ end
139
+ end
140
+
141
+ it "errors on an invalid row key" do
142
+ assert_raises(Azure::Core::Http::HTTPError) do
143
+ entity = entity_properties.dup
144
+ entity["RowKey"] = "this/partition_key#is?invalid"
145
+
146
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
147
+ batch.insert_or_replace entity["RowKey"], entity
148
+ etags = subject.execute_batch batch
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,137 @@
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 "#insert_or_replace_entity" do
21
+ subject { Azure::Table::TableService.new }
22
+ let(:table_name){ TableNameHelper.name }
23
+
24
+ let(:entity_properties) {
25
+ {
26
+ "PartitionKey" => "testingpartition",
27
+ "CustomStringProperty" => "CustomPropertyValue",
28
+ "CustomIntegerProperty" => 37,
29
+ "CustomBooleanProperty" => true,
30
+ "CustomDateProperty" => Time.now
31
+ }
32
+ }
33
+
34
+ before {
35
+ subject.create_table table_name
36
+ }
37
+
38
+ after { TableNameHelper.clean }
39
+
40
+ it "creates an entity if it does not already exist" do
41
+ entity = entity_properties.dup
42
+ entity["RowKey"] = "abcd1234"
43
+
44
+ does_not_exist = true
45
+ begin
46
+ subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
47
+ does_not_exist = false
48
+ rescue
49
+ end
50
+
51
+ assert does_not_exist
52
+
53
+ etag = subject.insert_or_replace_entity table_name, entity
54
+ etag.must_be_kind_of String
55
+
56
+ result = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
57
+
58
+ result.must_be_kind_of Azure::Table::Entity
59
+ result.table.must_equal table_name
60
+ result.etag.must_equal etag
61
+
62
+ entity.each { |k,v|
63
+ unless entity[k].class == Time
64
+ result.properties[k].must_equal entity[k]
65
+ else
66
+ result.properties[k].to_i.must_equal entity[k].to_i
67
+ end
68
+ }
69
+ end
70
+
71
+ it "updates an existing entity, removing any properties not included in the update operation" do
72
+ entity = entity_properties.dup
73
+ entity["RowKey"] = "abcd1234_existing"
74
+
75
+ result = subject.insert_entity table_name, entity
76
+
77
+ existing_etag = ""
78
+
79
+ exists = false
80
+ begin
81
+ existing = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
82
+ existing_etag = existing.etag
83
+ exists = true
84
+ rescue
85
+ end
86
+
87
+ assert exists, "cannot verify existing record"
88
+
89
+ etag = subject.insert_or_replace_entity table_name, {
90
+ "PartitionKey" => entity["PartitionKey"],
91
+ "RowKey" => entity["RowKey"],
92
+ "NewCustomProperty" => "NewCustomValue"
93
+ }
94
+
95
+ etag.must_be_kind_of String
96
+ etag.wont_equal existing_etag
97
+
98
+ result = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
99
+
100
+ result.must_be_kind_of Azure::Table::Entity
101
+ result.table.must_equal table_name
102
+
103
+ # removed all existing props
104
+ entity.each { |k,v|
105
+ result.properties.wont_include k unless k == "PartitionKey" || k == "RowKey"
106
+ }
107
+
108
+ # and has the new one
109
+ result.properties["NewCustomProperty"].must_equal "NewCustomValue"
110
+ end
111
+
112
+ it "errors on an invalid table name" do
113
+ assert_raises(Azure::Core::Http::HTTPError) do
114
+ entity = entity_properties.dup
115
+ entity["RowKey"] = "row_key"
116
+ subject.insert_or_replace_entity "this_table.cannot-exist!", entity
117
+ end
118
+ end
119
+
120
+ it "errors on an invalid partition key" do
121
+ assert_raises(Azure::Core::Http::HTTPError) do
122
+ entity = entity_properties.dup
123
+ entity["PartitionKey"] = "this/partition_key#is?invalid"
124
+ entity["RowKey"] = "row_key"
125
+ subject.insert_or_replace_entity table_name, entity
126
+ end
127
+ end
128
+
129
+ it "errors on an invalid row key" do
130
+ assert_raises(Azure::Core::Http::HTTPError) do
131
+ entity = entity_properties.dup
132
+ entity["RowKey"] = "this/partition_key#is?invalid"
133
+ subject.insert_or_replace_entity table_name, entity
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,128 @@
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
+
16
+ require "integration/test_helper"
17
+ require "azure/table/batch"
18
+ require "azure/table/table_service"
19
+ require "azure/core/http/http_error"
20
+
21
+ describe Azure::Table::TableService do
22
+ describe "#merge_entity_batch" do
23
+ subject { Azure::Table::TableService.new }
24
+ let(:table_name){ TableNameHelper.name }
25
+
26
+ let(:entity_properties){
27
+ {
28
+ "PartitionKey" => "testingpartition",
29
+ "RowKey" => "abcd1234_existing",
30
+ "CustomStringProperty" => "CustomPropertyValue",
31
+ "CustomIntegerProperty" => 37,
32
+ "CustomBooleanProperty" => true,
33
+ "CustomDateProperty" => Time.now
34
+ }
35
+ }
36
+
37
+ before {
38
+ subject.create_table table_name
39
+ subject.insert_entity table_name, entity_properties
40
+ @existing_etag = ""
41
+
42
+ exists = false
43
+ begin
44
+ existing = subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
45
+ @existing_etag = existing.etag
46
+ exists = true
47
+ rescue
48
+ end
49
+
50
+ assert exists, "cannot verify existing record"
51
+ }
52
+
53
+ after { TableNameHelper.clean }
54
+
55
+ it "updates an existing entity, merging the properties" do
56
+ batch = Azure::Table::Batch.new table_name, entity_properties["PartitionKey"]
57
+ batch.merge entity_properties["RowKey"], {
58
+ "PartitionKey" => entity_properties["PartitionKey"],
59
+ "RowKey" => entity_properties["RowKey"],
60
+ "NewCustomProperty" => "NewCustomValue"
61
+ }
62
+ etags = subject.execute_batch batch
63
+
64
+ etags[0].must_be_kind_of String
65
+ etags[0].wont_equal @existing_etag
66
+
67
+ result = subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
68
+
69
+ result.must_be_kind_of Azure::Table::Entity
70
+ result.table.must_equal table_name
71
+ result.properties["PartitionKey"].must_equal entity_properties["PartitionKey"]
72
+ result.properties["RowKey"].must_equal entity_properties["RowKey"]
73
+
74
+ # retained all existing props
75
+ entity_properties.each { |k,v|
76
+ unless entity_properties[k].class == Time
77
+ result.properties[k].must_equal entity_properties[k]
78
+ else
79
+ result.properties[k].to_i.must_equal entity_properties[k].to_i
80
+ end
81
+ }
82
+
83
+ # and has the new one
84
+ result.properties["NewCustomProperty"].must_equal "NewCustomValue"
85
+ end
86
+
87
+ it "errors on a non-existing row key" do
88
+ assert_raises(Azure::Core::Http::HTTPError) do
89
+ entity = entity_properties.dup
90
+ entity["RowKey"] = "this-row-key-does-not-exist"
91
+
92
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
93
+ batch.merge entity["RowKey"], entity
94
+ etags = subject.execute_batch batch
95
+ end
96
+ end
97
+
98
+ it "errors on an invalid table name" do
99
+ assert_raises(Azure::Core::Http::HTTPError) do
100
+ batch = Azure::Table::Batch.new "this_table.cannot-exist!", entity_properties["PartitionKey"]
101
+ batch.merge entity_properties["RowKey"], entity_properties
102
+ etags = subject.execute_batch batch
103
+ end
104
+ end
105
+
106
+ it "errors on an invalid partition key" do
107
+ assert_raises(Azure::Core::Http::HTTPError) do
108
+ entity = entity_properties.dup
109
+ entity["PartitionKey"] = "this/partition_key#is?invalid"
110
+
111
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
112
+ batch.merge entity["RowKey"], entity
113
+ etags = subject.execute_batch batch
114
+ end
115
+ end
116
+
117
+ it "errors on an invalid row key" do
118
+ assert_raises(Azure::Core::Http::HTTPError) do
119
+ entity = entity_properties.dup
120
+ entity["RowKey"] = "this/row_key#is?invalid"
121
+
122
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
123
+ batch.merge entity["RowKey"], entity
124
+ etags = subject.execute_batch batch
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,113 @@
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
+
16
+ require "integration/test_helper"
17
+ require "azure/table/table_service"
18
+ require "azure/core/http/http_error"
19
+
20
+ describe Azure::Table::TableService do
21
+ describe "#merge_entity" do
22
+ subject { Azure::Table::TableService.new }
23
+ let(:table_name){ TableNameHelper.name }
24
+
25
+ let(:entity_properties){
26
+ {
27
+ "PartitionKey" => "testingpartition",
28
+ "RowKey" => "abcd1234_existing",
29
+ "CustomStringProperty" => "CustomPropertyValue",
30
+ "CustomIntegerProperty" => 37,
31
+ "CustomBooleanProperty" => true,
32
+ "CustomDateProperty" => Time.now
33
+ }
34
+ }
35
+
36
+ before {
37
+ subject.create_table table_name
38
+ subject.insert_entity table_name, entity_properties
39
+ @existing_etag = ""
40
+
41
+ exists = false
42
+ begin
43
+ existing = subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
44
+ @existing_etag = existing.etag
45
+ exists = true
46
+ rescue
47
+ end
48
+
49
+ assert exists, "cannot verify existing record"
50
+ }
51
+
52
+ after { TableNameHelper.clean }
53
+
54
+ it "updates an existing entity, merging the properties" do
55
+ etag = subject.merge_entity table_name, {
56
+ "PartitionKey" => entity_properties["PartitionKey"],
57
+ "RowKey" => entity_properties["RowKey"],
58
+ "NewCustomProperty" => "NewCustomValue"
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
+ result.properties["PartitionKey"].must_equal entity_properties["PartitionKey"]
68
+ result.properties["RowKey"].must_equal entity_properties["RowKey"]
69
+
70
+ # retained all existing props
71
+ entity_properties.each { |k,v|
72
+ unless entity_properties[k].class == Time
73
+ result.properties[k].must_equal entity_properties[k]
74
+ else
75
+ result.properties[k].to_i.must_equal entity_properties[k].to_i
76
+ end
77
+ }
78
+
79
+ # and has the new one
80
+ result.properties["NewCustomProperty"].must_equal "NewCustomValue"
81
+ end
82
+
83
+ it "errors on a non-existing row key" do
84
+ assert_raises(Azure::Core::Http::HTTPError) do
85
+ entity = entity_properties.dup
86
+ entity["RowKey"] = "this-row-key-does-not-exist"
87
+ subject.merge_entity table_name, entity
88
+ end
89
+ end
90
+
91
+ it "errors on an invalid table name" do
92
+ assert_raises(Azure::Core::Http::HTTPError) do
93
+ subject.merge_entity "this_table.cannot-exist!", entity_properties
94
+ end
95
+ end
96
+
97
+ it "errors on an invalid partition key" do
98
+ assert_raises(Azure::Core::Http::HTTPError) do
99
+ entity = entity_properties.dup
100
+ entity["PartitionKey"] = "this/partition_key#is?invalid"
101
+ subject.merge_entity table_name, entity
102
+ end
103
+ end
104
+
105
+ it "errors on an invalid row key" do
106
+ assert_raises(Azure::Core::Http::HTTPError) do
107
+ entity = entity_properties.dup
108
+ entity["RowKey"] = "this/row_key#is?invalid"
109
+ subject.merge_entity table_name, entity
110
+ end
111
+ end
112
+ end
113
+ end