stuartpreston-azure-sdk-for-ruby 0.7.1 → 0.7.2
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 +4 -4
- data/.gitignore +11 -11
- data/.travis.yml +10 -10
- data/ChangeLog.txt +70 -68
- data/Gemfile +15 -15
- data/README.md +618 -618
- data/Rakefile +133 -133
- data/azure.gemspec +44 -44
- data/lib/azure.rb +52 -52
- data/lib/azure/base_management/affinity_group.rb +32 -32
- data/lib/azure/base_management/base_management_service.rb +304 -304
- data/lib/azure/base_management/location.rb +27 -27
- data/lib/azure/base_management/management_http_request.rb +171 -171
- data/lib/azure/base_management/serialization.rb +129 -129
- data/lib/azure/base_management/sql_management_http_request.rb +45 -45
- data/lib/azure/blob/blob.rb +31 -31
- data/lib/azure/blob/blob_service.rb +1423 -1423
- data/lib/azure/blob/block.rb +30 -30
- data/lib/azure/blob/container.rb +31 -31
- data/lib/azure/blob/serialization.rb +284 -284
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -38
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +140 -140
- data/lib/azure/cloud_service_management/serialization.rb +117 -117
- data/lib/azure/core.rb +39 -39
- data/lib/azure/core/auth/authorizer.rb +36 -36
- data/lib/azure/core/auth/shared_key.rb +110 -110
- data/lib/azure/core/auth/shared_key_lite.rb +48 -48
- data/lib/azure/core/auth/signer.rb +48 -48
- data/lib/azure/core/configuration.rb +211 -211
- data/lib/azure/core/error.rb +22 -22
- data/lib/azure/core/filtered_service.rb +43 -43
- data/lib/azure/core/http/debug_filter.rb +35 -35
- data/lib/azure/core/http/http_error.rb +88 -88
- data/lib/azure/core/http/http_filter.rb +52 -52
- data/lib/azure/core/http/http_request.rb +157 -157
- data/lib/azure/core/http/http_response.rb +140 -140
- data/lib/azure/core/http/retry_policy.rb +73 -73
- data/lib/azure/core/http/signer_filter.rb +33 -33
- data/lib/azure/core/service.rb +62 -62
- data/lib/azure/core/signed_service.rb +42 -42
- data/lib/azure/core/utility.rb +190 -190
- data/lib/azure/queue/message.rb +29 -29
- data/lib/azure/queue/queue.rb +28 -28
- data/lib/azure/queue/queue_service.rb +567 -567
- data/lib/azure/queue/serialization.rb +106 -106
- data/lib/azure/service/access_policy.rb +25 -25
- data/lib/azure/service/cors.rb +11 -11
- data/lib/azure/service/cors_rule.rb +15 -15
- data/lib/azure/service/enumeration_results.rb +20 -20
- data/lib/azure/service/logging.rb +31 -31
- data/lib/azure/service/metrics.rb +30 -30
- data/lib/azure/service/retention_policy.rb +24 -24
- data/lib/azure/service/serialization.rb +297 -297
- data/lib/azure/service/signed_identifier.rb +29 -29
- data/lib/azure/service/storage_service.rb +82 -82
- data/lib/azure/service/storage_service_properties.rb +37 -37
- data/lib/azure/service_bus/action.rb +21 -21
- data/lib/azure/service_bus/auth/wrap_service.rb +88 -88
- data/lib/azure/service_bus/auth/wrap_signer.rb +68 -68
- data/lib/azure/service_bus/brokered_message.rb +123 -123
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -159
- data/lib/azure/service_bus/correlation_filter.rb +45 -45
- data/lib/azure/service_bus/empty_rule_action.rb +29 -29
- data/lib/azure/service_bus/false_filter.rb +38 -38
- data/lib/azure/service_bus/filter.rb +21 -21
- data/lib/azure/service_bus/interval.rb +103 -103
- data/lib/azure/service_bus/queue.rb +229 -229
- data/lib/azure/service_bus/relay.rb +87 -87
- data/lib/azure/service_bus/resource.rb +108 -108
- data/lib/azure/service_bus/rule.rb +97 -97
- data/lib/azure/service_bus/rule_aspect.rb +34 -34
- data/lib/azure/service_bus/serialization.rb +161 -161
- data/lib/azure/service_bus/service_bus_service.rb +896 -896
- data/lib/azure/service_bus/sql_filter.rb +50 -50
- data/lib/azure/service_bus/sql_rule_action.rb +50 -50
- data/lib/azure/service_bus/subscription.rb +183 -183
- data/lib/azure/service_bus/topic.rb +186 -186
- data/lib/azure/service_bus/true_filter.rb +38 -38
- data/lib/azure/sql_database_management/serialization.rb +111 -111
- data/lib/azure/sql_database_management/sql_database.rb +31 -31
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -200
- data/lib/azure/storage_management/serialization.rb +184 -184
- data/lib/azure/storage_management/storage_account.rb +40 -40
- data/lib/azure/storage_management/storage_management_service.rb +166 -166
- data/lib/azure/table/auth/shared_key.rb +92 -92
- data/lib/azure/table/auth/shared_key_lite.rb +44 -44
- data/lib/azure/table/batch.rb +329 -329
- data/lib/azure/table/batch_response.rb +118 -118
- data/lib/azure/table/edmtype.rb +126 -126
- data/lib/azure/table/entity.rb +30 -30
- data/lib/azure/table/guid.rb +23 -23
- data/lib/azure/table/query.rb +111 -111
- data/lib/azure/table/serialization.rb +107 -107
- data/lib/azure/table/table_service.rb +559 -559
- data/lib/azure/version.rb +31 -31
- data/lib/azure/virtual_machine_image_management/serialization.rb +66 -66
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -25
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -25
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +94 -94
- data/lib/azure/virtual_machine_management/serialization.rb +462 -462
- data/lib/azure/virtual_machine_management/virtual_machine.rb +45 -45
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +588 -588
- data/lib/azure/virtual_network_management/serialization.rb +190 -190
- data/lib/azure/virtual_network_management/virtual_network.rb +37 -37
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -109
- data/test/fixtures/affinity_group.xml +33 -33
- data/test/fixtures/all_containers.xml +20 -20
- data/test/fixtures/all_tables.xml +22 -22
- data/test/fixtures/certificate.pem +21 -21
- data/test/fixtures/container_acl.xml +11 -11
- data/test/fixtures/create_sql_database_server.xml +1 -1
- data/test/fixtures/create_storage_desc_error.xml +5 -5
- data/test/fixtures/create_storage_extendedprop_error.xml +8 -8
- data/test/fixtures/create_storage_extendedpropname_error.xml +6 -6
- data/test/fixtures/create_storage_full_error.xml +6 -6
- data/test/fixtures/create_storage_label_error.xml +5 -5
- data/test/fixtures/create_storage_location_error.xml +5 -5
- data/test/fixtures/create_storage_name_error.xml +6 -6
- data/test/fixtures/create_table_response_entry.xml +15 -15
- data/test/fixtures/delete_storage_container_error.xml +5 -5
- data/test/fixtures/delete_storage_error.xml +5 -5
- data/test/fixtures/deployment_error.xml +5 -5
- data/test/fixtures/get_storage_account_error.xml +5 -5
- data/test/fixtures/get_storage_account_properties.xml +31 -31
- data/test/fixtures/get_storage_account_properties_new.xml +31 -31
- data/test/fixtures/http_error.xml +5 -5
- data/test/fixtures/insert_entity_response_entry.xml +25 -25
- data/test/fixtures/list_affinity_groups.xml +22 -22
- data/test/fixtures/list_blobs.xml +120 -120
- data/test/fixtures/list_block_all_with_none_committed.xml +21 -21
- data/test/fixtures/list_blocks_all.xml +22 -22
- data/test/fixtures/list_blocks_committed.xml +12 -12
- data/test/fixtures/list_cloud_services.xml +38 -38
- data/test/fixtures/list_containers.xml +37 -37
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -27
- data/test/fixtures/list_images.xml +110 -110
- data/test/fixtures/list_locations.xml +62 -62
- data/test/fixtures/list_page_ranges.xml +10 -10
- data/test/fixtures/list_sql_database.xml +36 -36
- data/test/fixtures/list_sql_server_firewall.xml +23 -23
- data/test/fixtures/list_storage_account_single.xml +24 -24
- data/test/fixtures/list_storage_accounts.xml +45 -45
- data/test/fixtures/list_virtual_networks.xml +92 -92
- data/test/fixtures/logging.xml +11 -11
- data/test/fixtures/management_certificate.pem +55 -55
- data/test/fixtures/messages.xml +12 -12
- data/test/fixtures/metrics.xml +10 -10
- data/test/fixtures/privatekey.key +28 -28
- data/test/fixtures/query_entities_empty_response.xml +7 -7
- data/test/fixtures/query_entities_response.xml +45 -45
- data/test/fixtures/queue_service_properties.xml +22 -22
- data/test/fixtures/queue_service_properties_original.xml +19 -19
- data/test/fixtures/queues.xml +16 -16
- data/test/fixtures/retention_policy.xml +5 -5
- data/test/fixtures/sb_default_create_queue_response.xml +23 -23
- data/test/fixtures/sb_default_create_relay_response.xml +15 -15
- data/test/fixtures/sb_default_create_topic_response.xml +18 -18
- data/test/fixtures/sb_get_access_token_response.txt +1 -1
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -9
- data/test/fixtures/storage_service_properties.xml +54 -54
- data/test/fixtures/update_storage_account.xml +16 -16
- data/test/fixtures/update_storage_error.xml +4 -4
- data/test/fixtures/updated_storage_accounts.xml +52 -52
- data/test/fixtures/virtual_machine.xml +113 -113
- data/test/fixtures/windows_virtual_machine.xml +106 -106
- data/test/integration/affinity_group/Affinity_test.rb +55 -55
- data/test/integration/affinity_group/Create_Affinity_test.rb +63 -63
- data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -56
- data/test/integration/affinity_group/List_Affinity_test.rb +41 -41
- data/test/integration/affinity_group/Update_Affinity_test.rb +82 -82
- data/test/integration/blob/blob_gb18030_test.rb +199 -199
- data/test/integration/blob/blob_metadata_test.rb +75 -75
- data/test/integration/blob/blob_pages_test.rb +119 -119
- data/test/integration/blob/blob_properties_test.rb +77 -77
- data/test/integration/blob/block_blob_test.rb +254 -254
- data/test/integration/blob/container/container_acl_test.rb +69 -69
- data/test/integration/blob/container/container_metadata_test.rb +50 -50
- data/test/integration/blob/container/create_container_test.rb +60 -60
- data/test/integration/blob/container/delete_container_test.rb +39 -39
- data/test/integration/blob/container/get_container_properties_test.rb +48 -48
- data/test/integration/blob/container/list_containers_test.rb +79 -79
- data/test/integration/blob/container/root_container_test.rb +53 -53
- data/test/integration/blob/copy_blob_test.rb +113 -113
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -80
- data/test/integration/blob/create_page_blob_test.rb +83 -83
- data/test/integration/blob/delete_blob_test.rb +159 -159
- data/test/integration/blob/get_blob_test.rb +65 -65
- data/test/integration/blob/informative_errors_test.rb +38 -38
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -36
- data/test/integration/blob/lease/break_lease_test.rb +40 -40
- data/test/integration/blob/lease/release_lease_test.rb +40 -40
- data/test/integration/blob/lease/renew_lease_test.rb +42 -42
- data/test/integration/blob/list_blobs_test.rb +113 -113
- data/test/integration/cloud_service/Cloud_Create_test.rb +44 -44
- data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -44
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -86
- data/test/integration/database/create_sql_server_test.rb +53 -53
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -70
- data/test/integration/database/delete_sql_server_test.rb +58 -58
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -45
- data/test/integration/database/list_sql_servers_test.rb +44 -44
- data/test/integration/database/reset_password_sql_server_test.rb +55 -55
- data/test/integration/location/Location_List_test.rb +39 -39
- data/test/integration/queue/clear_messages_test.rb +42 -42
- data/test/integration/queue/create_message_test.rb +75 -75
- data/test/integration/queue/create_queue_test.rb +50 -50
- data/test/integration/queue/delete_message_test.rb +67 -67
- data/test/integration/queue/delete_queue_test.rb +45 -45
- data/test/integration/queue/informative_errors_test.rb +41 -41
- data/test/integration/queue/list_messages_encoded_test.rb +79 -79
- data/test/integration/queue/list_messages_test.rb +79 -79
- data/test/integration/queue/list_queues_test.rb +44 -44
- data/test/integration/queue/peek_messages_test.rb +59 -59
- data/test/integration/queue/queue_gb18030_test.rb +131 -131
- data/test/integration/queue/queue_metadata_test.rb +40 -40
- data/test/integration/queue/update_message_test.rb +74 -74
- data/test/integration/service_bus/informative_errors_test.rb +36 -36
- data/test/integration/service_bus/queues_scenario_test.rb +200 -200
- data/test/integration/service_bus/queues_test.rb +265 -265
- data/test/integration/service_bus/relay_test.rb +131 -131
- data/test/integration/service_bus/rules_test.rb +144 -144
- data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -182
- data/test/integration/service_bus/scenario_test.rb +101 -101
- data/test/integration/service_bus/subscriptions_test.rb +211 -211
- data/test/integration/service_bus/topics_scenario_test.rb +406 -406
- data/test/integration/service_bus/topics_test.rb +129 -129
- data/test/integration/storage_management/storage_management_test.rb +160 -160
- data/test/integration/table/create_table_test.rb +35 -35
- data/test/integration/table/delete_entity_batch_test.rb +106 -106
- data/test/integration/table/delete_entity_test.rb +93 -93
- data/test/integration/table/delete_table_test.rb +39 -39
- data/test/integration/table/get_table_test.rb +36 -36
- data/test/integration/table/informative_errors_test.rb +38 -38
- data/test/integration/table/insert_entity_batch_test.rb +99 -99
- data/test/integration/table/insert_entity_test.rb +87 -87
- data/test/integration/table/insert_or_merge_entity_batch_test.rb +158 -158
- data/test/integration/table/insert_or_merge_entity_test.rb +142 -142
- data/test/integration/table/insert_or_replace_entity_batch_test.rb +151 -151
- data/test/integration/table/insert_or_replace_entity_test.rb +136 -136
- data/test/integration/table/merge_entity_batch_test.rb +127 -127
- data/test/integration/table/merge_entity_test.rb +112 -112
- data/test/integration/table/query_entities_test.rb +194 -194
- data/test/integration/table/query_tables_test.rb +42 -42
- data/test/integration/table/query_test.rb +250 -250
- data/test/integration/table/table_acl_test.rb +51 -51
- data/test/integration/table/table_gb18030_test.rb +355 -355
- data/test/integration/table/update_entity_batch_test.rb +148 -148
- data/test/integration/table/update_entity_test.rb +130 -130
- data/test/integration/test_helper.rb +42 -42
- data/test/integration/vm/VM_Create_test.rb +260 -260
- data/test/integration/vm/VM_Delete_test.rb +55 -55
- data/test/integration/vm/VM_Operations_test.rb +173 -173
- data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -37
- data/test/integration/vm_image/virtual_machine_image_test.rb +36 -36
- data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -122
- data/test/integration/vnet/Virtual_Network_list_test.rb +53 -53
- data/test/support/env.rb +19 -19
- data/test/support/fixtures.rb +36 -36
- data/test/support/name_generator.rb +168 -168
- data/test/support/stubs.rb +42 -42
- data/test/support/virtual_machine_name_generator.rb +102 -102
- data/test/support/virtual_network_helper.rb +73 -73
- data/test/test_helper.rb +53 -53
- data/test/unit/affinity_group/affinity_group_test.rb +192 -192
- data/test/unit/affinity_group/serialization_test.rb +88 -88
- data/test/unit/base_management/location_test.rb +57 -57
- data/test/unit/blob/blob_service_test.rb +1946 -1946
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -94
- data/test/unit/cloud_service_management/serialization_test.rb +169 -169
- data/test/unit/core/auth/shared_key_lite_test.rb +51 -51
- data/test/unit/core/auth/shared_key_test.rb +58 -58
- data/test/unit/core/auth/signer_test.rb +30 -30
- data/test/unit/core/http/http_error_test.rb +57 -57
- data/test/unit/core/http/http_request_test.rb +66 -66
- data/test/unit/core/http/http_response_test.rb +45 -45
- data/test/unit/core/http/retry_policy_test.rb +23 -23
- data/test/unit/database/serialization_test.rb +97 -97
- data/test/unit/database/sql_database_server_service_test.rb +288 -288
- data/test/unit/service/serialization_test.rb +532 -532
- data/test/unit/service/storage_service_test.rb +292 -292
- data/test/unit/storage_management/serialization_test.rb +232 -232
- data/test/unit/storage_management/storage_management_service_test.rb +261 -261
- data/test/unit/table/edmtype_test.rb +107 -107
- data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -35
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -65
- data/test/unit/virtual_machine_management/serialization_test.rb +258 -258
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -440
- data/test/unit/vnet/serialization_test.rb +187 -187
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
- metadata +34 -27
@@ -1,533 +1,533 @@
|
|
1
|
-
#-------------------------------------------------------------------------
|
2
|
-
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
#--------------------------------------------------------------------------
|
15
|
-
require "test_helper"
|
16
|
-
require "azure/service/serialization"
|
17
|
-
|
18
|
-
require 'azure/service/enumeration_results'
|
19
|
-
require 'azure/service/signed_identifier'
|
20
|
-
require 'azure/service/access_policy'
|
21
|
-
|
22
|
-
require 'azure/service/storage_service_properties'
|
23
|
-
require 'azure/service/logging'
|
24
|
-
require 'azure/service/metrics'
|
25
|
-
require 'azure/service/retention_policy'
|
26
|
-
|
27
|
-
describe Azure::Service::Serialization do
|
28
|
-
subject { Azure::Service::Serialization }
|
29
|
-
|
30
|
-
let(:storage_service_properties) { Azure::Service::StorageServiceProperties.new }
|
31
|
-
let(:storage_service_properties_xml) { Fixtures["storage_service_properties"] }
|
32
|
-
|
33
|
-
describe "#signed_identifiers_from_xml" do
|
34
|
-
let(:signed_identifiers_xml) { Fixtures["container_acl"]}
|
35
|
-
|
36
|
-
it "accepts an XML string" do
|
37
|
-
subject.signed_identifiers_from_xml signed_identifiers_xml
|
38
|
-
end
|
39
|
-
|
40
|
-
it "returns an Array of SignedIdentifier instances" do
|
41
|
-
results = subject.signed_identifiers_from_xml signed_identifiers_xml
|
42
|
-
results.must_be_kind_of Array
|
43
|
-
results[0].must_be_kind_of Azure::Service::SignedIdentifier
|
44
|
-
results.count.must_equal 1
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#signed_identifiers_to_xml" do
|
49
|
-
let(:signed_identifiers) {
|
50
|
-
identifier = Azure::Service::SignedIdentifier.new
|
51
|
-
identifier.id = "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
|
52
|
-
identifier.access_policy.start = "2009-09-28T08:49:37.0000000Z"
|
53
|
-
identifier.access_policy.expiry = "2009-09-29T08:49:37.0000000Z"
|
54
|
-
identifier.access_policy.permission = "rwd"
|
55
|
-
[identifier]
|
56
|
-
}
|
57
|
-
|
58
|
-
let(:signed_identifiers_xml) { Fixtures["container_acl"]}
|
59
|
-
|
60
|
-
it "accepts a list of SignedIdentifier instances" do
|
61
|
-
subject.signed_identifiers_to_xml signed_identifiers
|
62
|
-
end
|
63
|
-
|
64
|
-
it "returns a XML graph of the provided values" do
|
65
|
-
xml = subject.signed_identifiers_to_xml signed_identifiers
|
66
|
-
xml.must_equal signed_identifiers_xml
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "#signed_identifier_from_xml" do
|
71
|
-
let(:signed_identifier_xml) { Nokogiri.Slop(Fixtures["container_acl"]).root.SignedIdentifier }
|
72
|
-
let(:mock_access_policy) { mock() }
|
73
|
-
before { subject.expects(:access_policy_from_xml).with(signed_identifier_xml.AccessPolicy).returns(mock_access_policy) }
|
74
|
-
|
75
|
-
it "accepts an XML node" do
|
76
|
-
subject.signed_identifier_from_xml signed_identifier_xml
|
77
|
-
end
|
78
|
-
|
79
|
-
it "returns a SignedIdentifier instance" do
|
80
|
-
identifier = subject.signed_identifier_from_xml signed_identifier_xml
|
81
|
-
identifier.must_be_kind_of Azure::Service::SignedIdentifier
|
82
|
-
end
|
83
|
-
|
84
|
-
it "sets the properties of the SignedIdentifier" do
|
85
|
-
identifier = subject.signed_identifier_from_xml signed_identifier_xml
|
86
|
-
identifier.wont_be_nil
|
87
|
-
identifier.id.must_equal "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "#access_policy_from_xml" do
|
92
|
-
let(:access_policy_xml) { Nokogiri.Slop(Fixtures["container_acl"]).root.SignedIdentifier.AccessPolicy }
|
93
|
-
|
94
|
-
it "accepts an XML node" do
|
95
|
-
subject.access_policy_from_xml access_policy_xml
|
96
|
-
end
|
97
|
-
|
98
|
-
it "returns a AccessPolicy instance" do
|
99
|
-
access_policy = subject.access_policy_from_xml access_policy_xml
|
100
|
-
access_policy.must_be_kind_of Azure::Service::AccessPolicy
|
101
|
-
end
|
102
|
-
|
103
|
-
it "sets the properties of the AccessPolicy" do
|
104
|
-
access_policy = subject.access_policy_from_xml access_policy_xml
|
105
|
-
|
106
|
-
access_policy.wont_be_nil
|
107
|
-
access_policy.start.must_equal "2009-09-28T08:49:37.0000000Z"
|
108
|
-
access_policy.expiry.must_equal "2009-09-29T08:49:37.0000000Z"
|
109
|
-
access_policy.permission.must_equal "rwd"
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "#enumeration_results_from_xml" do
|
114
|
-
let(:enumeration_results_xml) { Fixtures[:list_containers] }
|
115
|
-
|
116
|
-
describe "when passed an instance of EnumerationResults" do
|
117
|
-
let(:enumeration_results) { Azure::Service::EnumerationResults.new }
|
118
|
-
|
119
|
-
it "parses the XML and populates the provided EnumerationResults instance" do
|
120
|
-
result = subject.enumeration_results_from_xml enumeration_results_xml, enumeration_results
|
121
|
-
result.must_be :kind_of?, Azure::Service::EnumerationResults
|
122
|
-
result.continuation_token.must_equal "video"
|
123
|
-
end
|
124
|
-
|
125
|
-
it "returns the same instance provided" do
|
126
|
-
result = subject.enumeration_results_from_xml enumeration_results_xml, enumeration_results
|
127
|
-
result.must_equal enumeration_results
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
describe "when passed nil" do
|
132
|
-
it "returns a new instance of EnumerationResults" do
|
133
|
-
result = subject.enumeration_results_from_xml enumeration_results_xml, nil
|
134
|
-
result.must_be_kind_of Azure::Service::EnumerationResults
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe "#metadata_from_xml" do
|
140
|
-
let(:list_containers_xml) { Fixtures["list_containers"] }
|
141
|
-
let(:metadata_xml_node) { Nokogiri.Slop(list_containers_xml).root.Containers.Container[1].Metadata }
|
142
|
-
|
143
|
-
it "converts a Metadata XML element to a Hash" do
|
144
|
-
subject.metadata_from_xml(metadata_xml_node).must_be_kind_of Hash
|
145
|
-
end
|
146
|
-
|
147
|
-
it "uses the child element names as keys" do
|
148
|
-
hash = subject.metadata_from_xml(metadata_xml_node)
|
149
|
-
hash.has_key?("mymetadata1").must_equal true
|
150
|
-
hash.has_key?("mymetadata2").must_equal true
|
151
|
-
hash.has_key?("x-ms-invalid-name").must_equal true
|
152
|
-
end
|
153
|
-
|
154
|
-
it "uses the child element text contents as values" do
|
155
|
-
hash = subject.metadata_from_xml(metadata_xml_node)
|
156
|
-
hash["mymetadata1"].must_equal "first value"
|
157
|
-
hash["mymetadata2"].must_equal "second value"
|
158
|
-
end
|
159
|
-
|
160
|
-
describe "when it encounters more than one of the same element name" do
|
161
|
-
it "returns and array of values for that key" do
|
162
|
-
hash = subject.metadata_from_xml(metadata_xml_node)
|
163
|
-
hash["x-ms-invalid-name"].must_be_kind_of Array
|
164
|
-
hash["x-ms-invalid-name"].must_equal ["invalid-metadata-name","invalid-metadata-name2"]
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe "#metadata_from_headers" do
|
170
|
-
let(:headers) { { "Content-Type"=>"application/xml", "Content-Length"=>"37" } }
|
171
|
-
|
172
|
-
let(:metadata_headers) { headers.merge({ "x-ms-meta-MyMetadata1" => "first value", "x-ms-meta-MyMetadata2" => "second value" })}
|
173
|
-
|
174
|
-
it "returns a Hash" do
|
175
|
-
subject.metadata_from_headers(metadata_headers).must_be_kind_of Hash
|
176
|
-
end
|
177
|
-
|
178
|
-
it "extracts metadata from a Hash for keys that start with x-ms-meta-* and removes that prefix" do
|
179
|
-
hash = subject.metadata_from_headers(metadata_headers)
|
180
|
-
hash.has_key?("MyMetadata1").must_equal true
|
181
|
-
hash.has_key?("MyMetadata2").must_equal true
|
182
|
-
end
|
183
|
-
|
184
|
-
it "sets the metadata values to the corresponding header values" do
|
185
|
-
hash = subject.metadata_from_headers(metadata_headers)
|
186
|
-
hash["MyMetadata1"].must_equal "first value"
|
187
|
-
hash["MyMetadata2"].must_equal "second value"
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
describe "#retention_policy_to_xml" do
|
192
|
-
let(:retention_policy) {
|
193
|
-
retention_policy = Azure::Service::RetentionPolicy.new
|
194
|
-
retention_policy.enabled = true
|
195
|
-
retention_policy.days = 7
|
196
|
-
|
197
|
-
retention_policy
|
198
|
-
}
|
199
|
-
|
200
|
-
let(:retention_policy_xml) { Fixtures["retention_policy"]}
|
201
|
-
|
202
|
-
it "accepts a RetentionPolicy instance and an Nokogiri::XML::Builder instance" do
|
203
|
-
Nokogiri::XML::Builder.new do |xml|
|
204
|
-
subject.retention_policy_to_xml retention_policy, xml
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
it "adds to the XML Builder, which will create the XML graph of the provided values" do
|
209
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
210
|
-
subject.retention_policy_to_xml retention_policy, xml
|
211
|
-
end
|
212
|
-
builder.to_xml.must_equal retention_policy_xml
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
describe "#retention_policy_from_xml" do
|
217
|
-
let(:retention_policy_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.HourMetrics.RetentionPolicy }
|
218
|
-
|
219
|
-
it "accepts an XML Node" do
|
220
|
-
subject.retention_policy_from_xml retention_policy_xml
|
221
|
-
end
|
222
|
-
|
223
|
-
it "returns an RetentionPolicy instance" do
|
224
|
-
retention_policy = subject.retention_policy_from_xml retention_policy_xml
|
225
|
-
retention_policy.wont_be_nil
|
226
|
-
retention_policy.must_be_kind_of Azure::Service::RetentionPolicy
|
227
|
-
end
|
228
|
-
|
229
|
-
it "sets the properties of the RetentionPolicy instance" do
|
230
|
-
retention_policy = subject.retention_policy_from_xml retention_policy_xml
|
231
|
-
retention_policy.enabled.must_equal true
|
232
|
-
retention_policy.days.must_equal 7
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
describe "#hour_metrics_to_xml" do
|
237
|
-
let(:metrics) {
|
238
|
-
metrics = Azure::Service::Metrics.new
|
239
|
-
metrics.version = "1.0"
|
240
|
-
metrics.enabled = true
|
241
|
-
metrics.include_apis = false
|
242
|
-
retention_policy = metrics.retention_policy = Azure::Service::RetentionPolicy.new
|
243
|
-
retention_policy.enabled = true
|
244
|
-
retention_policy.days = 7
|
245
|
-
|
246
|
-
metrics
|
247
|
-
}
|
248
|
-
|
249
|
-
let(:metrics_xml) { Fixtures["metrics"]}
|
250
|
-
|
251
|
-
it "accepts a Metrics instance and an Nokogiri::XML::Builder instance" do
|
252
|
-
Nokogiri::XML::Builder.new do |xml|
|
253
|
-
subject.hour_metrics_to_xml metrics, xml
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
it "adds to the XML Builder, which will create the XML graph of the provided values" do
|
258
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
259
|
-
subject.hour_metrics_to_xml metrics, xml
|
260
|
-
end
|
261
|
-
builder.to_xml.must_equal metrics_xml
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
describe "#metrics_from_xml" do
|
266
|
-
let(:metrics_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.HourMetrics }
|
267
|
-
let(:mock_retention_policy) { mock }
|
268
|
-
|
269
|
-
before {
|
270
|
-
subject.expects(:retention_policy_from_xml).returns(mock_retention_policy)
|
271
|
-
}
|
272
|
-
|
273
|
-
it "accepts an XML Node" do
|
274
|
-
subject.metrics_from_xml metrics_xml
|
275
|
-
end
|
276
|
-
|
277
|
-
it "returns an Metrics instance" do
|
278
|
-
metrics = subject.metrics_from_xml metrics_xml
|
279
|
-
metrics.wont_be_nil
|
280
|
-
metrics.must_be_kind_of Azure::Service::Metrics
|
281
|
-
end
|
282
|
-
|
283
|
-
it "sets the properties of the Metrics instance" do
|
284
|
-
metrics = subject.metrics_from_xml metrics_xml
|
285
|
-
metrics.version.must_equal "1.0"
|
286
|
-
metrics.enabled.must_equal true
|
287
|
-
metrics.include_apis.must_equal false
|
288
|
-
metrics.retention_policy.must_equal mock_retention_policy
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
|
293
|
-
describe "#logging_to_xml" do
|
294
|
-
let(:logging) {
|
295
|
-
logging = Azure::Service::Logging.new
|
296
|
-
logging.version = "1.0"
|
297
|
-
logging.delete = true
|
298
|
-
logging.read = false
|
299
|
-
logging.write = true
|
300
|
-
|
301
|
-
retention_policy = logging.retention_policy = Azure::Service::RetentionPolicy.new
|
302
|
-
retention_policy.enabled = true
|
303
|
-
retention_policy.days = 7
|
304
|
-
|
305
|
-
logging
|
306
|
-
}
|
307
|
-
|
308
|
-
let(:logging_xml) { Fixtures["logging"]}
|
309
|
-
|
310
|
-
it "accepts a Logging instance and an Nokogiri::XML::Builder instance" do
|
311
|
-
Nokogiri::XML::Builder.new do |xml|
|
312
|
-
subject.logging_to_xml logging, xml
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
|
-
it "adds to the XML Builder, which will create the XML graph of the provided values" do
|
317
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
318
|
-
subject.logging_to_xml logging, xml
|
319
|
-
end
|
320
|
-
builder.to_xml.must_equal logging_xml
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
describe "#logging_from_xml" do
|
325
|
-
let(:logging_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.Logging }
|
326
|
-
let(:mock_retention_policy) { mock }
|
327
|
-
|
328
|
-
before {
|
329
|
-
subject.expects(:retention_policy_from_xml).returns(mock_retention_policy)
|
330
|
-
}
|
331
|
-
|
332
|
-
it "accepts an XML Node" do
|
333
|
-
subject.logging_from_xml logging_xml
|
334
|
-
end
|
335
|
-
|
336
|
-
it "returns an Logging instance" do
|
337
|
-
logging = subject.logging_from_xml logging_xml
|
338
|
-
logging.wont_be_nil
|
339
|
-
logging.must_be_kind_of Azure::Service::Logging
|
340
|
-
end
|
341
|
-
|
342
|
-
it "sets the properties of the Logging instance" do
|
343
|
-
logging = subject.logging_from_xml logging_xml
|
344
|
-
logging.version.must_equal "1.0"
|
345
|
-
logging.delete.must_equal true
|
346
|
-
logging.read.must_equal false
|
347
|
-
logging.write.must_equal true
|
348
|
-
logging.retention_policy.must_equal mock_retention_policy
|
349
|
-
end
|
350
|
-
end
|
351
|
-
|
352
|
-
describe "#service_properties_to_xml" do
|
353
|
-
let(:service_properties) {
|
354
|
-
service_properties = Azure::Service::StorageServiceProperties.new
|
355
|
-
service_properties.default_service_version = "2011-08-18"
|
356
|
-
logging = service_properties.logging = Azure::Service::Logging.new
|
357
|
-
logging.version = "1.0"
|
358
|
-
logging.delete = true
|
359
|
-
logging.read = false
|
360
|
-
logging.write = true
|
361
|
-
retention_policy = logging.retention_policy = Azure::Service::RetentionPolicy.new
|
362
|
-
retention_policy.enabled = true
|
363
|
-
retention_policy.days = 7
|
364
|
-
|
365
|
-
metrics = service_properties.hour_metrics = Azure::Service::Metrics.new
|
366
|
-
metrics.version = "1.0"
|
367
|
-
metrics.enabled = true
|
368
|
-
metrics.include_apis = false
|
369
|
-
retention_policy = metrics.retention_policy = Azure::Service::RetentionPolicy.new
|
370
|
-
retention_policy.enabled = true
|
371
|
-
retention_policy.days = 7
|
372
|
-
|
373
|
-
service_properties.minute_metrics = metrics
|
374
|
-
|
375
|
-
service_properties.cors = Azure::Service::Cors.new do |cors|
|
376
|
-
cors.cors_rules = []
|
377
|
-
cors.cors_rules.push(Azure::Service::CorsRule.new { |cors_rule|
|
378
|
-
cors_rule.allowed_origins = ["http://www.contoso.com", "http://dummy.uri"]
|
379
|
-
cors_rule.allowed_methods = ["PUT", "HEAD"]
|
380
|
-
cors_rule.max_age_in_seconds = 5
|
381
|
-
cors_rule.exposed_headers = ["x-ms-*"]
|
382
|
-
cors_rule.allowed_headers = ["x-ms-blob-content-type", "x-ms-blob-content-disposition"]
|
383
|
-
})
|
384
|
-
|
385
|
-
cors.cors_rules.push(Azure::Service::CorsRule.new { |cors_rule|
|
386
|
-
cors_rule.allowed_origins = ["*"]
|
387
|
-
cors_rule.allowed_methods = ["PUT", "GET"]
|
388
|
-
cors_rule.max_age_in_seconds = 5
|
389
|
-
cors_rule.exposed_headers = ["x-ms-*"]
|
390
|
-
cors_rule.allowed_headers = ["x-ms-blob-content-type", "x-ms-blob-content-disposition"]
|
391
|
-
})
|
392
|
-
|
393
|
-
cors.cors_rules.push(Azure::Service::CorsRule.new { |cors_rule|
|
394
|
-
cors_rule.allowed_origins = ["http://www.contoso.com"]
|
395
|
-
cors_rule.allowed_methods = ["GET"]
|
396
|
-
cors_rule.max_age_in_seconds = 5
|
397
|
-
cors_rule.exposed_headers = ["x-ms-*"]
|
398
|
-
cors_rule.allowed_headers = ["x-ms-client-request-id"]
|
399
|
-
})
|
400
|
-
end
|
401
|
-
|
402
|
-
service_properties
|
403
|
-
}
|
404
|
-
|
405
|
-
let(:service_properties_xml) { Fixtures["storage_service_properties"]}
|
406
|
-
|
407
|
-
it "accepts a StorageServiceProperties instance" do
|
408
|
-
subject.service_properties_to_xml service_properties
|
409
|
-
end
|
410
|
-
|
411
|
-
it "returns a XML graph of the provided values" do
|
412
|
-
xml = subject.service_properties_to_xml service_properties
|
413
|
-
xml.must_equal service_properties_xml
|
414
|
-
end
|
415
|
-
end
|
416
|
-
|
417
|
-
describe "#service_properties_from_xml" do
|
418
|
-
let(:service_properties_xml) { Fixtures["storage_service_properties"]}
|
419
|
-
let(:mock_logging) { mock }
|
420
|
-
let(:mock_metrics) { mock }
|
421
|
-
let(:mock_cors) { mock }
|
422
|
-
|
423
|
-
before {
|
424
|
-
subject.expects(:logging_from_xml).returns(mock_logging)
|
425
|
-
subject.expects(:metrics_from_xml).twice.returns(mock_metrics)
|
426
|
-
subject.expects(:cors_from_xml).returns(mock_cors)
|
427
|
-
}
|
428
|
-
|
429
|
-
it "accepts an XML string" do
|
430
|
-
subject.service_properties_from_xml service_properties_xml
|
431
|
-
end
|
432
|
-
|
433
|
-
it "returns an StorageServiceProperties instance" do
|
434
|
-
service_properties = subject.service_properties_from_xml service_properties_xml
|
435
|
-
service_properties.wont_be_nil
|
436
|
-
service_properties.must_be_kind_of Azure::Service::StorageServiceProperties
|
437
|
-
end
|
438
|
-
|
439
|
-
it "sets the properties of the StorageServiceProperties instance" do
|
440
|
-
service_properties = subject.service_properties_from_xml service_properties_xml
|
441
|
-
service_properties.logging.must_equal mock_logging
|
442
|
-
service_properties.hour_metrics.must_equal mock_metrics
|
443
|
-
service_properties.minute_metrics.must_equal mock_metrics
|
444
|
-
end
|
445
|
-
end
|
446
|
-
|
447
|
-
describe "#to_bool" do
|
448
|
-
it "converts a valid string value to a Boolean" do
|
449
|
-
subject.to_bool('true').must_be_kind_of TrueClass
|
450
|
-
subject.to_bool('false').must_be_kind_of FalseClass
|
451
|
-
end
|
452
|
-
|
453
|
-
it "is case insensitive" do
|
454
|
-
# mixed case
|
455
|
-
subject.to_bool('True').must_equal true
|
456
|
-
|
457
|
-
# upper case
|
458
|
-
subject.to_bool('TRUE').must_equal true
|
459
|
-
end
|
460
|
-
|
461
|
-
it "returns false for any value other than 'true'" do
|
462
|
-
subject.to_bool('random string').must_equal false
|
463
|
-
subject.to_bool(nil).must_equal false
|
464
|
-
end
|
465
|
-
end
|
466
|
-
|
467
|
-
describe "#slopify" do
|
468
|
-
let(:xml_data) { '<?xml version="1.0" encoding="utf-8"?><Foo></Foo>' }
|
469
|
-
let(:document) { Nokogiri.Slop xml_data }
|
470
|
-
let(:root_node) { document.root }
|
471
|
-
let(:non_slop_node) { Nokogiri.parse(xml_data).root }
|
472
|
-
|
473
|
-
describe "when passed a String" do
|
474
|
-
|
475
|
-
it "parses the string into a Nokogiri::XML::Element node" do
|
476
|
-
result = subject.slopify(xml_data)
|
477
|
-
result.must_be_kind_of Nokogiri::XML::Element
|
478
|
-
end
|
479
|
-
|
480
|
-
it "returns the root of the parsed Document" do
|
481
|
-
result = subject.slopify(xml_data)
|
482
|
-
result.name.must_equal root_node.name
|
483
|
-
end
|
484
|
-
|
485
|
-
it "enables Nokogiri 'Slop' mode on the returned Element" do
|
486
|
-
result = subject.slopify(xml_data)
|
487
|
-
result.must_respond_to :method_missing
|
488
|
-
end
|
489
|
-
end
|
490
|
-
|
491
|
-
describe "when passed a Nokogiri::XML::Document" do
|
492
|
-
it "returns a Nokogiri::XML::Element node" do
|
493
|
-
result = subject.slopify(document)
|
494
|
-
result.must_be_kind_of Nokogiri::XML::Element
|
495
|
-
end
|
496
|
-
|
497
|
-
it "returns the root of the Document" do
|
498
|
-
result = subject.slopify(document)
|
499
|
-
result.name.must_equal root_node.name
|
500
|
-
end
|
501
|
-
|
502
|
-
it "enables Nokogiri 'Slop' mode on the returned Element" do
|
503
|
-
result = subject.slopify(xml_data)
|
504
|
-
result.must_respond_to :method_missing
|
505
|
-
end
|
506
|
-
end
|
507
|
-
|
508
|
-
describe "when passed a Nokogiri::XML::Element" do
|
509
|
-
it "returns the Element unchanged" do
|
510
|
-
result = subject.slopify(root_node)
|
511
|
-
result.must_equal root_node
|
512
|
-
end
|
513
|
-
|
514
|
-
it "does not enable Nokogiri 'Slop' mode on the returned Element if it didn't already have it" do
|
515
|
-
result = subject.slopify(root_node)
|
516
|
-
result.respond_to?(:method_missing).must_equal root_node.respond_to?(:method_missing)
|
517
|
-
|
518
|
-
result = subject.slopify(non_slop_node)
|
519
|
-
result.respond_to?(:method_missing).must_equal non_slop_node.respond_to?(:method_missing)
|
520
|
-
end
|
521
|
-
end
|
522
|
-
end
|
523
|
-
|
524
|
-
describe "#expect_node" do
|
525
|
-
let(:node) { mock() }
|
526
|
-
it "throws an error if the xml node doesn't match the passed element name" do
|
527
|
-
node.expects(:name).returns("NotFoo")
|
528
|
-
assert_raises RuntimeError do
|
529
|
-
subject.expect_node("Foo", node)
|
530
|
-
end
|
531
|
-
end
|
532
|
-
end
|
1
|
+
#-------------------------------------------------------------------------
|
2
|
+
# # Copyright (c) Microsoft and contributors. All rights reserved.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
#--------------------------------------------------------------------------
|
15
|
+
require "test_helper"
|
16
|
+
require "azure/service/serialization"
|
17
|
+
|
18
|
+
require 'azure/service/enumeration_results'
|
19
|
+
require 'azure/service/signed_identifier'
|
20
|
+
require 'azure/service/access_policy'
|
21
|
+
|
22
|
+
require 'azure/service/storage_service_properties'
|
23
|
+
require 'azure/service/logging'
|
24
|
+
require 'azure/service/metrics'
|
25
|
+
require 'azure/service/retention_policy'
|
26
|
+
|
27
|
+
describe Azure::Service::Serialization do
|
28
|
+
subject { Azure::Service::Serialization }
|
29
|
+
|
30
|
+
let(:storage_service_properties) { Azure::Service::StorageServiceProperties.new }
|
31
|
+
let(:storage_service_properties_xml) { Fixtures["storage_service_properties"] }
|
32
|
+
|
33
|
+
describe "#signed_identifiers_from_xml" do
|
34
|
+
let(:signed_identifiers_xml) { Fixtures["container_acl"]}
|
35
|
+
|
36
|
+
it "accepts an XML string" do
|
37
|
+
subject.signed_identifiers_from_xml signed_identifiers_xml
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns an Array of SignedIdentifier instances" do
|
41
|
+
results = subject.signed_identifiers_from_xml signed_identifiers_xml
|
42
|
+
results.must_be_kind_of Array
|
43
|
+
results[0].must_be_kind_of Azure::Service::SignedIdentifier
|
44
|
+
results.count.must_equal 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#signed_identifiers_to_xml" do
|
49
|
+
let(:signed_identifiers) {
|
50
|
+
identifier = Azure::Service::SignedIdentifier.new
|
51
|
+
identifier.id = "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
|
52
|
+
identifier.access_policy.start = "2009-09-28T08:49:37.0000000Z"
|
53
|
+
identifier.access_policy.expiry = "2009-09-29T08:49:37.0000000Z"
|
54
|
+
identifier.access_policy.permission = "rwd"
|
55
|
+
[identifier]
|
56
|
+
}
|
57
|
+
|
58
|
+
let(:signed_identifiers_xml) { Fixtures["container_acl"]}
|
59
|
+
|
60
|
+
it "accepts a list of SignedIdentifier instances" do
|
61
|
+
subject.signed_identifiers_to_xml signed_identifiers
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns a XML graph of the provided values" do
|
65
|
+
xml = subject.signed_identifiers_to_xml signed_identifiers
|
66
|
+
xml.must_equal signed_identifiers_xml
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#signed_identifier_from_xml" do
|
71
|
+
let(:signed_identifier_xml) { Nokogiri.Slop(Fixtures["container_acl"]).root.SignedIdentifier }
|
72
|
+
let(:mock_access_policy) { mock() }
|
73
|
+
before { subject.expects(:access_policy_from_xml).with(signed_identifier_xml.AccessPolicy).returns(mock_access_policy) }
|
74
|
+
|
75
|
+
it "accepts an XML node" do
|
76
|
+
subject.signed_identifier_from_xml signed_identifier_xml
|
77
|
+
end
|
78
|
+
|
79
|
+
it "returns a SignedIdentifier instance" do
|
80
|
+
identifier = subject.signed_identifier_from_xml signed_identifier_xml
|
81
|
+
identifier.must_be_kind_of Azure::Service::SignedIdentifier
|
82
|
+
end
|
83
|
+
|
84
|
+
it "sets the properties of the SignedIdentifier" do
|
85
|
+
identifier = subject.signed_identifier_from_xml signed_identifier_xml
|
86
|
+
identifier.wont_be_nil
|
87
|
+
identifier.id.must_equal "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI="
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#access_policy_from_xml" do
|
92
|
+
let(:access_policy_xml) { Nokogiri.Slop(Fixtures["container_acl"]).root.SignedIdentifier.AccessPolicy }
|
93
|
+
|
94
|
+
it "accepts an XML node" do
|
95
|
+
subject.access_policy_from_xml access_policy_xml
|
96
|
+
end
|
97
|
+
|
98
|
+
it "returns a AccessPolicy instance" do
|
99
|
+
access_policy = subject.access_policy_from_xml access_policy_xml
|
100
|
+
access_policy.must_be_kind_of Azure::Service::AccessPolicy
|
101
|
+
end
|
102
|
+
|
103
|
+
it "sets the properties of the AccessPolicy" do
|
104
|
+
access_policy = subject.access_policy_from_xml access_policy_xml
|
105
|
+
|
106
|
+
access_policy.wont_be_nil
|
107
|
+
access_policy.start.must_equal "2009-09-28T08:49:37.0000000Z"
|
108
|
+
access_policy.expiry.must_equal "2009-09-29T08:49:37.0000000Z"
|
109
|
+
access_policy.permission.must_equal "rwd"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "#enumeration_results_from_xml" do
|
114
|
+
let(:enumeration_results_xml) { Fixtures[:list_containers] }
|
115
|
+
|
116
|
+
describe "when passed an instance of EnumerationResults" do
|
117
|
+
let(:enumeration_results) { Azure::Service::EnumerationResults.new }
|
118
|
+
|
119
|
+
it "parses the XML and populates the provided EnumerationResults instance" do
|
120
|
+
result = subject.enumeration_results_from_xml enumeration_results_xml, enumeration_results
|
121
|
+
result.must_be :kind_of?, Azure::Service::EnumerationResults
|
122
|
+
result.continuation_token.must_equal "video"
|
123
|
+
end
|
124
|
+
|
125
|
+
it "returns the same instance provided" do
|
126
|
+
result = subject.enumeration_results_from_xml enumeration_results_xml, enumeration_results
|
127
|
+
result.must_equal enumeration_results
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "when passed nil" do
|
132
|
+
it "returns a new instance of EnumerationResults" do
|
133
|
+
result = subject.enumeration_results_from_xml enumeration_results_xml, nil
|
134
|
+
result.must_be_kind_of Azure::Service::EnumerationResults
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "#metadata_from_xml" do
|
140
|
+
let(:list_containers_xml) { Fixtures["list_containers"] }
|
141
|
+
let(:metadata_xml_node) { Nokogiri.Slop(list_containers_xml).root.Containers.Container[1].Metadata }
|
142
|
+
|
143
|
+
it "converts a Metadata XML element to a Hash" do
|
144
|
+
subject.metadata_from_xml(metadata_xml_node).must_be_kind_of Hash
|
145
|
+
end
|
146
|
+
|
147
|
+
it "uses the child element names as keys" do
|
148
|
+
hash = subject.metadata_from_xml(metadata_xml_node)
|
149
|
+
hash.has_key?("mymetadata1").must_equal true
|
150
|
+
hash.has_key?("mymetadata2").must_equal true
|
151
|
+
hash.has_key?("x-ms-invalid-name").must_equal true
|
152
|
+
end
|
153
|
+
|
154
|
+
it "uses the child element text contents as values" do
|
155
|
+
hash = subject.metadata_from_xml(metadata_xml_node)
|
156
|
+
hash["mymetadata1"].must_equal "first value"
|
157
|
+
hash["mymetadata2"].must_equal "second value"
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "when it encounters more than one of the same element name" do
|
161
|
+
it "returns and array of values for that key" do
|
162
|
+
hash = subject.metadata_from_xml(metadata_xml_node)
|
163
|
+
hash["x-ms-invalid-name"].must_be_kind_of Array
|
164
|
+
hash["x-ms-invalid-name"].must_equal ["invalid-metadata-name","invalid-metadata-name2"]
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#metadata_from_headers" do
|
170
|
+
let(:headers) { { "Content-Type"=>"application/xml", "Content-Length"=>"37" } }
|
171
|
+
|
172
|
+
let(:metadata_headers) { headers.merge({ "x-ms-meta-MyMetadata1" => "first value", "x-ms-meta-MyMetadata2" => "second value" })}
|
173
|
+
|
174
|
+
it "returns a Hash" do
|
175
|
+
subject.metadata_from_headers(metadata_headers).must_be_kind_of Hash
|
176
|
+
end
|
177
|
+
|
178
|
+
it "extracts metadata from a Hash for keys that start with x-ms-meta-* and removes that prefix" do
|
179
|
+
hash = subject.metadata_from_headers(metadata_headers)
|
180
|
+
hash.has_key?("MyMetadata1").must_equal true
|
181
|
+
hash.has_key?("MyMetadata2").must_equal true
|
182
|
+
end
|
183
|
+
|
184
|
+
it "sets the metadata values to the corresponding header values" do
|
185
|
+
hash = subject.metadata_from_headers(metadata_headers)
|
186
|
+
hash["MyMetadata1"].must_equal "first value"
|
187
|
+
hash["MyMetadata2"].must_equal "second value"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
describe "#retention_policy_to_xml" do
|
192
|
+
let(:retention_policy) {
|
193
|
+
retention_policy = Azure::Service::RetentionPolicy.new
|
194
|
+
retention_policy.enabled = true
|
195
|
+
retention_policy.days = 7
|
196
|
+
|
197
|
+
retention_policy
|
198
|
+
}
|
199
|
+
|
200
|
+
let(:retention_policy_xml) { Fixtures["retention_policy"]}
|
201
|
+
|
202
|
+
it "accepts a RetentionPolicy instance and an Nokogiri::XML::Builder instance" do
|
203
|
+
Nokogiri::XML::Builder.new do |xml|
|
204
|
+
subject.retention_policy_to_xml retention_policy, xml
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
it "adds to the XML Builder, which will create the XML graph of the provided values" do
|
209
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
210
|
+
subject.retention_policy_to_xml retention_policy, xml
|
211
|
+
end
|
212
|
+
builder.to_xml.must_equal retention_policy_xml
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
describe "#retention_policy_from_xml" do
|
217
|
+
let(:retention_policy_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.HourMetrics.RetentionPolicy }
|
218
|
+
|
219
|
+
it "accepts an XML Node" do
|
220
|
+
subject.retention_policy_from_xml retention_policy_xml
|
221
|
+
end
|
222
|
+
|
223
|
+
it "returns an RetentionPolicy instance" do
|
224
|
+
retention_policy = subject.retention_policy_from_xml retention_policy_xml
|
225
|
+
retention_policy.wont_be_nil
|
226
|
+
retention_policy.must_be_kind_of Azure::Service::RetentionPolicy
|
227
|
+
end
|
228
|
+
|
229
|
+
it "sets the properties of the RetentionPolicy instance" do
|
230
|
+
retention_policy = subject.retention_policy_from_xml retention_policy_xml
|
231
|
+
retention_policy.enabled.must_equal true
|
232
|
+
retention_policy.days.must_equal 7
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
describe "#hour_metrics_to_xml" do
|
237
|
+
let(:metrics) {
|
238
|
+
metrics = Azure::Service::Metrics.new
|
239
|
+
metrics.version = "1.0"
|
240
|
+
metrics.enabled = true
|
241
|
+
metrics.include_apis = false
|
242
|
+
retention_policy = metrics.retention_policy = Azure::Service::RetentionPolicy.new
|
243
|
+
retention_policy.enabled = true
|
244
|
+
retention_policy.days = 7
|
245
|
+
|
246
|
+
metrics
|
247
|
+
}
|
248
|
+
|
249
|
+
let(:metrics_xml) { Fixtures["metrics"]}
|
250
|
+
|
251
|
+
it "accepts a Metrics instance and an Nokogiri::XML::Builder instance" do
|
252
|
+
Nokogiri::XML::Builder.new do |xml|
|
253
|
+
subject.hour_metrics_to_xml metrics, xml
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
it "adds to the XML Builder, which will create the XML graph of the provided values" do
|
258
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
259
|
+
subject.hour_metrics_to_xml metrics, xml
|
260
|
+
end
|
261
|
+
builder.to_xml.must_equal metrics_xml
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
describe "#metrics_from_xml" do
|
266
|
+
let(:metrics_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.HourMetrics }
|
267
|
+
let(:mock_retention_policy) { mock }
|
268
|
+
|
269
|
+
before {
|
270
|
+
subject.expects(:retention_policy_from_xml).returns(mock_retention_policy)
|
271
|
+
}
|
272
|
+
|
273
|
+
it "accepts an XML Node" do
|
274
|
+
subject.metrics_from_xml metrics_xml
|
275
|
+
end
|
276
|
+
|
277
|
+
it "returns an Metrics instance" do
|
278
|
+
metrics = subject.metrics_from_xml metrics_xml
|
279
|
+
metrics.wont_be_nil
|
280
|
+
metrics.must_be_kind_of Azure::Service::Metrics
|
281
|
+
end
|
282
|
+
|
283
|
+
it "sets the properties of the Metrics instance" do
|
284
|
+
metrics = subject.metrics_from_xml metrics_xml
|
285
|
+
metrics.version.must_equal "1.0"
|
286
|
+
metrics.enabled.must_equal true
|
287
|
+
metrics.include_apis.must_equal false
|
288
|
+
metrics.retention_policy.must_equal mock_retention_policy
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
|
293
|
+
describe "#logging_to_xml" do
|
294
|
+
let(:logging) {
|
295
|
+
logging = Azure::Service::Logging.new
|
296
|
+
logging.version = "1.0"
|
297
|
+
logging.delete = true
|
298
|
+
logging.read = false
|
299
|
+
logging.write = true
|
300
|
+
|
301
|
+
retention_policy = logging.retention_policy = Azure::Service::RetentionPolicy.new
|
302
|
+
retention_policy.enabled = true
|
303
|
+
retention_policy.days = 7
|
304
|
+
|
305
|
+
logging
|
306
|
+
}
|
307
|
+
|
308
|
+
let(:logging_xml) { Fixtures["logging"]}
|
309
|
+
|
310
|
+
it "accepts a Logging instance and an Nokogiri::XML::Builder instance" do
|
311
|
+
Nokogiri::XML::Builder.new do |xml|
|
312
|
+
subject.logging_to_xml logging, xml
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
it "adds to the XML Builder, which will create the XML graph of the provided values" do
|
317
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
318
|
+
subject.logging_to_xml logging, xml
|
319
|
+
end
|
320
|
+
builder.to_xml.must_equal logging_xml
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
describe "#logging_from_xml" do
|
325
|
+
let(:logging_xml) { Nokogiri.Slop(Fixtures["storage_service_properties"]).root.Logging }
|
326
|
+
let(:mock_retention_policy) { mock }
|
327
|
+
|
328
|
+
before {
|
329
|
+
subject.expects(:retention_policy_from_xml).returns(mock_retention_policy)
|
330
|
+
}
|
331
|
+
|
332
|
+
it "accepts an XML Node" do
|
333
|
+
subject.logging_from_xml logging_xml
|
334
|
+
end
|
335
|
+
|
336
|
+
it "returns an Logging instance" do
|
337
|
+
logging = subject.logging_from_xml logging_xml
|
338
|
+
logging.wont_be_nil
|
339
|
+
logging.must_be_kind_of Azure::Service::Logging
|
340
|
+
end
|
341
|
+
|
342
|
+
it "sets the properties of the Logging instance" do
|
343
|
+
logging = subject.logging_from_xml logging_xml
|
344
|
+
logging.version.must_equal "1.0"
|
345
|
+
logging.delete.must_equal true
|
346
|
+
logging.read.must_equal false
|
347
|
+
logging.write.must_equal true
|
348
|
+
logging.retention_policy.must_equal mock_retention_policy
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
describe "#service_properties_to_xml" do
|
353
|
+
let(:service_properties) {
|
354
|
+
service_properties = Azure::Service::StorageServiceProperties.new
|
355
|
+
service_properties.default_service_version = "2011-08-18"
|
356
|
+
logging = service_properties.logging = Azure::Service::Logging.new
|
357
|
+
logging.version = "1.0"
|
358
|
+
logging.delete = true
|
359
|
+
logging.read = false
|
360
|
+
logging.write = true
|
361
|
+
retention_policy = logging.retention_policy = Azure::Service::RetentionPolicy.new
|
362
|
+
retention_policy.enabled = true
|
363
|
+
retention_policy.days = 7
|
364
|
+
|
365
|
+
metrics = service_properties.hour_metrics = Azure::Service::Metrics.new
|
366
|
+
metrics.version = "1.0"
|
367
|
+
metrics.enabled = true
|
368
|
+
metrics.include_apis = false
|
369
|
+
retention_policy = metrics.retention_policy = Azure::Service::RetentionPolicy.new
|
370
|
+
retention_policy.enabled = true
|
371
|
+
retention_policy.days = 7
|
372
|
+
|
373
|
+
service_properties.minute_metrics = metrics
|
374
|
+
|
375
|
+
service_properties.cors = Azure::Service::Cors.new do |cors|
|
376
|
+
cors.cors_rules = []
|
377
|
+
cors.cors_rules.push(Azure::Service::CorsRule.new { |cors_rule|
|
378
|
+
cors_rule.allowed_origins = ["http://www.contoso.com", "http://dummy.uri"]
|
379
|
+
cors_rule.allowed_methods = ["PUT", "HEAD"]
|
380
|
+
cors_rule.max_age_in_seconds = 5
|
381
|
+
cors_rule.exposed_headers = ["x-ms-*"]
|
382
|
+
cors_rule.allowed_headers = ["x-ms-blob-content-type", "x-ms-blob-content-disposition"]
|
383
|
+
})
|
384
|
+
|
385
|
+
cors.cors_rules.push(Azure::Service::CorsRule.new { |cors_rule|
|
386
|
+
cors_rule.allowed_origins = ["*"]
|
387
|
+
cors_rule.allowed_methods = ["PUT", "GET"]
|
388
|
+
cors_rule.max_age_in_seconds = 5
|
389
|
+
cors_rule.exposed_headers = ["x-ms-*"]
|
390
|
+
cors_rule.allowed_headers = ["x-ms-blob-content-type", "x-ms-blob-content-disposition"]
|
391
|
+
})
|
392
|
+
|
393
|
+
cors.cors_rules.push(Azure::Service::CorsRule.new { |cors_rule|
|
394
|
+
cors_rule.allowed_origins = ["http://www.contoso.com"]
|
395
|
+
cors_rule.allowed_methods = ["GET"]
|
396
|
+
cors_rule.max_age_in_seconds = 5
|
397
|
+
cors_rule.exposed_headers = ["x-ms-*"]
|
398
|
+
cors_rule.allowed_headers = ["x-ms-client-request-id"]
|
399
|
+
})
|
400
|
+
end
|
401
|
+
|
402
|
+
service_properties
|
403
|
+
}
|
404
|
+
|
405
|
+
let(:service_properties_xml) { Fixtures["storage_service_properties"]}
|
406
|
+
|
407
|
+
it "accepts a StorageServiceProperties instance" do
|
408
|
+
subject.service_properties_to_xml service_properties
|
409
|
+
end
|
410
|
+
|
411
|
+
it "returns a XML graph of the provided values" do
|
412
|
+
xml = subject.service_properties_to_xml service_properties
|
413
|
+
xml.must_equal service_properties_xml
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
describe "#service_properties_from_xml" do
|
418
|
+
let(:service_properties_xml) { Fixtures["storage_service_properties"]}
|
419
|
+
let(:mock_logging) { mock }
|
420
|
+
let(:mock_metrics) { mock }
|
421
|
+
let(:mock_cors) { mock }
|
422
|
+
|
423
|
+
before {
|
424
|
+
subject.expects(:logging_from_xml).returns(mock_logging)
|
425
|
+
subject.expects(:metrics_from_xml).twice.returns(mock_metrics)
|
426
|
+
subject.expects(:cors_from_xml).returns(mock_cors)
|
427
|
+
}
|
428
|
+
|
429
|
+
it "accepts an XML string" do
|
430
|
+
subject.service_properties_from_xml service_properties_xml
|
431
|
+
end
|
432
|
+
|
433
|
+
it "returns an StorageServiceProperties instance" do
|
434
|
+
service_properties = subject.service_properties_from_xml service_properties_xml
|
435
|
+
service_properties.wont_be_nil
|
436
|
+
service_properties.must_be_kind_of Azure::Service::StorageServiceProperties
|
437
|
+
end
|
438
|
+
|
439
|
+
it "sets the properties of the StorageServiceProperties instance" do
|
440
|
+
service_properties = subject.service_properties_from_xml service_properties_xml
|
441
|
+
service_properties.logging.must_equal mock_logging
|
442
|
+
service_properties.hour_metrics.must_equal mock_metrics
|
443
|
+
service_properties.minute_metrics.must_equal mock_metrics
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
describe "#to_bool" do
|
448
|
+
it "converts a valid string value to a Boolean" do
|
449
|
+
subject.to_bool('true').must_be_kind_of TrueClass
|
450
|
+
subject.to_bool('false').must_be_kind_of FalseClass
|
451
|
+
end
|
452
|
+
|
453
|
+
it "is case insensitive" do
|
454
|
+
# mixed case
|
455
|
+
subject.to_bool('True').must_equal true
|
456
|
+
|
457
|
+
# upper case
|
458
|
+
subject.to_bool('TRUE').must_equal true
|
459
|
+
end
|
460
|
+
|
461
|
+
it "returns false for any value other than 'true'" do
|
462
|
+
subject.to_bool('random string').must_equal false
|
463
|
+
subject.to_bool(nil).must_equal false
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
describe "#slopify" do
|
468
|
+
let(:xml_data) { '<?xml version="1.0" encoding="utf-8"?><Foo></Foo>' }
|
469
|
+
let(:document) { Nokogiri.Slop xml_data }
|
470
|
+
let(:root_node) { document.root }
|
471
|
+
let(:non_slop_node) { Nokogiri.parse(xml_data).root }
|
472
|
+
|
473
|
+
describe "when passed a String" do
|
474
|
+
|
475
|
+
it "parses the string into a Nokogiri::XML::Element node" do
|
476
|
+
result = subject.slopify(xml_data)
|
477
|
+
result.must_be_kind_of Nokogiri::XML::Element
|
478
|
+
end
|
479
|
+
|
480
|
+
it "returns the root of the parsed Document" do
|
481
|
+
result = subject.slopify(xml_data)
|
482
|
+
result.name.must_equal root_node.name
|
483
|
+
end
|
484
|
+
|
485
|
+
it "enables Nokogiri 'Slop' mode on the returned Element" do
|
486
|
+
result = subject.slopify(xml_data)
|
487
|
+
result.must_respond_to :method_missing
|
488
|
+
end
|
489
|
+
end
|
490
|
+
|
491
|
+
describe "when passed a Nokogiri::XML::Document" do
|
492
|
+
it "returns a Nokogiri::XML::Element node" do
|
493
|
+
result = subject.slopify(document)
|
494
|
+
result.must_be_kind_of Nokogiri::XML::Element
|
495
|
+
end
|
496
|
+
|
497
|
+
it "returns the root of the Document" do
|
498
|
+
result = subject.slopify(document)
|
499
|
+
result.name.must_equal root_node.name
|
500
|
+
end
|
501
|
+
|
502
|
+
it "enables Nokogiri 'Slop' mode on the returned Element" do
|
503
|
+
result = subject.slopify(xml_data)
|
504
|
+
result.must_respond_to :method_missing
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
508
|
+
describe "when passed a Nokogiri::XML::Element" do
|
509
|
+
it "returns the Element unchanged" do
|
510
|
+
result = subject.slopify(root_node)
|
511
|
+
result.must_equal root_node
|
512
|
+
end
|
513
|
+
|
514
|
+
it "does not enable Nokogiri 'Slop' mode on the returned Element if it didn't already have it" do
|
515
|
+
result = subject.slopify(root_node)
|
516
|
+
result.respond_to?(:method_missing).must_equal root_node.respond_to?(:method_missing)
|
517
|
+
|
518
|
+
result = subject.slopify(non_slop_node)
|
519
|
+
result.respond_to?(:method_missing).must_equal non_slop_node.respond_to?(:method_missing)
|
520
|
+
end
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
describe "#expect_node" do
|
525
|
+
let(:node) { mock() }
|
526
|
+
it "throws an error if the xml node doesn't match the passed element name" do
|
527
|
+
node.expects(:name).returns("NotFoo")
|
528
|
+
assert_raises RuntimeError do
|
529
|
+
subject.expect_node("Foo", node)
|
530
|
+
end
|
531
|
+
end
|
532
|
+
end
|
533
533
|
end
|