azure-fix 0.7.0.pre3

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 (311) hide show
  1. checksums.yaml +7 -0
  2. data/.env_sample +13 -0
  3. data/.gitignore +30 -0
  4. data/.travis.yml +13 -0
  5. data/ChangeLog.txt +56 -0
  6. data/Gemfile +16 -0
  7. data/LICENSE.txt +202 -0
  8. data/README.md +702 -0
  9. data/Rakefile +121 -0
  10. data/azure.gemspec +51 -0
  11. data/bin/pfxer +35 -0
  12. data/lib/azure.rb +147 -0
  13. data/lib/azure/base_management/affinity_group.rb +32 -0
  14. data/lib/azure/base_management/base_management_service.rb +220 -0
  15. data/lib/azure/base_management/location.rb +27 -0
  16. data/lib/azure/base_management/management_http_request.rb +172 -0
  17. data/lib/azure/base_management/serialization.rb +135 -0
  18. data/lib/azure/base_management/sql_management_http_request.rb +35 -0
  19. data/lib/azure/blob/auth/shared_access_signature.rb +147 -0
  20. data/lib/azure/blob/blob.rb +32 -0
  21. data/lib/azure/blob/blob_service.rb +1452 -0
  22. data/lib/azure/blob/block.rb +31 -0
  23. data/lib/azure/blob/container.rb +32 -0
  24. data/lib/azure/blob/serialization.rb +285 -0
  25. data/lib/azure/client.rb +31 -0
  26. data/lib/azure/client_services.rb +98 -0
  27. data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
  28. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +135 -0
  29. data/lib/azure/cloud_service_management/serialization.rb +118 -0
  30. data/lib/azure/configurable.rb +290 -0
  31. data/lib/azure/core/auth/authorizer.rb +36 -0
  32. data/lib/azure/core/auth/shared_key.rb +118 -0
  33. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  34. data/lib/azure/core/auth/signer.rb +51 -0
  35. data/lib/azure/core/error.rb +21 -0
  36. data/lib/azure/core/filtered_service.rb +45 -0
  37. data/lib/azure/core/http/debug_filter.rb +36 -0
  38. data/lib/azure/core/http/http_error.rb +86 -0
  39. data/lib/azure/core/http/http_filter.rb +53 -0
  40. data/lib/azure/core/http/http_request.rb +173 -0
  41. data/lib/azure/core/http/http_response.rb +96 -0
  42. data/lib/azure/core/http/retry_policy.rb +74 -0
  43. data/lib/azure/core/http/signer_filter.rb +33 -0
  44. data/lib/azure/core/service.rb +46 -0
  45. data/lib/azure/core/signed_service.rb +45 -0
  46. data/lib/azure/core/utility.rb +244 -0
  47. data/lib/azure/default.rb +126 -0
  48. data/lib/azure/http_client.rb +85 -0
  49. data/lib/azure/queue/message.rb +30 -0
  50. data/lib/azure/queue/queue.rb +28 -0
  51. data/lib/azure/queue/queue_service.rb +570 -0
  52. data/lib/azure/queue/serialization.rb +105 -0
  53. data/lib/azure/service/access_policy.rb +26 -0
  54. data/lib/azure/service/cors.rb +11 -0
  55. data/lib/azure/service/cors_rule.rb +15 -0
  56. data/lib/azure/service/enumeration_results.rb +21 -0
  57. data/lib/azure/service/logging.rb +32 -0
  58. data/lib/azure/service/metrics.rb +31 -0
  59. data/lib/azure/service/retention_policy.rb +25 -0
  60. data/lib/azure/service/serialization.rb +299 -0
  61. data/lib/azure/service/signed_identifier.rb +30 -0
  62. data/lib/azure/service/storage_service.rb +86 -0
  63. data/lib/azure/service/storage_service_properties.rb +37 -0
  64. data/lib/azure/service_bus/action.rb +21 -0
  65. data/lib/azure/service_bus/auth/shared_access_signer.rb +44 -0
  66. data/lib/azure/service_bus/auth/wrap_service.rb +90 -0
  67. data/lib/azure/service_bus/auth/wrap_signer.rb +77 -0
  68. data/lib/azure/service_bus/brokered_message.rb +124 -0
  69. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
  70. data/lib/azure/service_bus/correlation_filter.rb +45 -0
  71. data/lib/azure/service_bus/empty_rule_action.rb +30 -0
  72. data/lib/azure/service_bus/false_filter.rb +38 -0
  73. data/lib/azure/service_bus/filter.rb +21 -0
  74. data/lib/azure/service_bus/interval.rb +104 -0
  75. data/lib/azure/service_bus/queue.rb +230 -0
  76. data/lib/azure/service_bus/relay.rb +88 -0
  77. data/lib/azure/service_bus/resource.rb +109 -0
  78. data/lib/azure/service_bus/rule.rb +98 -0
  79. data/lib/azure/service_bus/rule_aspect.rb +34 -0
  80. data/lib/azure/service_bus/serialization.rb +161 -0
  81. data/lib/azure/service_bus/service_bus_service.rb +899 -0
  82. data/lib/azure/service_bus/sql_filter.rb +50 -0
  83. data/lib/azure/service_bus/sql_rule_action.rb +50 -0
  84. data/lib/azure/service_bus/subscription.rb +184 -0
  85. data/lib/azure/service_bus/topic.rb +187 -0
  86. data/lib/azure/service_bus/true_filter.rb +38 -0
  87. data/lib/azure/sql_database_management/errors.rb +11 -0
  88. data/lib/azure/sql_database_management/firewall_rule.rb +30 -0
  89. data/lib/azure/sql_database_management/serialization.rb +99 -0
  90. data/lib/azure/sql_database_management/sql_database_management_service.rb +211 -0
  91. data/lib/azure/sql_database_management/sql_server.rb +32 -0
  92. data/lib/azure/storage_management/serialization.rb +204 -0
  93. data/lib/azure/storage_management/storage_account.rb +48 -0
  94. data/lib/azure/storage_management/storage_management_service.rb +207 -0
  95. data/lib/azure/table/auth/shared_key.rb +59 -0
  96. data/lib/azure/table/auth/shared_key_lite.rb +44 -0
  97. data/lib/azure/table/batch.rb +330 -0
  98. data/lib/azure/table/batch_response.rb +118 -0
  99. data/lib/azure/table/edmtype.rb +127 -0
  100. data/lib/azure/table/entity.rb +31 -0
  101. data/lib/azure/table/guid.rb +24 -0
  102. data/lib/azure/table/query.rb +112 -0
  103. data/lib/azure/table/serialization.rb +108 -0
  104. data/lib/azure/table/table_service.rb +563 -0
  105. data/lib/azure/version.rb +31 -0
  106. data/lib/azure/virtual_machine_image_management/serialization.rb +70 -0
  107. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
  108. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
  109. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +83 -0
  110. data/lib/azure/virtual_machine_management/serialization.rb +459 -0
  111. data/lib/azure/virtual_machine_management/virtual_machine.rb +44 -0
  112. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +552 -0
  113. data/lib/azure/virtual_network_management/serialization.rb +193 -0
  114. data/lib/azure/virtual_network_management/virtual_network.rb +37 -0
  115. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +108 -0
  116. data/test/fixtures/32px-fulls-black.jpg +0 -0
  117. data/test/fixtures/affinity_group.xml +33 -0
  118. data/test/fixtures/all_containers.xml +20 -0
  119. data/test/fixtures/all_tables.xml +22 -0
  120. data/test/fixtures/container_acl.xml +11 -0
  121. data/test/fixtures/create_sql_database_server.xml +2 -0
  122. data/test/fixtures/create_storage_desc_error.xml +5 -0
  123. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  124. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  125. data/test/fixtures/create_storage_full_error.xml +6 -0
  126. data/test/fixtures/create_storage_label_error.xml +5 -0
  127. data/test/fixtures/create_storage_location_error.xml +5 -0
  128. data/test/fixtures/create_storage_name_error.xml +6 -0
  129. data/test/fixtures/create_table_response_entry.xml +15 -0
  130. data/test/fixtures/delete_storage_container_error.xml +5 -0
  131. data/test/fixtures/delete_storage_error.xml +5 -0
  132. data/test/fixtures/deployment_error.xml +5 -0
  133. data/test/fixtures/empty_xml_file +0 -0
  134. data/test/fixtures/get_storage_account_error.xml +5 -0
  135. data/test/fixtures/get_storage_account_properties.xml +34 -0
  136. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  137. data/test/fixtures/http_error.xml +5 -0
  138. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  139. data/test/fixtures/list_affinity_groups.xml +22 -0
  140. data/test/fixtures/list_blobs.xml +121 -0
  141. data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
  142. data/test/fixtures/list_blocks_all.xml +23 -0
  143. data/test/fixtures/list_blocks_committed.xml +13 -0
  144. data/test/fixtures/list_cloud_services.xml +39 -0
  145. data/test/fixtures/list_containers.xml +38 -0
  146. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  147. data/test/fixtures/list_locations.xml +212 -0
  148. data/test/fixtures/list_os_images.xml +110 -0
  149. data/test/fixtures/list_page_ranges.xml +11 -0
  150. data/test/fixtures/list_sql_database.xml +24 -0
  151. data/test/fixtures/list_sql_server_firewall.xml +23 -0
  152. data/test/fixtures/list_storage_account_single.xml +25 -0
  153. data/test/fixtures/list_storage_accounts.xml +48 -0
  154. data/test/fixtures/list_virtual_networks.xml +92 -0
  155. data/test/fixtures/list_vm_images.xml +21 -0
  156. data/test/fixtures/logging.xml +11 -0
  157. data/test/fixtures/management_certificate.pfx +0 -0
  158. data/test/fixtures/messages.xml +12 -0
  159. data/test/fixtures/metrics.xml +10 -0
  160. data/test/fixtures/privatekey.key +28 -0
  161. data/test/fixtures/query_entities_empty_response.xml +7 -0
  162. data/test/fixtures/query_entities_response.xml +45 -0
  163. data/test/fixtures/queue_service_properties.xml +22 -0
  164. data/test/fixtures/queue_service_properties_original.xml +19 -0
  165. data/test/fixtures/queues.xml +16 -0
  166. data/test/fixtures/retention_policy.xml +5 -0
  167. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  168. data/test/fixtures/sb_default_create_relay_response.xml +15 -0
  169. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  170. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  171. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  172. data/test/fixtures/storage_service_keys.xml +8 -0
  173. data/test/fixtures/storage_service_properties.xml +55 -0
  174. data/test/fixtures/update_storage_account.xml +16 -0
  175. data/test/fixtures/update_storage_error.xml +5 -0
  176. data/test/fixtures/updated_storage_accounts.xml +55 -0
  177. data/test/fixtures/virtual_machine.xml +116 -0
  178. data/test/fixtures/windows_virtual_machine.xml +106 -0
  179. data/test/integration/affinity_group/Affinity_test.rb +55 -0
  180. data/test/integration/affinity_group/Create_Affinity_test.rb +64 -0
  181. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
  182. data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
  183. data/test/integration/affinity_group/Update_Affinity_test.rb +87 -0
  184. data/test/integration/blob/blob_gb18030_test.rb +199 -0
  185. data/test/integration/blob/blob_metadata_test.rb +75 -0
  186. data/test/integration/blob/blob_pages_test.rb +119 -0
  187. data/test/integration/blob/blob_properties_test.rb +77 -0
  188. data/test/integration/blob/block_blob_test.rb +254 -0
  189. data/test/integration/blob/container/container_acl_test.rb +69 -0
  190. data/test/integration/blob/container/container_metadata_test.rb +50 -0
  191. data/test/integration/blob/container/create_container_test.rb +60 -0
  192. data/test/integration/blob/container/delete_container_test.rb +39 -0
  193. data/test/integration/blob/container/get_container_properties_test.rb +48 -0
  194. data/test/integration/blob/container/list_containers_test.rb +79 -0
  195. data/test/integration/blob/container/root_container_test.rb +55 -0
  196. data/test/integration/blob/copy_blob_test.rb +113 -0
  197. data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
  198. data/test/integration/blob/create_page_blob_test.rb +83 -0
  199. data/test/integration/blob/delete_blob_test.rb +159 -0
  200. data/test/integration/blob/get_blob_test.rb +65 -0
  201. data/test/integration/blob/informative_errors_test.rb +39 -0
  202. data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
  203. data/test/integration/blob/lease/break_lease_test.rb +40 -0
  204. data/test/integration/blob/lease/release_lease_test.rb +40 -0
  205. data/test/integration/blob/lease/renew_lease_test.rb +42 -0
  206. data/test/integration/blob/list_blobs_test.rb +113 -0
  207. data/test/integration/cloud_service/Cloud_Create_test.rb +45 -0
  208. data/test/integration/cloud_service/Cloud_Delete_test.rb +45 -0
  209. data/test/integration/database/create_sql_server_firewall_test.rb +81 -0
  210. data/test/integration/database/create_sql_server_test.rb +53 -0
  211. data/test/integration/database/delete_sql_server_firewall_test.rb +64 -0
  212. data/test/integration/database/delete_sql_server_test.rb +45 -0
  213. data/test/integration/database/list_sql_server_firewall_test.rb +44 -0
  214. data/test/integration/database/list_sql_servers_test.rb +44 -0
  215. data/test/integration/database/reset_password_sql_server_test.rb +53 -0
  216. data/test/integration/location/Location_List_test.rb +39 -0
  217. data/test/integration/location/RoleSize_List_test.rb +35 -0
  218. data/test/integration/queue/clear_messages_test.rb +42 -0
  219. data/test/integration/queue/create_message_test.rb +75 -0
  220. data/test/integration/queue/create_queue_test.rb +50 -0
  221. data/test/integration/queue/delete_message_test.rb +67 -0
  222. data/test/integration/queue/delete_queue_test.rb +45 -0
  223. data/test/integration/queue/informative_errors_test.rb +42 -0
  224. data/test/integration/queue/list_messages_encoded_test.rb +79 -0
  225. data/test/integration/queue/list_messages_test.rb +79 -0
  226. data/test/integration/queue/list_queues_test.rb +43 -0
  227. data/test/integration/queue/peek_messages_test.rb +59 -0
  228. data/test/integration/queue/queue_gb18030_test.rb +131 -0
  229. data/test/integration/queue/queue_metadata_test.rb +40 -0
  230. data/test/integration/queue/update_message_test.rb +74 -0
  231. data/test/integration/service_bus/informative_errors_test.rb +37 -0
  232. data/test/integration/service_bus/queues_scenario_test.rb +200 -0
  233. data/test/integration/service_bus/queues_test.rb +266 -0
  234. data/test/integration/service_bus/relay_test.rb +132 -0
  235. data/test/integration/service_bus/rules_test.rb +145 -0
  236. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
  237. data/test/integration/service_bus/scenario_test.rb +101 -0
  238. data/test/integration/service_bus/subscriptions_test.rb +211 -0
  239. data/test/integration/service_bus/topics_scenario_test.rb +406 -0
  240. data/test/integration/service_bus/topics_test.rb +129 -0
  241. data/test/integration/storage_management/storage_management_test.rb +185 -0
  242. data/test/integration/table/create_table_test.rb +36 -0
  243. data/test/integration/table/delete_entity_batch_test.rb +107 -0
  244. data/test/integration/table/delete_entity_test.rb +94 -0
  245. data/test/integration/table/delete_table_test.rb +40 -0
  246. data/test/integration/table/get_table_test.rb +37 -0
  247. data/test/integration/table/informative_errors_test.rb +39 -0
  248. data/test/integration/table/insert_entity_batch_test.rb +100 -0
  249. data/test/integration/table/insert_entity_test.rb +88 -0
  250. data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
  251. data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
  252. data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
  253. data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
  254. data/test/integration/table/merge_entity_batch_test.rb +128 -0
  255. data/test/integration/table/merge_entity_test.rb +113 -0
  256. data/test/integration/table/query_entities_test.rb +196 -0
  257. data/test/integration/table/query_tables_test.rb +43 -0
  258. data/test/integration/table/query_test.rb +251 -0
  259. data/test/integration/table/table_acl_test.rb +52 -0
  260. data/test/integration/table/table_gb18030_test.rb +355 -0
  261. data/test/integration/table/update_entity_batch_test.rb +149 -0
  262. data/test/integration/table/update_entity_test.rb +131 -0
  263. data/test/integration/test_helper.rb +40 -0
  264. data/test/integration/vm/VM_Create_test.rb +262 -0
  265. data/test/integration/vm/VM_Delete_test.rb +53 -0
  266. data/test/integration/vm/VM_Operations_test.rb +172 -0
  267. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
  268. data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
  269. data/test/integration/vnet/Virtual_Network_Create_test.rb +116 -0
  270. data/test/integration/vnet/Virtual_Network_list_test.rb +48 -0
  271. data/test/support/env.rb +19 -0
  272. data/test/support/fixtures.rb +36 -0
  273. data/test/support/name_generator.rb +168 -0
  274. data/test/support/stubs.rb +42 -0
  275. data/test/support/virtual_machine_name_generator.rb +102 -0
  276. data/test/support/virtual_network_helper.rb +73 -0
  277. data/test/test_helper.rb +47 -0
  278. data/test/unit/affinity_group/affinity_group_test.rb +189 -0
  279. data/test/unit/affinity_group/serialization_test.rb +87 -0
  280. data/test/unit/base_management/base_management_service_test.rb +19 -0
  281. data/test/unit/base_management/location_test.rb +56 -0
  282. data/test/unit/base_management/role_size_test.rb +50 -0
  283. data/test/unit/blob/auth/shared_access_signature_test.rb +71 -0
  284. data/test/unit/blob/blob_service_test.rb +1970 -0
  285. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -0
  286. data/test/unit/cloud_service_management/serialization_test.rb +169 -0
  287. data/test/unit/config/azure_test.rb +112 -0
  288. data/test/unit/config/client_test.rb +37 -0
  289. data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
  290. data/test/unit/core/auth/shared_key_test.rb +58 -0
  291. data/test/unit/core/auth/signer_test.rb +30 -0
  292. data/test/unit/core/http/http_error_test.rb +61 -0
  293. data/test/unit/core/http/http_request_test.rb +138 -0
  294. data/test/unit/core/http/http_response_test.rb +20 -0
  295. data/test/unit/core/http/retry_policy_test.rb +23 -0
  296. data/test/unit/core/utility_test.rb +122 -0
  297. data/test/unit/database/serialization_test.rb +94 -0
  298. data/test/unit/database/sql_database_server_service_test.rb +341 -0
  299. data/test/unit/http_client_test.rb +74 -0
  300. data/test/unit/service/serialization_test.rb +533 -0
  301. data/test/unit/service/storage_service_test.rb +297 -0
  302. data/test/unit/storage_management/serialization_test.rb +244 -0
  303. data/test/unit/storage_management/storage_management_service_test.rb +247 -0
  304. data/test/unit/table/edmtype_test.rb +108 -0
  305. data/test/unit/virtual_machine_image_management/serialization_test.rb +50 -0
  306. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +114 -0
  307. data/test/unit/virtual_machine_management/serialization_test.rb +316 -0
  308. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +480 -0
  309. data/test/unit/vnet/serialization_test.rb +187 -0
  310. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
  311. metadata +579 -0
@@ -0,0 +1,94 @@
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 "#delete_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" => "abcd123",
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
+ }
39
+ after { TableNameHelper.clean }
40
+
41
+ it "deletes an entity" do
42
+ result = subject.delete_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
43
+ result.must_be_nil
44
+
45
+ # query entity to make sure it was deleted
46
+ assert_raises(Azure::Core::Http::HTTPError, "ResourceNotFound (404): The specified resource does not exist.") do
47
+ subject.get_entity table_name, entity_properties["PartitionKey"], entity_properties["RowKey"]
48
+ end
49
+ end
50
+
51
+ it "deletes complex keys" do
52
+ entity = entity_properties.dup
53
+
54
+ entity["RowKey"] = "key with spaces"
55
+ subject.insert_entity table_name, entity
56
+ result = subject.delete_entity table_name, entity["PartitionKey"], entity["RowKey"]
57
+ result.must_be_nil
58
+
59
+ entity["RowKey"] = "key'with'quotes"
60
+ subject.insert_entity table_name, entity
61
+ result = subject.delete_entity table_name, entity["PartitionKey"], entity["RowKey"]
62
+ result.must_be_nil
63
+
64
+ # Uncomment when issue 145 (Cannot use GB-18030 characters in strings) is fixed
65
+ #entity["RowKey"] = "keyWithUnicode" + 0xE.chr + 0x8B.chr + 0xA4.chr
66
+ #subject.insert_entity table_name, entity
67
+ #result = subject.delete_entity table_name, entity["PartitionKey"], entity["RowKey"]
68
+ #result.must_be_nil
69
+
70
+ entity["RowKey"] = "Qbert_Says=.!@%^&"
71
+ subject.insert_entity table_name, entity
72
+ result = subject.delete_entity table_name, entity["PartitionKey"], entity["RowKey"]
73
+ result.must_be_nil
74
+ end
75
+
76
+ it "errors on an invalid table name" do
77
+ assert_raises(Azure::Core::Http::HTTPError) do
78
+ subject.delete_entity "this_table.cannot-exist!", entity_properties["PartitionKey"], entity_properties["RowKey"]
79
+ end
80
+ end
81
+
82
+ it "errors on an invalid partition key" do
83
+ assert_raises(Azure::Core::Http::HTTPError) do
84
+ subject.delete_entity table_name, "this_partition/key#is_invalid", entity_properties["RowKey"]
85
+ end
86
+ end
87
+
88
+ it "errors on an invalid row key" do
89
+ assert_raises(Azure::Core::Http::HTTPError) do
90
+ subject.delete_entity table_name, entity_properties["PartitionKey"], "thisrow/key#is_invalid"
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,40 @@
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 "#delete_table" do
21
+ subject { Azure::Table::TableService.new }
22
+ let(:table_name){ TableNameHelper.name }
23
+ before { subject.create_table table_name }
24
+ after { TableNameHelper.clean }
25
+
26
+ it "deletes a table and returns nil on success" do
27
+ result = subject.delete_table(table_name)
28
+ result.must_be_nil
29
+
30
+ tables = subject.query_tables
31
+ tables.wont_include table_name
32
+ end
33
+
34
+ it "errors on an invalid table" do
35
+ assert_raises(Azure::Core::Http::HTTPError) do
36
+ subject.delete_table "this_table.cannot-exist!"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,37 @@
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 "#get_table" do
21
+ subject { Azure::Table::TableService.new }
22
+ let(:table_name){ TableNameHelper.name }
23
+ before { subject.create_table table_name }
24
+ after { TableNameHelper.clean }
25
+
26
+ it "gets the last updated time of a valid table" do
27
+ result = subject.get_table table_name
28
+ result.must_be_kind_of Time
29
+ end
30
+
31
+ it "errors on an invalid table" do
32
+ assert_raises(Azure::Core::Http::HTTPError) do
33
+ subject.get_table "this_table.cannot-exist!"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,39 @@
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 "#informative_errors_table" do
21
+ subject { Azure::Table::TableService.new }
22
+ let(:table_name){ TableNameHelper.name }
23
+ after { TableNameHelper.clean }
24
+
25
+ it "exception message should be valid" do
26
+ subject.create_table(table_name)
27
+
28
+ # creating the same table again should throw
29
+ begin
30
+ subject.create_table(table_name)
31
+ flunk "No exception"
32
+ rescue Azure::Core::Http::HTTPError => error
33
+ error.status_code.must_equal 409
34
+ error.type.must_equal "TableAlreadyExists"
35
+ error.description.start_with?("The table specified already exists.").must_equal true
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,100 @@
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_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
+ "RowKey" => "abcd123",
29
+ "CustomDoubleProperty" => 3.141592,
30
+ "CustomInt32Property" => 37,
31
+ "CustomInt64Property" => 2**32,
32
+ "CustomInt64NegProperty" => -(2**32),
33
+ "CustomGUIDProperty" => Azure::Table::GUID.new("81425519-6394-43e4-ac6e-28d91f5c3921"),
34
+ "CustomStringProperty" => "CustomPropertyValue",
35
+ "CustomBinaryProperty" => "\x01\x02\x03".force_encoding("BINARY"),
36
+ "CustomDateProperty" => Time.now,
37
+ "CustomDatePrecisionProperty" => Time.at(946684800, 123456.7),
38
+ "CustomIntegerProperty" => 37,
39
+ "CustomTrueProperty" => true,
40
+ "CustomFalseProperty" => false,
41
+ "CustomNilProperty" => nil
42
+ }
43
+ }
44
+
45
+ before {
46
+ subject.create_table table_name
47
+ }
48
+ after { TableNameHelper.clean }
49
+
50
+ it "creates an entity" do
51
+ batch = Azure::Table::Batch.new table_name, entity_properties["PartitionKey"]
52
+ batch.insert entity_properties["RowKey"], entity_properties
53
+ results = subject.execute_batch batch
54
+
55
+ results[0].must_be_kind_of Azure::Table::Entity
56
+ results[0].table.must_equal table_name
57
+ entity_properties.each { |k,v|
58
+ if entity_properties[k].class == Time
59
+ floor_to(results[0].properties[k].to_f, 6).must_equal floor_to(entity_properties[k].to_f, 6)
60
+ else
61
+ results[0].properties[k].must_equal entity_properties[k]
62
+ end
63
+ }
64
+ end
65
+
66
+ def floor_to(num, x)
67
+ (num * 10**x).floor.to_f / 10**x
68
+ end
69
+
70
+ it "errors on an invalid table name" do
71
+ assert_raises(Azure::Core::Http::HTTPError) do
72
+ batch = Azure::Table::Batch.new "this_table.cannot-exist!", entity_properties["PartitionKey"]
73
+ batch.insert entity_properties["RowKey"], entity_properties
74
+ results = subject.execute_batch batch
75
+ end
76
+ end
77
+
78
+ it "errors on an invalid partition key" do
79
+ assert_raises(Azure::Core::Http::HTTPError) do
80
+ entity = entity_properties.dup
81
+ entity["PartitionKey"] = "this/partition\\key#is?invalid"
82
+
83
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
84
+ batch.insert entity["RowKey"], entity
85
+ results = subject.execute_batch batch
86
+ end
87
+ end
88
+
89
+ it "errors on an invalid row key" do
90
+ assert_raises(Azure::Core::Http::HTTPError) do
91
+ entity = entity_properties.dup
92
+ entity["RowKey"] = "this/row\\key#is?invalid"
93
+
94
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
95
+ batch.insert entity["RowKey"], entity
96
+ results = subject.execute_batch batch
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,88 @@
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_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" => "abcd123",
28
+ "CustomDoubleProperty" => 3.141592,
29
+ "CustomInt32Property" => 37,
30
+ "CustomInt64Property" => 2**32,
31
+ "CustomInt64NegProperty" => -(2**32),
32
+ "CustomGUIDProperty" => Azure::Table::GUID.new("81425519-6394-43e4-ac6e-28d91f5c3921"),
33
+ "CustomStringProperty" => "CustomPropertyValue",
34
+ "CustomBinaryProperty" => "\x01\x02\x03".force_encoding("BINARY"),
35
+ "CustomDateProperty" => Time.now,
36
+ "CustomDatePrecisionProperty" => Time.at(946684800, 123456.7),
37
+ "CustomIntegerProperty" => 37,
38
+ "CustomTrueProperty" => true,
39
+ "CustomFalseProperty" => false,
40
+ "CustomNilProperty" => nil
41
+ }
42
+ }
43
+
44
+ before {
45
+ subject.create_table table_name
46
+ }
47
+ after { TableNameHelper.clean }
48
+
49
+ it "creates an entity" do
50
+ result = subject.insert_entity table_name, entity_properties
51
+ result.must_be_kind_of Azure::Table::Entity
52
+ result.table.must_equal table_name
53
+ entity_properties.each { |k,v|
54
+ if entity_properties[k].class == Time
55
+ floor_to(result.properties[k].to_f, 6).must_equal floor_to(entity_properties[k].to_f, 6)
56
+ else
57
+ result.properties[k].must_equal entity_properties[k]
58
+ end
59
+ }
60
+ end
61
+
62
+ def floor_to(num, x)
63
+ (num * 10**x).floor.to_f / 10**x
64
+ end
65
+
66
+ it "errors on an invalid table name" do
67
+ assert_raises(Azure::Core::Http::HTTPError) do
68
+ subject.insert_entity "this_table.cannot-exist!", entity_properties
69
+ end
70
+ end
71
+
72
+ it "errors on an invalid partition key" do
73
+ assert_raises(Azure::Core::Http::HTTPError) do
74
+ entity = entity_properties.dup
75
+ entity["PartitionKey"] = "this/partition\\key#is?invalid"
76
+ subject.insert_entity table_name, entity
77
+ end
78
+ end
79
+
80
+ it "errors on an invalid row key" do
81
+ assert_raises(Azure::Core::Http::HTTPError) do
82
+ entity = entity_properties.dup
83
+ entity["RowKey"] = "this/row\\key#is?invalid"
84
+ subject.insert_entity table_name, entity
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,159 @@
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_merge_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 entity["RowKey"], entity
56
+ result = subject.execute_batch batch
57
+
58
+ result = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
59
+
60
+ result.must_be_kind_of Azure::Table::Entity
61
+ result.table.must_equal table_name
62
+ result.etag.wont_be_nil
63
+
64
+ entity.each { |k,v|
65
+ unless entity[k].class == Time
66
+ result.properties[k].must_equal entity[k]
67
+ else
68
+ result.properties[k].to_i.must_equal entity[k].to_i
69
+ end
70
+ }
71
+ end
72
+
73
+ it "updates an existing entity, merging the properties" do
74
+ entity = entity_properties.dup
75
+ entity["RowKey"] = "abcd1234_existing"
76
+
77
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
78
+ batch.insert entity["RowKey"], entity
79
+ subject.execute_batch batch
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_merge entity["RowKey"], {
95
+ "PartitionKey" => entity["PartitionKey"],
96
+ "RowKey" => entity["RowKey"],
97
+ "NewCustomProperty" => "NewCustomValue",
98
+ "NewNilProperty" => nil
99
+ }
100
+
101
+ subject.execute_batch batch
102
+
103
+ result = subject.get_entity table_name, entity["PartitionKey"], entity["RowKey"]
104
+
105
+ result.etag.must_be_kind_of String
106
+ result.etag.wont_equal existing_etag
107
+
108
+ result.must_be_kind_of Azure::Table::Entity
109
+ result.table.must_equal table_name
110
+
111
+ # retained all existing props
112
+ entity.each { |k,v|
113
+ if entity[k].class == Time
114
+ result.properties[k].to_i.must_equal entity[k].to_i
115
+ else
116
+ result.properties[k].must_equal entity[k]
117
+ end
118
+ }
119
+
120
+ # and has the new one
121
+ result.properties["NewCustomProperty"].must_equal "NewCustomValue"
122
+ result.properties["NewNilProperty"].must_equal nil
123
+ end
124
+
125
+ it "errors on an invalid table name" do
126
+ assert_raises(Azure::Core::Http::HTTPError) do
127
+ entity = entity_properties.dup
128
+ entity["RowKey"] = "row_key"
129
+
130
+ batch = Azure::Table::Batch.new "this_table.cannot-exist!", entity["PartitionKey"]
131
+ batch.insert entity["RowKey"], entity
132
+ result = subject.execute_batch batch
133
+ end
134
+ end
135
+
136
+ it "errors on an invalid partition key" do
137
+ assert_raises(Azure::Core::Http::HTTPError) do
138
+ entity = entity_properties.dup
139
+ entity["PartitionKey"] = "this/partition_key#is?invalid"
140
+ entity["RowKey"] = "row_key"
141
+
142
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
143
+ batch.insert entity["RowKey"], entity
144
+ result = subject.execute_batch batch
145
+ end
146
+ end
147
+
148
+ it "errors on an invalid row key" do
149
+ assert_raises(Azure::Core::Http::HTTPError) do
150
+ entity = entity_properties.dup
151
+ entity["RowKey"] = "this/partition_key#is?invalid"
152
+
153
+ batch = Azure::Table::Batch.new table_name, entity["PartitionKey"]
154
+ batch.insert entity["RowKey"], entity
155
+ result = subject.execute_batch batch
156
+ end
157
+ end
158
+ end
159
+ end