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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +11 -0
- data/ChangeLog.txt +40 -0
- data/Gemfile +16 -0
- data/README.md +590 -0
- data/Rakefile +129 -0
- data/azure.gemspec +47 -0
- data/lib/azure.rb +52 -0
- data/lib/azure/base_management/affinity_group.rb +32 -0
- data/lib/azure/base_management/base_management_service.rb +238 -0
- data/lib/azure/base_management/location.rb +27 -0
- data/lib/azure/base_management/management_http_request.rb +244 -0
- data/lib/azure/base_management/serialization.rb +129 -0
- data/lib/azure/base_management/sql_management_http_request.rb +45 -0
- data/lib/azure/blob/blob.rb +32 -0
- data/lib/azure/blob/blob_service.rb +1424 -0
- data/lib/azure/blob/block.rb +31 -0
- data/lib/azure/blob/container.rb +32 -0
- data/lib/azure/blob/serialization.rb +285 -0
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -0
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +361 -0
- data/lib/azure/cloud_service_management/configuration_set.rb +28 -0
- data/lib/azure/cloud_service_management/deployment.rb +64 -0
- data/lib/azure/cloud_service_management/input_endpoint.rb +29 -0
- data/lib/azure/cloud_service_management/instance_endpoint.rb +31 -0
- data/lib/azure/cloud_service_management/persistent_vm_downtime.rb +29 -0
- data/lib/azure/cloud_service_management/role.rb +30 -0
- data/lib/azure/cloud_service_management/role_instance.rb +40 -0
- data/lib/azure/cloud_service_management/serialization.rb +329 -0
- data/lib/azure/cloud_service_management/virtual_ip.rb +29 -0
- data/lib/azure/core.rb +39 -0
- data/lib/azure/core/auth/authorizer.rb +36 -0
- data/lib/azure/core/auth/shared_key.rb +110 -0
- data/lib/azure/core/auth/shared_key_lite.rb +48 -0
- data/lib/azure/core/auth/signer.rb +48 -0
- data/lib/azure/core/configuration.rb +211 -0
- data/lib/azure/core/error.rb +22 -0
- data/lib/azure/core/filtered_service.rb +44 -0
- data/lib/azure/core/http/debug_filter.rb +36 -0
- data/lib/azure/core/http/http_error.rb +88 -0
- data/lib/azure/core/http/http_filter.rb +53 -0
- data/lib/azure/core/http/http_request.rb +159 -0
- data/lib/azure/core/http/http_response.rb +140 -0
- data/lib/azure/core/http/retry_policy.rb +74 -0
- data/lib/azure/core/http/signer_filter.rb +34 -0
- data/lib/azure/core/service.rb +63 -0
- data/lib/azure/core/signed_service.rb +43 -0
- data/lib/azure/core/utility.rb +190 -0
- data/lib/azure/queue/message.rb +30 -0
- data/lib/azure/queue/queue.rb +29 -0
- data/lib/azure/queue/queue_service.rb +568 -0
- data/lib/azure/queue/serialization.rb +106 -0
- data/lib/azure/service/access_policy.rb +26 -0
- data/lib/azure/service/enumeration_results.rb +21 -0
- data/lib/azure/service/logging.rb +32 -0
- data/lib/azure/service/metrics.rb +31 -0
- data/lib/azure/service/retention_policy.rb +25 -0
- data/lib/azure/service/serialization.rb +240 -0
- data/lib/azure/service/signed_identifier.rb +30 -0
- data/lib/azure/service/storage_service.rb +79 -0
- data/lib/azure/service/storage_service_properties.rb +32 -0
- data/lib/azure/service_bus/action.rb +21 -0
- data/lib/azure/service_bus/auth/wrap_service.rb +89 -0
- data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
- data/lib/azure/service_bus/brokered_message.rb +124 -0
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -0
- data/lib/azure/service_bus/correlation_filter.rb +45 -0
- data/lib/azure/service_bus/empty_rule_action.rb +30 -0
- data/lib/azure/service_bus/false_filter.rb +38 -0
- data/lib/azure/service_bus/filter.rb +21 -0
- data/lib/azure/service_bus/interval.rb +104 -0
- data/lib/azure/service_bus/queue.rb +230 -0
- data/lib/azure/service_bus/resource.rb +109 -0
- data/lib/azure/service_bus/rule.rb +98 -0
- data/lib/azure/service_bus/rule_aspect.rb +34 -0
- data/lib/azure/service_bus/serialization.rb +160 -0
- data/lib/azure/service_bus/service_bus_service.rb +829 -0
- data/lib/azure/service_bus/sql_filter.rb +50 -0
- data/lib/azure/service_bus/sql_rule_action.rb +50 -0
- data/lib/azure/service_bus/subscription.rb +184 -0
- data/lib/azure/service_bus/topic.rb +187 -0
- data/lib/azure/service_bus/true_filter.rb +38 -0
- data/lib/azure/sql_database_management/serialization.rb +111 -0
- data/lib/azure/sql_database_management/sql_database.rb +31 -0
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -0
- data/lib/azure/storage_management/serialization.rb +184 -0
- data/lib/azure/storage_management/storage_account.rb +40 -0
- data/lib/azure/storage_management/storage_management_service.rb +166 -0
- data/lib/azure/table/auth/shared_key.rb +92 -0
- data/lib/azure/table/auth/shared_key_lite.rb +44 -0
- data/lib/azure/table/batch.rb +330 -0
- data/lib/azure/table/batch_response.rb +118 -0
- data/lib/azure/table/edmtype.rb +127 -0
- data/lib/azure/table/entity.rb +31 -0
- data/lib/azure/table/guid.rb +24 -0
- data/lib/azure/table/query.rb +112 -0
- data/lib/azure/table/serialization.rb +108 -0
- data/lib/azure/table/table_service.rb +560 -0
- data/lib/azure/version.rb +31 -0
- data/lib/azure/virtual_machine_image_management/serialization.rb +51 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -0
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -0
- data/lib/azure/virtual_machine_management/serialization.rb +436 -0
- data/lib/azure/virtual_machine_management/virtual_machine.rb +42 -0
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +549 -0
- data/lib/azure/virtual_network_management/serialization.rb +186 -0
- data/lib/azure/virtual_network_management/virtual_network.rb +36 -0
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -0
- data/test/fixtures/32px-fulls-black.jpg +0 -0
- data/test/fixtures/affinity_group.xml +33 -0
- data/test/fixtures/all_containers.xml +20 -0
- data/test/fixtures/all_tables.xml +22 -0
- data/test/fixtures/certificate.pem +21 -0
- data/test/fixtures/container_acl.xml +11 -0
- data/test/fixtures/create_sql_database_server.xml +2 -0
- data/test/fixtures/create_storage_desc_error.xml +5 -0
- data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
- data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
- data/test/fixtures/create_storage_full_error.xml +6 -0
- data/test/fixtures/create_storage_label_error.xml +5 -0
- data/test/fixtures/create_storage_location_error.xml +5 -0
- data/test/fixtures/create_storage_name_error.xml +6 -0
- data/test/fixtures/create_table_response_entry.xml +15 -0
- data/test/fixtures/delete_storage_container_error.xml +5 -0
- data/test/fixtures/delete_storage_error.xml +5 -0
- data/test/fixtures/deployment_error.xml +5 -0
- data/test/fixtures/empty_xml_file +0 -0
- data/test/fixtures/get_deployment.xml +94 -0
- data/test/fixtures/get_deployment_existing.xml +94 -0
- data/test/fixtures/get_deployment_missing.xml +5 -0
- data/test/fixtures/get_storage_account_error.xml +5 -0
- data/test/fixtures/get_storage_account_properties.xml +32 -0
- data/test/fixtures/get_storage_account_properties_new.xml +32 -0
- data/test/fixtures/http_error.xml +5 -0
- data/test/fixtures/insert_entity_response_entry.xml +25 -0
- data/test/fixtures/list_affinity_groups.xml +22 -0
- data/test/fixtures/list_blobs.xml +121 -0
- data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
- data/test/fixtures/list_blocks_all.xml +23 -0
- data/test/fixtures/list_blocks_committed.xml +13 -0
- data/test/fixtures/list_cloud_services.xml +39 -0
- data/test/fixtures/list_containers.xml +38 -0
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
- data/test/fixtures/list_images.xml +110 -0
- data/test/fixtures/list_locations.xml +62 -0
- data/test/fixtures/list_page_ranges.xml +11 -0
- data/test/fixtures/list_sql_database.xml +36 -0
- data/test/fixtures/list_sql_server_firewall.xml +23 -0
- data/test/fixtures/list_storage_account_single.xml +25 -0
- data/test/fixtures/list_storage_accounts.xml +46 -0
- data/test/fixtures/list_virtual_networks.xml +92 -0
- data/test/fixtures/logging.xml +11 -0
- data/test/fixtures/management_certificate.pem +55 -0
- data/test/fixtures/messages.xml +12 -0
- data/test/fixtures/metrics.xml +10 -0
- data/test/fixtures/privatekey.key +28 -0
- data/test/fixtures/query_entities_empty_response.xml +7 -0
- data/test/fixtures/query_entities_response.xml +45 -0
- data/test/fixtures/queue_service_properties.xml +22 -0
- data/test/fixtures/queue_service_properties_original.xml +19 -0
- data/test/fixtures/queues.xml +16 -0
- data/test/fixtures/retention_policy.xml +5 -0
- data/test/fixtures/sb_default_create_queue_response.xml +23 -0
- data/test/fixtures/sb_default_create_topic_response.xml +18 -0
- data/test/fixtures/sb_get_access_token_response.txt +1 -0
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
- data/test/fixtures/storage_service_properties.xml +23 -0
- data/test/fixtures/update_storage_account.xml +16 -0
- data/test/fixtures/update_storage_error.xml +5 -0
- data/test/fixtures/updated_storage_accounts.xml +53 -0
- data/test/fixtures/virtual_machine.xml +113 -0
- data/test/fixtures/windows_virtual_machine.xml +106 -0
- data/test/integration/affinity_group/Affinity_test.rb +55 -0
- data/test/integration/affinity_group/Create_Affinity_test.rb +63 -0
- data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -0
- data/test/integration/affinity_group/List_Affinity_test.rb +41 -0
- data/test/integration/affinity_group/Update_Affinity_test.rb +82 -0
- data/test/integration/blob/blob_gb18030_test.rb +199 -0
- data/test/integration/blob/blob_metadata_test.rb +75 -0
- data/test/integration/blob/blob_pages_test.rb +119 -0
- data/test/integration/blob/blob_properties_test.rb +77 -0
- data/test/integration/blob/block_blob_test.rb +254 -0
- data/test/integration/blob/container/container_acl_test.rb +69 -0
- data/test/integration/blob/container/container_metadata_test.rb +50 -0
- data/test/integration/blob/container/create_container_test.rb +60 -0
- data/test/integration/blob/container/delete_container_test.rb +39 -0
- data/test/integration/blob/container/get_container_properties_test.rb +48 -0
- data/test/integration/blob/container/list_containers_test.rb +79 -0
- data/test/integration/blob/container/root_container_test.rb +54 -0
- data/test/integration/blob/copy_blob_test.rb +113 -0
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
- data/test/integration/blob/create_page_blob_test.rb +83 -0
- data/test/integration/blob/delete_blob_test.rb +159 -0
- data/test/integration/blob/get_blob_test.rb +65 -0
- data/test/integration/blob/informative_errors_test.rb +39 -0
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
- data/test/integration/blob/lease/break_lease_test.rb +40 -0
- data/test/integration/blob/lease/release_lease_test.rb +40 -0
- data/test/integration/blob/lease/renew_lease_test.rb +42 -0
- data/test/integration/blob/list_blobs_test.rb +113 -0
- data/test/integration/cloud_service/Cloud_Create_test.rb +44 -0
- data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -0
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -0
- data/test/integration/database/create_sql_server_test.rb +53 -0
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -0
- data/test/integration/database/delete_sql_server_test.rb +58 -0
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -0
- data/test/integration/database/list_sql_servers_test.rb +44 -0
- data/test/integration/database/reset_password_sql_server_test.rb +55 -0
- data/test/integration/location/Location_List_test.rb +39 -0
- data/test/integration/queue/clear_messages_test.rb +42 -0
- data/test/integration/queue/create_message_test.rb +75 -0
- data/test/integration/queue/create_queue_test.rb +50 -0
- data/test/integration/queue/delete_message_test.rb +67 -0
- data/test/integration/queue/delete_queue_test.rb +45 -0
- data/test/integration/queue/informative_errors_test.rb +42 -0
- data/test/integration/queue/list_messages_encoded_test.rb +79 -0
- data/test/integration/queue/list_messages_test.rb +79 -0
- data/test/integration/queue/list_queues_test.rb +44 -0
- data/test/integration/queue/peek_messages_test.rb +59 -0
- data/test/integration/queue/queue_gb18030_test.rb +131 -0
- data/test/integration/queue/queue_metadata_test.rb +40 -0
- data/test/integration/queue/update_message_test.rb +74 -0
- data/test/integration/service_bus/informative_errors_test.rb +37 -0
- data/test/integration/service_bus/queues_scenario_test.rb +200 -0
- data/test/integration/service_bus/queues_test.rb +266 -0
- data/test/integration/service_bus/rules_test.rb +145 -0
- data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -0
- data/test/integration/service_bus/scenario_test.rb +101 -0
- data/test/integration/service_bus/subscriptions_test.rb +211 -0
- data/test/integration/service_bus/topics_scenario_test.rb +406 -0
- data/test/integration/service_bus/topics_test.rb +129 -0
- data/test/integration/storage_management/storage_management_test.rb +160 -0
- data/test/integration/table/create_table_test.rb +36 -0
- data/test/integration/table/delete_entity_batch_test.rb +107 -0
- data/test/integration/table/delete_entity_test.rb +94 -0
- data/test/integration/table/delete_table_test.rb +40 -0
- data/test/integration/table/get_table_test.rb +37 -0
- data/test/integration/table/informative_errors_test.rb +39 -0
- data/test/integration/table/insert_entity_batch_test.rb +100 -0
- data/test/integration/table/insert_entity_test.rb +88 -0
- data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
- data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
- data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
- data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
- data/test/integration/table/merge_entity_batch_test.rb +128 -0
- data/test/integration/table/merge_entity_test.rb +113 -0
- data/test/integration/table/query_entities_test.rb +195 -0
- data/test/integration/table/query_tables_test.rb +43 -0
- data/test/integration/table/query_test.rb +251 -0
- data/test/integration/table/table_acl_test.rb +52 -0
- data/test/integration/table/table_gb18030_test.rb +355 -0
- data/test/integration/table/update_entity_batch_test.rb +149 -0
- data/test/integration/table/update_entity_test.rb +131 -0
- data/test/integration/test_helper.rb +42 -0
- data/test/integration/vm/VM_Create_test.rb +260 -0
- data/test/integration/vm/VM_Delete_test.rb +55 -0
- data/test/integration/vm/VM_Operations_test.rb +173 -0
- data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -0
- data/test/integration/vm_image/virtual_machine_image_test.rb +37 -0
- data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -0
- data/test/integration/vnet/Virtual_Network_list_test.rb +53 -0
- data/test/support/env.rb +19 -0
- data/test/support/fixtures.rb +36 -0
- data/test/support/name_generator.rb +160 -0
- data/test/support/stubs.rb +42 -0
- data/test/support/virtual_machine_name_generator.rb +102 -0
- data/test/support/virtual_network_helper.rb +73 -0
- data/test/test_helper.rb +53 -0
- data/test/unit/affinity_group/affinity_group_test.rb +192 -0
- data/test/unit/affinity_group/serialization_test.rb +88 -0
- data/test/unit/base_management/location_test.rb +57 -0
- data/test/unit/blob/blob_service_test.rb +1947 -0
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +276 -0
- data/test/unit/cloud_service_management/serialization_test.rb +169 -0
- data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
- data/test/unit/core/auth/shared_key_test.rb +58 -0
- data/test/unit/core/auth/signer_test.rb +30 -0
- data/test/unit/core/http/http_error_test.rb +57 -0
- data/test/unit/core/http/http_request_test.rb +66 -0
- data/test/unit/core/http/http_response_test.rb +45 -0
- data/test/unit/core/http/retry_policy_test.rb +23 -0
- data/test/unit/database/serialization_test.rb +97 -0
- data/test/unit/database/sql_database_server_service_test.rb +288 -0
- data/test/unit/service/serialization_test.rb +502 -0
- data/test/unit/service/storage_service_test.rb +291 -0
- data/test/unit/storage_management/serialization_test.rb +232 -0
- data/test/unit/storage_management/storage_management_service_test.rb +261 -0
- data/test/unit/table/edmtype_test.rb +108 -0
- data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -0
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -0
- data/test/unit/virtual_machine_management/serialization_test.rb +247 -0
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -0
- data/test/unit/vnet/serialization_test.rb +187 -0
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -0
- metadata +470 -0
|
@@ -0,0 +1,83 @@
|
|
|
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/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe Azure::Blob::BlobService do
|
|
19
|
+
subject { Azure::Blob::BlobService.new }
|
|
20
|
+
after { TableNameHelper.clean }
|
|
21
|
+
|
|
22
|
+
describe '#create_page_blob' do
|
|
23
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
24
|
+
let(:blob_name) { "blobname" }
|
|
25
|
+
let(:complex_blob_name) { 'qa-872053-/*"\'&.({[<+ ' + [ 0x7D, 0xEB, 0x8B, 0xA4].pack('U*') + '_' + "0" }
|
|
26
|
+
let(:length) { 1024 }
|
|
27
|
+
before {
|
|
28
|
+
subject.create_container container_name
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
it 'creates a page blob' do
|
|
32
|
+
blob = subject.create_page_blob container_name, blob_name, length
|
|
33
|
+
blob.name.must_equal blob_name
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'creates a page blob with complex name' do
|
|
37
|
+
blob = subject.create_page_blob container_name, complex_blob_name, length
|
|
38
|
+
blob.name.must_equal complex_blob_name
|
|
39
|
+
|
|
40
|
+
complex_blob_name.force_encoding("UTF-8")
|
|
41
|
+
found_complex_name = false
|
|
42
|
+
result = subject.list_blobs container_name
|
|
43
|
+
result.each { |blob|
|
|
44
|
+
found_complex_name = true if blob.name == complex_blob_name
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
found_complex_name.must_equal true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'sets additional properties when the options hash is used' do
|
|
51
|
+
options = {
|
|
52
|
+
:content_type=>"application/xml",
|
|
53
|
+
:content_encoding=>"utf-8",
|
|
54
|
+
:content_language=>"en-US",
|
|
55
|
+
:cache_control=>"max-age=1296000",
|
|
56
|
+
:metadata => { "CustomMetadataProperty"=>"CustomMetadataValue"}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
blob = subject.create_page_blob container_name, blob_name, length, options
|
|
60
|
+
blob = subject.get_blob_properties container_name, blob_name
|
|
61
|
+
blob.name.must_equal blob_name
|
|
62
|
+
blob.properties[:content_type].must_equal options[:content_type]
|
|
63
|
+
blob.properties[:content_encoding].must_equal options[:content_encoding]
|
|
64
|
+
blob.properties[:cache_control].must_equal options[:cache_control]
|
|
65
|
+
|
|
66
|
+
blob = subject.get_blob_metadata container_name, blob_name
|
|
67
|
+
blob.name.must_equal blob_name
|
|
68
|
+
blob.metadata["custommetadataproperty"].must_equal "CustomMetadataValue"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'errors if the container does not exist' do
|
|
72
|
+
assert_raises(Azure::Core::Http::HTTPError) do
|
|
73
|
+
subject.create_page_blob ContainerNameHelper.name, blob_name, length
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'errors if the length is not 512 byte aligned' do
|
|
78
|
+
assert_raises(Azure::Core::Http::HTTPError) do
|
|
79
|
+
subject.create_page_blob container_name, blob_name, length + 1
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
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/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe Azure::Blob::BlobService do
|
|
19
|
+
subject { Azure::Blob::BlobService.new }
|
|
20
|
+
after { TableNameHelper.clean }
|
|
21
|
+
|
|
22
|
+
describe '#delete_blob' do
|
|
23
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
24
|
+
let(:blob_name) { "blobname" }
|
|
25
|
+
let(:length) { 1024 }
|
|
26
|
+
before {
|
|
27
|
+
subject.create_container container_name
|
|
28
|
+
subject.create_page_blob container_name, blob_name, length
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
it 'deletes a blob' do
|
|
32
|
+
subject.delete_blob container_name, blob_name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'errors if the container does not exist' do
|
|
36
|
+
assert_raises(Azure::Core::Http::HTTPError) do
|
|
37
|
+
subject.delete_blob ContainerNameHelper.name, blob_name
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'errors if the blob does not exist' do
|
|
42
|
+
assert_raises(Azure::Core::Http::HTTPError) do
|
|
43
|
+
subject.delete_blob container_name, "unknown-blob"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe 'when a blob has snapshots' do
|
|
48
|
+
let(:snapshot) {
|
|
49
|
+
subject.create_blob_snapshot container_name, blob_name
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# ensure snapshot gets created before tests run. silly.
|
|
53
|
+
before { s = snapshot }
|
|
54
|
+
|
|
55
|
+
it 'deletes the blob, and all the snapshots for the blob, if optional paramters are not used' do
|
|
56
|
+
# verify snapshot exists
|
|
57
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
58
|
+
|
|
59
|
+
snapshot_exists = false
|
|
60
|
+
result.each { |b|
|
|
61
|
+
snapshot_exists = true if b.name == blob_name and b.snapshot == snapshot
|
|
62
|
+
}
|
|
63
|
+
snapshot_exists.must_equal true
|
|
64
|
+
|
|
65
|
+
# delete blob
|
|
66
|
+
subject.delete_blob container_name, blob_name
|
|
67
|
+
|
|
68
|
+
# verify blob is gone and snapshot remains
|
|
69
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
70
|
+
result.length.must_equal 0
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'the snapshot parameter deletes a specific blob snapshot' do
|
|
74
|
+
# create a second snapshot
|
|
75
|
+
second_snapshot = subject.create_blob_snapshot container_name, blob_name
|
|
76
|
+
|
|
77
|
+
# verify two snapshots exist
|
|
78
|
+
|
|
79
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
80
|
+
|
|
81
|
+
snapshots = 0
|
|
82
|
+
result.each { |b|
|
|
83
|
+
snapshots += 1 if b.name == blob_name and b.snapshot != nil
|
|
84
|
+
}
|
|
85
|
+
snapshots.must_equal 2
|
|
86
|
+
|
|
87
|
+
subject.delete_blob container_name, blob_name, { :snapshot => snapshot }
|
|
88
|
+
|
|
89
|
+
# verify first snapshot is gone and blob remains
|
|
90
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
91
|
+
|
|
92
|
+
snapshots = 0
|
|
93
|
+
blob_exists = false
|
|
94
|
+
result.each { |b|
|
|
95
|
+
blob_exists = true if b.name == blob_name and b.snapshot == nil
|
|
96
|
+
snapshots += 1 if b.name == blob_name and b.snapshot == second_snapshot
|
|
97
|
+
}
|
|
98
|
+
blob_exists.must_equal true
|
|
99
|
+
snapshots.must_equal 1
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'errors if the snapshot id provided does not exist' do
|
|
103
|
+
assert_raises(Azure::Core::Http::HTTPError) do
|
|
104
|
+
subject.delete_blob container_name, blob_name, { :snapshot => "thissnapshotidisinvalid" }
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe 'when :only is provided in the delete_snapshots parameter' do
|
|
109
|
+
let(:delete_snapshots) { :only }
|
|
110
|
+
it 'deletes all the snapshots for the blob, keeping the blob' do
|
|
111
|
+
# verify snapshot exists
|
|
112
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
113
|
+
|
|
114
|
+
snapshot_exists = false
|
|
115
|
+
result.each { |b|
|
|
116
|
+
snapshot_exists = true if b.name == blob_name and b.snapshot == snapshot
|
|
117
|
+
}
|
|
118
|
+
snapshot_exists.must_equal true
|
|
119
|
+
|
|
120
|
+
# delete snapshots
|
|
121
|
+
subject.delete_blob container_name, blob_name, { :snapshot => nil, :delete_snapshots => :only }
|
|
122
|
+
|
|
123
|
+
# verify snapshot is gone and blob remains
|
|
124
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
125
|
+
|
|
126
|
+
snapshot_exists = false
|
|
127
|
+
blob_exists = false
|
|
128
|
+
result.each { |b|
|
|
129
|
+
blob_exists = true if b.name == blob_name and b.snapshot == nil
|
|
130
|
+
snapshot_exists = true if b.name == blob_name and b.snapshot == snapshot
|
|
131
|
+
}
|
|
132
|
+
blob_exists.must_equal true
|
|
133
|
+
snapshot_exists.must_equal false
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
describe 'when :include is provided in the delete_snapshots parameter' do
|
|
138
|
+
let(:delete_snapshots) { :include }
|
|
139
|
+
it 'deletes the blob and all of the snapshots for the blob' do
|
|
140
|
+
# verify snapshot exists
|
|
141
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
142
|
+
|
|
143
|
+
snapshot_exists = false
|
|
144
|
+
result.each { |b|
|
|
145
|
+
snapshot_exists = true if b.name == blob_name and b.snapshot == snapshot
|
|
146
|
+
}
|
|
147
|
+
snapshot_exists.must_equal true
|
|
148
|
+
|
|
149
|
+
# delete snapshots
|
|
150
|
+
subject.delete_blob container_name, blob_name, { :snapshot => nil, :delete_snapshots => :include }
|
|
151
|
+
|
|
152
|
+
# verify snapshot is gone and blob remains
|
|
153
|
+
result = subject.list_blobs(container_name, { :snapshots=> true })
|
|
154
|
+
result.length.must_equal 0
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
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/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe Azure::Blob::BlobService do
|
|
19
|
+
subject { Azure::Blob::BlobService.new }
|
|
20
|
+
after { TableNameHelper.clean }
|
|
21
|
+
|
|
22
|
+
describe '#get_blob' do
|
|
23
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
24
|
+
let(:blob_name) { "blobname" }
|
|
25
|
+
let(:content) { content = ""; 1024.times.each{|i| content << "@" }; content }
|
|
26
|
+
let(:metadata) { { "CustomMetadataProperty"=>"CustomMetadataValue" } }
|
|
27
|
+
let(:options) { { :blob_content_type=>"application/foo", :metadata => metadata } }
|
|
28
|
+
|
|
29
|
+
before {
|
|
30
|
+
subject.create_container container_name
|
|
31
|
+
subject.create_block_blob container_name, blob_name, content, options
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
it 'retrieves the blob properties, metadata, and contents' do
|
|
35
|
+
blob, returned_content = subject.get_blob container_name, blob_name
|
|
36
|
+
returned_content.must_equal content
|
|
37
|
+
blob.metadata.must_include "custommetadataproperty"
|
|
38
|
+
blob.metadata["custommetadataproperty"].must_equal "CustomMetadataValue"
|
|
39
|
+
blob.properties[:content_type].must_equal "application/foo"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'retrieves a range of data from the blob' do
|
|
43
|
+
blob, returned_content = subject.get_blob container_name, blob_name, { :start_range => 0, :end_range => 511 }
|
|
44
|
+
returned_content.length.must_equal 512
|
|
45
|
+
returned_content.must_equal content[0..511]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'retrieves a snapshot of data from the blob' do
|
|
49
|
+
snapshot = subject.create_blob_snapshot container_name, blob_name
|
|
50
|
+
|
|
51
|
+
content2= ""
|
|
52
|
+
1024.times.each{|i| content2 << "!" }
|
|
53
|
+
subject.create_block_blob container_name, blob_name, content2, options
|
|
54
|
+
|
|
55
|
+
blob, returned_content = subject.get_blob container_name, blob_name, { :start_range => 0, :end_range => 511 }
|
|
56
|
+
returned_content.length.must_equal 512
|
|
57
|
+
returned_content.must_equal content2[0..511]
|
|
58
|
+
|
|
59
|
+
blob, returned_content = subject.get_blob container_name, blob_name, { :start_range => 0, :end_range => 511, :snapshot => snapshot }
|
|
60
|
+
|
|
61
|
+
returned_content.length.must_equal 512
|
|
62
|
+
returned_content.must_equal content[0..511]
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
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/blob/blob_service"
|
|
17
|
+
require "azure/core/http/http_error"
|
|
18
|
+
|
|
19
|
+
describe Azure::Blob::BlobService do
|
|
20
|
+
describe "#informative_errors_blob" do
|
|
21
|
+
subject { Azure::Blob::BlobService.new }
|
|
22
|
+
after { TableNameHelper.clean }
|
|
23
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
24
|
+
|
|
25
|
+
it "exception message should be valid" do
|
|
26
|
+
subject.create_container container_name
|
|
27
|
+
|
|
28
|
+
# creating the same container again should throw
|
|
29
|
+
begin
|
|
30
|
+
subject.create_container container_name
|
|
31
|
+
flunk "No exception"
|
|
32
|
+
rescue Azure::Core::Http::HTTPError => error
|
|
33
|
+
error.status_code.must_equal 409
|
|
34
|
+
error.type.must_equal "ContainerAlreadyExists"
|
|
35
|
+
error.description.start_with?("The specified container already exists.").must_equal true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
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/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe Azure::Blob::BlobService do
|
|
19
|
+
subject { Azure::Blob::BlobService.new }
|
|
20
|
+
|
|
21
|
+
describe '#acquire_lease' do
|
|
22
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
23
|
+
let(:blob_name) { "blobname" }
|
|
24
|
+
let(:length) { 1024 }
|
|
25
|
+
before {
|
|
26
|
+
subject.create_container container_name
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
it 'should be possible to acquire a lease' do
|
|
30
|
+
subject.create_page_blob container_name, blob_name, length
|
|
31
|
+
|
|
32
|
+
lease_id = subject.acquire_lease container_name, blob_name
|
|
33
|
+
lease_id.wont_be_nil
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
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/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe Azure::Blob::BlobService do
|
|
19
|
+
subject { Azure::Blob::BlobService.new }
|
|
20
|
+
|
|
21
|
+
describe '#break_lease' do
|
|
22
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
23
|
+
let(:blob_name) { "blobname" }
|
|
24
|
+
let(:length) { 1024 }
|
|
25
|
+
before {
|
|
26
|
+
subject.create_container container_name
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
it 'should be possible to break a lease' do
|
|
30
|
+
subject.create_page_blob container_name, blob_name, length
|
|
31
|
+
|
|
32
|
+
lease_id = subject.acquire_lease container_name, blob_name
|
|
33
|
+
lease_id.wont_be_nil
|
|
34
|
+
|
|
35
|
+
broken_lease = subject.break_lease container_name, blob_name
|
|
36
|
+
# lease should be possible to break immediately
|
|
37
|
+
broken_lease.must_equal 0
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
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/blob/blob_service"
|
|
17
|
+
|
|
18
|
+
describe Azure::Blob::BlobService do
|
|
19
|
+
subject { Azure::Blob::BlobService.new }
|
|
20
|
+
|
|
21
|
+
describe '#release_lease' do
|
|
22
|
+
let(:container_name) { ContainerNameHelper.name }
|
|
23
|
+
let(:blob_name) { "blobname" }
|
|
24
|
+
let(:length) { 1024 }
|
|
25
|
+
before {
|
|
26
|
+
subject.create_container container_name
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
it 'should be possible to release a lease' do
|
|
30
|
+
subject.create_page_blob container_name, blob_name, length
|
|
31
|
+
|
|
32
|
+
lease_id = subject.acquire_lease container_name, blob_name
|
|
33
|
+
lease_id.wont_be_nil
|
|
34
|
+
|
|
35
|
+
lease_released = subject.release_lease container_name, blob_name, lease_id
|
|
36
|
+
# lease should be possible to release
|
|
37
|
+
lease_released.must_be_nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|