test/unit/service/storage_service_test.rb in azure-0.5.0 vs test/unit/service/storage_service_test.rb in azure-0.6.0
- old
+ new
@@ -1,291 +1,291 @@
-#-------------------------------------------------------------------------
-# Copyright (c) Microsoft. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#--------------------------------------------------------------------------
-require "test_helper"
-require "azure/service/storage_service"
-require "azure/core/http/http_request"
-require "azure/core/http/signer_filter"
-require "azure/service/storage_service_properties"
-
-describe Azure::Service::StorageService do
-
- let(:uri){ URI.parse "http://dummy.uri/resource" }
- let(:method){ :get }
-
- subject do
- storage_service = Azure::Service::StorageService.new
- storage_service.host = "http://dumyhost.uri"
- storage_service
- end
-
- describe "#call" do
- let(:mock_request){ mock() }
- let(:mock_signer_filter){ mock() }
-
- before do
- Azure::Core::Http::HttpRequest.stubs(:new).with(method, uri, nil).returns(mock_request)
- Azure::Core::Http::SignerFilter.stubs(:new).returns(mock_signer_filter)
-
- mock_request.expects(:call)
- end
-
- it "adds a SignerFilter to the HTTP pipeline" do
- mock_request.expects(:with_filter).with(mock_signer_filter)
- subject.call(method, uri)
- end
-
- describe "when passed the optional headers arguement" do
- before do
- mock_request.expects(:with_filter).with(mock_signer_filter)
- end
-
- let(:mock_headers) {{
- "Other-Header"=>"SomeValue",
- "Custom-Header"=>"PreviousValue",
- "connection"=>"PreviousValue"
- }}
-
- it "merges the custom headers with the HttpRequest headers" do
- mock_request.expects(:headers).returns(mock_headers).at_least(2)
- subject.call(method, uri, nil, { "Custom-Header"=>"CustomValue"} )
-
- mock_headers["Other-Header"].must_equal "SomeValue"
- mock_headers["Custom-Header"].must_equal "CustomValue"
- mock_headers["connection"].must_equal "keep-alive"
- end
- end
-
- describe "when passed the optional body arguement" do
- before do
- mock_request.expects(:with_filter).with(mock_signer_filter)
- end
-
- it "passes the body to the to HttpRequest" do
- Azure::Core::Http::HttpRequest.stubs(:new).with(method, uri, 'body').returns(mock_request)
- subject.call(method, uri, "body")
- end
- end
-
- describe "when with_filter was called" do
- before do
- mock_request.expects(:with_filter).with(mock_signer_filter)
- end
-
- it "builds the HTTP pipeline by passing the filters to the HTTPRequest" do
- filter = mock()
- filter1 = mock()
-
- subject.with_filter filter
- subject.with_filter filter1
-
- mock_request.expects(:with_filter).with(filter)
- mock_request.expects(:with_filter).with(filter1)
-
- subject.call(method, uri)
- end
- end
- end
-
- describe "#with_filter" do
- it "appends filters to a list of filters that will be used in the #call method" do
- initial_length = subject.filters.length
- filter = mock()
- subject.with_filter filter
- subject.filters.length.must_equal initial_length + 1
- end
-
- it "accepts object instances as filters" do
- filter = mock()
- subject.with_filter filter
- subject.filters.last.must_equal filter
- end
-
- it "accepts blocks as filters" do
- subject.with_filter do |a,b| end
- subject.filters.last.class.must_equal Proc
- end
-
- it "preserves the order of the filters" do
- subject.filters = []
-
- filter = mock()
- filter1 = mock()
-
- subject.with_filter filter
- subject.with_filter filter1
- subject.with_filter do |a,b| end
-
- subject.filters.first.must_equal filter
- subject.filters[1].must_equal filter1
- subject.filters.last.class.must_equal Proc
- end
- end
-
- describe "#get_service_properties" do
- let(:service_properties_xml) { Fixtures["storage_service_properties"] }
- let(:service_properties) { Azure::Service::StorageServiceProperties.new }
- let(:response) {
- response = mock()
- response.stubs(:body).returns(service_properties_xml)
- response
- }
-
- let(:service_properties_uri) { URI.parse 'http://dummy.uri/service/properties' }
-
- before do
- Azure::Service::Serialization.stubs(:service_properties_from_xml).with(service_properties_xml).returns(service_properties)
- subject.stubs(:service_properties_uri).returns(service_properties_uri)
- subject.stubs(:call).with(:get, service_properties_uri).returns(response)
- end
-
- it "calls the service_properties_uri method to determine the correct uri" do
- subject.expects(:service_properties_uri).returns(service_properties_uri)
- subject.get_service_properties
- end
-
- it "gets the response from the HTTP API" do
- subject.expects(:call).with(:get, service_properties_uri).returns(response)
- subject.get_service_properties
- end
-
- it "deserializes the response from xml" do
- Azure::Service::Serialization.expects(:service_properties_from_xml).with(service_properties_xml).returns(service_properties)
- subject.get_service_properties
- end
-
- it "returns a StorageServiceProperties instance" do
- result = subject.get_service_properties
- result.must_be_kind_of Azure::Service::StorageServiceProperties
- end
- end
-
- describe "#set_service_properties" do
- let(:service_properties_xml) { Fixtures["storage_service_properties"] }
- let(:service_properties) { Azure::Service::StorageServiceProperties.new }
- let(:response) {
- response = mock()
- response.stubs(:success?).returns(true)
- response
- }
-
- let(:service_properties_uri) { URI.parse 'http://dummy.uri/service/properties' }
-
- before do
- Azure::Service::Serialization.stubs(:service_properties_to_xml).with(service_properties).returns(service_properties_xml)
- subject.stubs(:service_properties_uri).returns(service_properties_uri)
- subject.stubs(:call).with(:put, service_properties_uri, service_properties_xml).returns(response)
- end
-
- it "calls the service_properties_uri method to determine the correct uri" do
- subject.expects(:service_properties_uri).returns(service_properties_uri)
- subject.set_service_properties service_properties
- end
-
- it "posts to the HTTP API" do
- subject.expects(:call).with(:put, service_properties_uri, service_properties_xml).returns(response)
- subject.set_service_properties service_properties
- end
-
- it "serializes the StorageServiceProperties object to xml" do
- Azure::Service::Serialization.expects(:service_properties_to_xml).with(service_properties).returns(service_properties_xml)
- subject.set_service_properties service_properties
- end
-
- it "returns nil on success" do
- result = subject.set_service_properties service_properties
- result.must_equal nil
- end
- end
-
- describe "service_properties_uri" do
- it "returns an instance of URI" do
- subject.service_properties_uri.must_be_kind_of URI
- end
-
- it "uses the value of the host property as the base of the url" do
- subject.service_properties_uri.to_s.must_include subject.host
- subject.host = "http://something.else"
- subject.service_properties_uri.to_s.must_include subject.host
- end
-
- it "sets a query string that specifies the storage service properties endpoint" do
- subject.service_properties_uri.query.must_include "restype=service&comp=properties"
- end
- end
-
- describe "#add_metadata_to_headers" do
- it "prefixes header names with x-ms-meta- but does not modify the values" do
- headers = {}
- subject.add_metadata_to_headers({"Foo"=> "Bar"}, headers)
- headers.keys.must_include "x-ms-meta-Foo"
- headers["x-ms-meta-Foo"].must_equal "Bar"
- end
-
- it "updates any existing x-ms-meta-* headers with the new values" do
- headers = { "x-ms-meta-Foo"=> "Foo"}
- subject.add_metadata_to_headers({"Foo"=> "Bar"}, headers)
- headers["x-ms-meta-Foo"].must_equal "Bar"
- end
- end
-
- describe "#generate_uri" do
- it "returns a URI instance" do
- subject.generate_uri().must_be_kind_of ::URI
- end
-
- describe "when called with no arguments" do
- it "returns the StorageService host URL" do
- subject.generate_uri().to_s.must_equal "http://dumyhost.uri/"
- end
- end
-
- describe "when passed an optional path" do
- it "adds the path to the host url" do
- subject.generate_uri("resource/entity/").path.must_equal "/resource/entity/"
- end
-
- it "correctly joins the path if the host url contained a path" do
- subject.host = "http://dummy.uri/host/path"
- subject.generate_uri("resource/entity/").path.must_equal "/host/path/resource/entity/"
- end
- end
-
- describe "when passed an Hash of query parameters" do
-
- it "encodes the keys" do
- subject.generate_uri('',{"key !" => "value"}).query.must_include "key+%21=value"
- end
-
- it "encodes the values" do
- subject.generate_uri('',{"key" => "value !"}).query.must_include "key=value+%21"
- end
-
- it "sets the query string to the encoded result" do
- subject.generate_uri('',{ "key" => "value !", "key !"=>"value"}).query.must_equal "key=value+%21&key+%21=value"
- end
-
- describe "when the query parameters include a timeout key" do
- it "overrides the default timeout" do
- subject.generate_uri('', {"timeout" => 45}).query.must_equal "timeout=45"
- end
- end
-
- describe "when the query parameters are nil" do
- it "does not include any query parameters" do
- subject.generate_uri('', nil).query.must_equal nil
- end
- end
- end
- end
+#-------------------------------------------------------------------------
+# # Copyright (c) Microsoft and contributors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#--------------------------------------------------------------------------
+require "test_helper"
+require "azure/service/storage_service"
+require "azure/core/http/http_request"
+require "azure/core/http/signer_filter"
+require "azure/service/storage_service_properties"
+
+describe Azure::Service::StorageService do
+
+ let(:uri){ URI.parse "http://dummy.uri/resource" }
+ let(:method){ :get }
+
+ subject do
+ storage_service = Azure::Service::StorageService.new
+ storage_service.host = "http://dumyhost.uri"
+ storage_service
+ end
+
+ describe "#call" do
+ let(:mock_request){ mock() }
+ let(:mock_signer_filter){ mock() }
+
+ before do
+ Azure::Core::Http::HttpRequest.stubs(:new).with(method, uri, nil).returns(mock_request)
+ Azure::Core::Http::SignerFilter.stubs(:new).returns(mock_signer_filter)
+
+ mock_request.expects(:call)
+ end
+
+ it "adds a SignerFilter to the HTTP pipeline" do
+ mock_request.expects(:with_filter).with(mock_signer_filter)
+ subject.call(method, uri)
+ end
+
+ describe "when passed the optional headers arguement" do
+ before do
+ mock_request.expects(:with_filter).with(mock_signer_filter)
+ end
+
+ let(:mock_headers) {{
+ "Other-Header"=>"SomeValue",
+ "Custom-Header"=>"PreviousValue",
+ "connection"=>"PreviousValue"
+ }}
+
+ it "merges the custom headers with the HttpRequest headers" do
+ mock_request.expects(:headers).returns(mock_headers).at_least(2)
+ subject.call(method, uri, nil, { "Custom-Header"=>"CustomValue"} )
+
+ mock_headers["Other-Header"].must_equal "SomeValue"
+ mock_headers["Custom-Header"].must_equal "CustomValue"
+ mock_headers["connection"].must_equal "keep-alive"
+ end
+ end
+
+ describe "when passed the optional body arguement" do
+ before do
+ mock_request.expects(:with_filter).with(mock_signer_filter)
+ end
+
+ it "passes the body to the to HttpRequest" do
+ Azure::Core::Http::HttpRequest.stubs(:new).with(method, uri, 'body').returns(mock_request)
+ subject.call(method, uri, "body")
+ end
+ end
+
+ describe "when with_filter was called" do
+ before do
+ mock_request.expects(:with_filter).with(mock_signer_filter)
+ end
+
+ it "builds the HTTP pipeline by passing the filters to the HTTPRequest" do
+ filter = mock()
+ filter1 = mock()
+
+ subject.with_filter filter
+ subject.with_filter filter1
+
+ mock_request.expects(:with_filter).with(filter)
+ mock_request.expects(:with_filter).with(filter1)
+
+ subject.call(method, uri)
+ end
+ end
+ end
+
+ describe "#with_filter" do
+ it "appends filters to a list of filters that will be used in the #call method" do
+ initial_length = subject.filters.length
+ filter = mock()
+ subject.with_filter filter
+ subject.filters.length.must_equal initial_length + 1
+ end
+
+ it "accepts object instances as filters" do
+ filter = mock()
+ subject.with_filter filter
+ subject.filters.last.must_equal filter
+ end
+
+ it "accepts blocks as filters" do
+ subject.with_filter do |a,b| end
+ subject.filters.last.class.must_equal Proc
+ end
+
+ it "preserves the order of the filters" do
+ subject.filters = []
+
+ filter = mock()
+ filter1 = mock()
+
+ subject.with_filter filter
+ subject.with_filter filter1
+ subject.with_filter do |a,b| end
+
+ subject.filters.first.must_equal filter
+ subject.filters[1].must_equal filter1
+ subject.filters.last.class.must_equal Proc
+ end
+ end
+
+ describe "#get_service_properties" do
+ let(:service_properties_xml) { Fixtures["storage_service_properties"] }
+ let(:service_properties) { Azure::Service::StorageServiceProperties.new }
+ let(:response) {
+ response = mock()
+ response.stubs(:body).returns(service_properties_xml)
+ response
+ }
+
+ let(:service_properties_uri) { URI.parse 'http://dummy.uri/service/properties' }
+
+ before do
+ Azure::Service::Serialization.stubs(:service_properties_from_xml).with(service_properties_xml).returns(service_properties)
+ subject.stubs(:service_properties_uri).returns(service_properties_uri)
+ subject.stubs(:call).with(:get, service_properties_uri).returns(response)
+ end
+
+ it "calls the service_properties_uri method to determine the correct uri" do
+ subject.expects(:service_properties_uri).returns(service_properties_uri)
+ subject.get_service_properties
+ end
+
+ it "gets the response from the HTTP API" do
+ subject.expects(:call).with(:get, service_properties_uri).returns(response)
+ subject.get_service_properties
+ end
+
+ it "deserializes the response from xml" do
+ Azure::Service::Serialization.expects(:service_properties_from_xml).with(service_properties_xml).returns(service_properties)
+ subject.get_service_properties
+ end
+
+ it "returns a StorageServiceProperties instance" do
+ result = subject.get_service_properties
+ result.must_be_kind_of Azure::Service::StorageServiceProperties
+ end
+ end
+
+ describe "#set_service_properties" do
+ let(:service_properties_xml) { Fixtures["storage_service_properties"] }
+ let(:service_properties) { Azure::Service::StorageServiceProperties.new }
+ let(:response) {
+ response = mock()
+ response.stubs(:success?).returns(true)
+ response
+ }
+
+ let(:service_properties_uri) { URI.parse 'http://dummy.uri/service/properties' }
+
+ before do
+ Azure::Service::Serialization.stubs(:service_properties_to_xml).with(service_properties).returns(service_properties_xml)
+ subject.stubs(:service_properties_uri).returns(service_properties_uri)
+ subject.stubs(:call).with(:put, service_properties_uri, service_properties_xml).returns(response)
+ end
+
+ it "calls the service_properties_uri method to determine the correct uri" do
+ subject.expects(:service_properties_uri).returns(service_properties_uri)
+ subject.set_service_properties service_properties
+ end
+
+ it "posts to the HTTP API" do
+ subject.expects(:call).with(:put, service_properties_uri, service_properties_xml).returns(response)
+ subject.set_service_properties service_properties
+ end
+
+ it "serializes the StorageServiceProperties object to xml" do
+ Azure::Service::Serialization.expects(:service_properties_to_xml).with(service_properties).returns(service_properties_xml)
+ subject.set_service_properties service_properties
+ end
+
+ it "returns nil on success" do
+ result = subject.set_service_properties service_properties
+ result.must_equal nil
+ end
+ end
+
+ describe "service_properties_uri" do
+ it "returns an instance of URI" do
+ subject.service_properties_uri.must_be_kind_of URI
+ end
+
+ it "uses the value of the host property as the base of the url" do
+ subject.service_properties_uri.to_s.must_include subject.host
+ subject.host = "http://something.else"
+ subject.service_properties_uri.to_s.must_include subject.host
+ end
+
+ it "sets a query string that specifies the storage service properties endpoint" do
+ subject.service_properties_uri.query.must_include "restype=service&comp=properties"
+ end
+ end
+
+ describe "#add_metadata_to_headers" do
+ it "prefixes header names with x-ms-meta- but does not modify the values" do
+ headers = {}
+ subject.add_metadata_to_headers({"Foo"=> "Bar"}, headers)
+ headers.keys.must_include "x-ms-meta-Foo"
+ headers["x-ms-meta-Foo"].must_equal "Bar"
+ end
+
+ it "updates any existing x-ms-meta-* headers with the new values" do
+ headers = { "x-ms-meta-Foo"=> "Foo"}
+ subject.add_metadata_to_headers({"Foo"=> "Bar"}, headers)
+ headers["x-ms-meta-Foo"].must_equal "Bar"
+ end
+ end
+
+ describe "#generate_uri" do
+ it "returns a URI instance" do
+ subject.generate_uri().must_be_kind_of ::URI
+ end
+
+ describe "when called with no arguments" do
+ it "returns the StorageService host URL" do
+ subject.generate_uri().to_s.must_equal "http://dumyhost.uri/"
+ end
+ end
+
+ describe "when passed an optional path" do
+ it "adds the path to the host url" do
+ subject.generate_uri("resource/entity/").path.must_equal "/resource/entity/"
+ end
+
+ it "correctly joins the path if the host url contained a path" do
+ subject.host = "http://dummy.uri/host/path"
+ subject.generate_uri("resource/entity/").path.must_equal "/host/path/resource/entity/"
+ end
+ end
+
+ describe "when passed an Hash of query parameters" do
+
+ it "encodes the keys" do
+ subject.generate_uri('',{"key !" => "value"}).query.must_include "key+%21=value"
+ end
+
+ it "encodes the values" do
+ subject.generate_uri('',{"key" => "value !"}).query.must_include "key=value+%21"
+ end
+
+ it "sets the query string to the encoded result" do
+ subject.generate_uri('',{ "key" => "value !", "key !"=>"value"}).query.must_equal "key=value+%21&key+%21=value"
+ end
+
+ describe "when the query parameters include a timeout key" do
+ it "overrides the default timeout" do
+ subject.generate_uri('', {"timeout" => 45}).query.must_equal "timeout=45"
+ end
+ end
+
+ describe "when the query parameters are nil" do
+ it "does not include any query parameters" do
+ subject.generate_uri('', nil).query.must_equal nil
+ end
+ end
+ end
+ end
end
\ No newline at end of file