[PATCH aeolus-image-rubygem] Resolve VCR problem with matching requests
Tomas Sedovic
tsedovic at redhat.com
Thu Feb 23 13:43:14 UTC 2012
On 02/22/2012 04:31 PM, Petr Blaho wrote:
> Refactored some tests code to bypass VCR request matching problem
>
> https://bugzilla.redhat.com/show_bug.cgi?id=791216
> ---
> spec/models/factory/base.rb | 82 ------------------------
> spec/models/factory/base_spec.rb | 94 ++++++++++++++++++++++++++++
> spec/models/factory/builder.rb | 31 ---------
> spec/models/factory/builder_spec.rb | 31 +++++++++
> spec/models/factory/provider_image.rb | 21 ------
> spec/models/factory/provider_image_spec.rb | 21 ++++++
> spec/models/factory/target_image.rb | 21 ------
> spec/models/factory/target_image_spec.rb | 21 ++++++
> spec/spec_helper.rb | 1 +
> spec/vcr/cassettes/oauth.yml | 80 -----------------------
> spec/vcr/cassettes/oauth_fail_invalid.yml | 30 +++++++++
> spec/vcr/cassettes/oauth_fail_no.yml | 22 +++++++
> spec/vcr/cassettes/oauth_success_valid.yml | 30 +++++++++
> spec/vcr_setup.rb | 16 +++---
> 14 files changed, 258 insertions(+), 243 deletions(-)
> delete mode 100644 spec/models/factory/base.rb
> create mode 100644 spec/models/factory/base_spec.rb
> delete mode 100644 spec/models/factory/builder.rb
> create mode 100644 spec/models/factory/builder_spec.rb
> delete mode 100644 spec/models/factory/provider_image.rb
> create mode 100644 spec/models/factory/provider_image_spec.rb
> delete mode 100644 spec/models/factory/target_image.rb
> create mode 100644 spec/models/factory/target_image_spec.rb
> delete mode 100644 spec/vcr/cassettes/oauth.yml
> create mode 100644 spec/vcr/cassettes/oauth_fail_invalid.yml
> create mode 100644 spec/vcr/cassettes/oauth_fail_no.yml
> create mode 100644 spec/vcr/cassettes/oauth_success_valid.yml
>
> diff --git a/spec/models/factory/base.rb b/spec/models/factory/base.rb
> deleted file mode 100644
> index 86b8a70..0000000
> --- a/spec/models/factory/base.rb
> +++ /dev/null
> @@ -1,82 +0,0 @@
> -#
> -# Copyright 2011 Red Hat, Inc.
> -#
> -# 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 'spec_helper'
> -require 'timecop'
> -
> -describe Aeolus::Image::Factory::Base do
> -
> - before(:each) do
> - Timecop.travel(Time.local(2011, 10, 17, 13, 38, 20))
> - end
> -
> - after(:each) do
> - Timecop.return
> - end
> -
> - it "should not use_oauth? if configuration is missing" do
> - Aeolus::Image::Factory::Base.config = {
> - :site => 'http://127.0.0.1:8075/imagefactory'
> - }
> - Aeolus::Image::Factory::Base.use_oauth?.should be_false
> - end
> -
> - it "should use_oauth? if configuration is present" do
> - Aeolus::Image::Factory::Base.config = {
> - :site => 'http://127.0.0.1:8075/imagefactory',
> - :consumer_key => 'something',
> - :consumer_secret => 'anything'
> - }
> - Aeolus::Image::Factory::Base.use_oauth?.should be_true
> - end
> -
> - it "should succeed with valid OAuth credentials" do
> - Aeolus::Image::Factory::Base.config = {
> - :site => 'http://127.0.0.1:8075/imagefactory',
> - :consumer_key => 'mock-key',
> - :consumer_secret => 'mock-secret'
> - }
> - template = "<template>\n<name>f14jeos</name>\n<os>\n<name>Fedora</name>\n<version>14</version>\n<arch>x86_64</arch>\n<install type='url'>\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\n</install>\n</os>\n<description>Fedora 14</description>\n</template>\n"
> - img = Aeolus::Image::Factory::Image.new(:targets => 'ec2', :template => template)
> - img.save!.should be_true
> - end
> -
> - it "should fail with invalid OAuth credentials" do
> - Aeolus::Image::Factory::Base.config = {
> - :site => 'http://127.0.0.1:8075/imagefactory',
> - :consumer_key => 'mock-key',
> - :consumer_secret => 'wrong-secret'
> - }
> - template = "<template>\n<name>f14jeos</name>\n<os>\n<name>Fedora 2</name>\n<version>14</version>\n<arch>x86_64</arch>\n<install type='url'>\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\n</install>\n</os>\n<description>Fedora 14</description>\n</template>\n"
> - img = Aeolus::Image::Factory::Image.new(:targets => 'ec2', :template => template)
> - lambda {
> - img.save!
> - }.should raise_error(ActiveResource::UnauthorizedAccess)
> - end
> -
> - it "should fail with no OAuth credentials" do
> - Aeolus::Image::Factory::Base.config = {
> - :site => 'http://127.0.0.1:8075/imagefactory'
> - }
> - template = "<template>\n<name>f14jeos</name>\n<os>\n<name>Fedora 3</name>\n<version>14</version>\n<arch>x86_64</arch>\n<install type='url'>\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\n</install>\n</os>\n<description>Fedora 14</description>\n</template>\n"
> - img = Aeolus::Image::Factory::Image.new(:targets => 'ec2', :template => template)
> - # ServerError is actually not what _should_ be returned, but a bug means that's what we get at the moment.
> - # When the bug is fixed, we need to update to test for that.
> - lambda {
> - img.save!.should be_false
> - }.should raise_error(ActiveResource::ServerError)
> - end
> -
> -end
> diff --git a/spec/models/factory/base_spec.rb b/spec/models/factory/base_spec.rb
> new file mode 100644
> index 0000000..7dadc1a
> --- /dev/null
> +++ b/spec/models/factory/base_spec.rb
> @@ -0,0 +1,94 @@
> +#
> +# Copyright 2011 Red Hat, Inc.
> +#
> +# 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 'spec_helper'
> +require 'timecop'
> +
> +describe Aeolus::Image::Factory::Base do
> +
> + before(:each) do
> + Timecop.travel(Time.local(2011, 10, 17, 13, 38, 20))
> + end
> +
> + after(:each) do
> + Timecop.return
> + end
> +
> + it "should not use_oauth? if configuration is missing" do
> + Aeolus::Image::Factory::Base.config = {
> + :site => 'http://127.0.0.1:8075/imagefactory'
> + }
> + Aeolus::Image::Factory::Base.use_oauth?.should be_false
> + end
> +
> + it "should use_oauth? if configuration is present" do
> + Aeolus::Image::Factory::Base.config = {
> + :site => 'http://127.0.0.1:8075/imagefactory',
> + :consumer_key => 'something',
> + :consumer_secret => 'anything'
> + }
> + Aeolus::Image::Factory::Base.use_oauth?.should be_true
> + end
> +
> + context do
> + use_vcr_cassette "oauth_success_valid"
> +
> + it "should succeed with valid OAuth credentials" do
> + Aeolus::Image::Factory::Base.config = {
> + :site => 'http://127.0.0.1:8075/imagefactory',
> + :consumer_key => 'mock-key',
> + :consumer_secret => 'mock-secret'
> + }
> + template = "<template>\n<name>f14jeos</name>\n<os>\n<name>Fedora</name>\n<version>14</version>\n<arch>x86_64</arch>\n<install type='url'>\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\n</install>\n</os>\n<description>Fedora 14</description>\n</template>\n"
> + img = Aeolus::Image::Factory::Image.new(:targets => 'ec2', :template => template)
> + img.save!.should be_true
> + end
> + end
> +
> + context do
> + use_vcr_cassette "oauth_fail_invalid"
> +
> + it "should fail with invalid OAuth credentials" do
> + Aeolus::Image::Factory::Base.config = {
> + :site => 'http://127.0.0.1:8075/imagefactory',
> + :consumer_key => 'mock-key',
> + :consumer_secret => 'wrong-secret'
> + }
> + template = "<template>\n<name>f14jeos</name>\n<os>\n<name>Fedora 2</name>\n<version>14</version>\n<arch>x86_64</arch>\n<install type='url'>\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\n</install>\n</os>\n<description>Fedora 14</description>\n</template>\n"
> + img = Aeolus::Image::Factory::Image.new(:targets => 'ec2', :template => template)
> + lambda {
> + img.save!
> + }.should raise_error(ActiveResource::UnauthorizedAccess)
> + end
> + end
> +
> + context do
> + use_vcr_cassette "oauth_fail_no"
> +
> + it "should fail with no OAuth credentials" do
> + Aeolus::Image::Factory::Base.config = {
> + :site => 'http://127.0.0.1:8075/imagefactory'
> + }
> + template = "<template>\n<name>f14jeos</name>\n<os>\n<name>Fedora 3</name>\n<version>14</version>\n<arch>x86_64</arch>\n<install type='url'>\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\n</install>\n</os>\n<description>Fedora 14</description>\n</template>\n"
> + img = Aeolus::Image::Factory::Image.new(:targets => 'ec2', :template => template)
> + # ServerError is actually not what _should_ be returned, but a bug means that's what we get at the moment.
> + # When the bug is fixed, we need to update to test for that.
> + lambda {
> + img.save!.should be_false
> + }.should raise_error(ActiveResource::ServerError)
> + end
> + end
> +
> +end
> diff --git a/spec/models/factory/builder.rb b/spec/models/factory/builder.rb
> deleted file mode 100644
> index 8714244..0000000
> --- a/spec/models/factory/builder.rb
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -#
> -# Copyright 2011 Red Hat, Inc.
> -#
> -# 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 'spec_helper'
> -require 'timecop'
> -
> -describe Aeolus::Image::Factory::Builder do
> - VCR::Cassette.new 'builder', :record => :new_episodes, :match_requests_on => [:method, :uri, :body]
> - it "should get builder object" do
> - Aeolus::Image::Factory::Base.config = {
> - :site => 'http://127.0.0.1:8075/imagefactory'
> - }
> - builder = Aeolus::Image::Factory::Builder.first
> - builder.builders.should_not be_empty
> - build = builder.builders.first
> - builder.find_active_build(build.build_id, build.target).should_not be_nil
> - builder.find_active_build(build.build_id, 'invalid_target').should be_nil
> - end
> -end
> diff --git a/spec/models/factory/builder_spec.rb b/spec/models/factory/builder_spec.rb
> new file mode 100644
> index 0000000..8714244
> --- /dev/null
> +++ b/spec/models/factory/builder_spec.rb
> @@ -0,0 +1,31 @@
> +#
> +# Copyright 2011 Red Hat, Inc.
> +#
> +# 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 'spec_helper'
> +require 'timecop'
> +
> +describe Aeolus::Image::Factory::Builder do
> + VCR::Cassette.new 'builder', :record => :new_episodes, :match_requests_on => [:method, :uri, :body]
> + it "should get builder object" do
> + Aeolus::Image::Factory::Base.config = {
> + :site => 'http://127.0.0.1:8075/imagefactory'
> + }
> + builder = Aeolus::Image::Factory::Builder.first
> + builder.builders.should_not be_empty
> + build = builder.builders.first
> + builder.find_active_build(build.build_id, build.target).should_not be_nil
> + builder.find_active_build(build.build_id, 'invalid_target').should be_nil
> + end
> +end
> diff --git a/spec/models/factory/provider_image.rb b/spec/models/factory/provider_image.rb
> deleted file mode 100644
> index 98983be..0000000
> --- a/spec/models/factory/provider_image.rb
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -require 'spec_helper'
> -
> -module Aeolus
> - module Image
> - module Factory
> - describe ProviderImage do
> - it "should return nil when a builder is found but operation is build" do
> - @builder = mock(Builder, :operation => "build", :status => "PUSHING")
> - Builder.stub!(:find).and_return(@builder)
> - ProviderImage.status("1234").should == nil
> - end
> -
> - it "should return a builder when a builder is found and operation is push" do
> - @builder = mock(Builder, :operation => "push", :status => "PUSHING")
> - Builder.stub!(:find).and_return(@builder)
> - ProviderImage.status("1234").should == "PUSHING"
> - end
> - end
> - end
> - end
> -end
> \ No newline at end of file
> diff --git a/spec/models/factory/provider_image_spec.rb b/spec/models/factory/provider_image_spec.rb
> new file mode 100644
> index 0000000..98983be
> --- /dev/null
> +++ b/spec/models/factory/provider_image_spec.rb
> @@ -0,0 +1,21 @@
> +require 'spec_helper'
> +
> +module Aeolus
> + module Image
> + module Factory
> + describe ProviderImage do
> + it "should return nil when a builder is found but operation is build" do
> + @builder = mock(Builder, :operation => "build", :status => "PUSHING")
> + Builder.stub!(:find).and_return(@builder)
> + ProviderImage.status("1234").should == nil
> + end
> +
> + it "should return a builder when a builder is found and operation is push" do
> + @builder = mock(Builder, :operation => "push", :status => "PUSHING")
> + Builder.stub!(:find).and_return(@builder)
> + ProviderImage.status("1234").should == "PUSHING"
> + end
> + end
> + end
> + end
> +end
> \ No newline at end of file
> diff --git a/spec/models/factory/target_image.rb b/spec/models/factory/target_image.rb
> deleted file mode 100644
> index c88295c..0000000
> --- a/spec/models/factory/target_image.rb
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -require 'spec_helper'
> -
> -module Aeolus
> - module Image
> - module Factory
> - describe TargetImage do
> - it "should return nil when a builder is found but operation is push" do
> - @builder = mock(Builder, :operation => "push")
> - Builder.stub!(:find).and_return(@builder)
> - TargetImage.status("1234").should == nil
> - end
> -
> - it "should return a builder when a builder is found and operation is build" do
> - @builder = mock(Builder, :operation => "build", :status => "BUILDING")
> - Builder.stub!(:find).and_return(@builder)
> - TargetImage.status("1234").should == "BUILDING"
> - end
> - end
> - end
> - end
> -end
> \ No newline at end of file
> diff --git a/spec/models/factory/target_image_spec.rb b/spec/models/factory/target_image_spec.rb
> new file mode 100644
> index 0000000..c88295c
> --- /dev/null
> +++ b/spec/models/factory/target_image_spec.rb
> @@ -0,0 +1,21 @@
> +require 'spec_helper'
> +
> +module Aeolus
> + module Image
> + module Factory
> + describe TargetImage do
> + it "should return nil when a builder is found but operation is push" do
> + @builder = mock(Builder, :operation => "push")
> + Builder.stub!(:find).and_return(@builder)
> + TargetImage.status("1234").should == nil
> + end
> +
> + it "should return a builder when a builder is found and operation is build" do
> + @builder = mock(Builder, :operation => "build", :status => "BUILDING")
> + Builder.stub!(:find).and_return(@builder)
> + TargetImage.status("1234").should == "BUILDING"
> + end
> + end
> + end
> + end
> +end
> \ No newline at end of file
> diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
> index bd4a318..7761ead 100644
> --- a/spec/spec_helper.rb
> +++ b/spec/spec_helper.rb
> @@ -28,6 +28,7 @@ require 'warehouse/provider_image'
> require 'warehouse/template'
>
> RSpec.configure do |config|
> + config.extend VCR::RSpec::Macros
> config.before(:all) do
> # Aeolus::Image::BaseCommand.class_eval do
> # def load_config
> diff --git a/spec/vcr/cassettes/oauth.yml b/spec/vcr/cassettes/oauth.yml
> deleted file mode 100644
> index 9f8c7fa..0000000
> --- a/spec/vcr/cassettes/oauth.yml
> +++ /dev/null
> @@ -1,80 +0,0 @@
> ----
> -- !ruby/struct:VCR::HTTPInteraction
> - request: !ruby/struct:VCR::Request
> - method: :post
> - uri: http://127.0.0.1:8075/imagefactory/images
> - body: "{\"image\":{\"targets\":\"ec2\",\"template\":\"<template>\\n<name>f14jeos</name>\\n<os>\\n<name>Fedora</name>\\n<version>14</version>\\n<arch>x86_64</arch>\\n<install type='url'>\\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\\n</install>\\n</os>\\n<description>Fedora 14</description>\\n</template>\\n\"}}"
> - headers:
> - user-agent:
> - - OAuth gem v0.4.4
> - content-type:
> - - application/json
> - authorization:
> - - OAuth oauth_body_hash="iLFFmVptnUF4tv9PvDNdNxK%2FSOs%3D", oauth_consumer_key="mock-key", oauth_nonce="dESbWyTyKA0UTHekLdt7DOSOFh6tYU39Mw7LpFkts", oauth_signature="ydhBMjipuQ7ARZT5xfOrvShZfHI%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318873100", oauth_version="1.0"
> - content-length:
> - - "365"
> - response: !ruby/struct:VCR::Response
> - status: !ruby/struct:VCR::ResponseStatus
> - code: 202
> - message: Accepted
> - headers:
> - content-type:
> - - application/json
> - server:
> - - PasteWSGIServer/0.5 Python/2.7.1
> - date:
> - - Mon, 17 Oct 2011 17:38:15 GMT
> - content-length:
> - - "640"
> - body: "{\"_type\": \"image\", \"href\": \"http://127.0.0.1:8075/imagefactory/images/18f1b17e-3fdc-4931-a5d6-f4581e5f5f85\", \"id\": \"18f1b17e-3fdc-4931-a5d6-f4581e5f5f85\", \"build\": {\"target_images\": [{\"_type\": \"target_image\", \"href\": \"http://127.0.0.1:8075/imagefactory/images/18f1b17e-3fdc-4931-a5d6-f4581e5f5f85/builds/6d715c2f-8dc5-46eb-86ad-509366e64252/target_images/dd9c27c5-0bdb-4670-b172-46a3cf2101a6\", \"id\": \"dd9c27c5-0bdb-4670-b172-46a3cf2101a6\"}], \"_type\": \"build\", \"href\": \"http://127.0.0.1:8075/imagefactory/images/18f1b17e-3fdc-4931-a5d6-f4581e5f5f85/builds/6d715c2f-8dc5-46eb-86ad-509366e64252\", \"id\": \"6d715c2f-8dc5-46eb-86ad-509366e64252\"}}"
> - http_version: "1.1"
> -- !ruby/struct:VCR::HTTPInteraction
> - request: !ruby/struct:VCR::Request
> - method: :post
> - uri: http://127.0.0.1:8075/imagefactory/images
> - body: "{\"image\":{\"targets\":\"ec2\",\"template\":\"<template>\\n<name>f14jeos</name>\\n<os>\\n<name>Fedora 2</name>\\n<version>14</version>\\n<arch>x86_64</arch>\\n<install type='url'>\\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\\n</install>\\n</os>\\n<description>Fedora 14</description>\\n</template>\\n\"}}"
> - headers:
> - content-type:
> - - application/json
> - user-agent:
> - - OAuth gem v0.4.4
> - authorization:
> - - OAuth oauth_body_hash="tEAlC3IwCGiB%2FNSQRUOwBifTHmY%3D", oauth_consumer_key="mock-key", oauth_nonce="jeQp5OlYxoCbbflwdM9nfg306BUVfmidPYKV7qPOs", oauth_signature="ERZpwVUR4qdBjfeBTJQtem%2FnKTo%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318873100", oauth_version="1.0"
> - content-length:
> - - "367"
> - response: !ruby/struct:VCR::Response
> - status: !ruby/struct:VCR::ResponseStatus
> - code: 401
> - message: Unauthorized
> - headers:
> - content-type:
> - - text/html; charset=UTF-8
> - date:
> - - Mon, 17 Oct 2011 17:38:15 GMT
> - server:
> - - PasteWSGIServer/0.5 Python/2.7.1
> - content-length:
> - - "0"
> - body:
> - http_version: "1.1"
> -- !ruby/struct:VCR::HTTPInteraction
> - request: !ruby/struct:VCR::Request
> - method: :post
> - uri: http://127.0.0.1:8075/imagefactory/images
> - body: "{\"image\":{\"targets\":\"ec2\",\"template\":\"<template>\\n<name>f14jeos</name>\\n<os>\\n<name>Fedora 3</name>\\n<version>14</version>\\n<arch>x86_64</arch>\\n<install type='url'>\\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\\n</install>\\n</os>\\n<description>Fedora 14</description>\\n</template>\\n\"}}"
> - headers:
> - content-type:
> - - application/json
> - response: !ruby/struct:VCR::Response
> - status: !ruby/struct:VCR::ResponseStatus
> - code: 500
> - message: Internal Server Error
> - headers:
> - content-type:
> - - text/html; charset=UTF-8
> - server:
> - - PasteWSGIServer/0.5 Python/2.7.1
> - date:
> - - Mon, 17 Oct 2011 17:38:15 GMT
> - body: "'NoneType' object has no attribute '_get_timestamp_nonce'"
> - http_version: "1.1"
> diff --git a/spec/vcr/cassettes/oauth_fail_invalid.yml b/spec/vcr/cassettes/oauth_fail_invalid.yml
> new file mode 100644
> index 0000000..d7488e4
> --- /dev/null
> +++ b/spec/vcr/cassettes/oauth_fail_invalid.yml
> @@ -0,0 +1,30 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> + request: !ruby/struct:VCR::Request
> + method: :post
> + uri: http://127.0.0.1:8075/imagefactory/images
> + body: "{\"image\":{\"targets\":\"ec2\",\"template\":\"<template>\\n<name>f14jeos</name>\\n<os>\\n<name>Fedora 2</name>\\n<version>14</version>\\n<arch>x86_64</arch>\\n<install type='url'>\\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\\n</install>\\n</os>\\n<description>Fedora 14</description>\\n</template>\\n\"}}"
> + headers:
> + content-type:
> + - application/json
> + user-agent:
> + - OAuth gem v0.4.4
> + authorization:
> + - OAuth oauth_body_hash="tEAlC3IwCGiB%2FNSQRUOwBifTHmY%3D", oauth_consumer_key="mock-key", oauth_nonce="jeQp5OlYxoCbbflwdM9nfg306BUVfmidPYKV7qPOs", oauth_signature="ERZpwVUR4qdBjfeBTJQtem%2FnKTo%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318873100", oauth_version="1.0"
> + content-length:
> + - "367"
> + response: !ruby/struct:VCR::Response
> + status: !ruby/struct:VCR::ResponseStatus
> + code: 401
> + message: Unauthorized
> + headers:
> + content-type:
> + - text/html; charset=UTF-8
> + date:
> + - Mon, 17 Oct 2011 17:38:15 GMT
> + server:
> + - PasteWSGIServer/0.5 Python/2.7.1
> + content-length:
> + - "0"
> + body:
> + http_version: "1.1"
> diff --git a/spec/vcr/cassettes/oauth_fail_no.yml b/spec/vcr/cassettes/oauth_fail_no.yml
> new file mode 100644
> index 0000000..3490391
> --- /dev/null
> +++ b/spec/vcr/cassettes/oauth_fail_no.yml
> @@ -0,0 +1,22 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> + request: !ruby/struct:VCR::Request
> + method: :post
> + uri: http://127.0.0.1:8075/imagefactory/images
> + body: "{\"image\":{\"targets\":\"ec2\",\"template\":\"<template>\\n<name>f14jeos</name>\\n<os>\\n<name>Fedora 3</name>\\n<version>14</version>\\n<arch>x86_64</arch>\\n<install type='url'>\\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\\n</install>\\n</os>\\n<description>Fedora 14</description>\\n</template>\\n\"}}"
> + headers:
> + content-type:
> + - application/json
> + response: !ruby/struct:VCR::Response
> + status: !ruby/struct:VCR::ResponseStatus
> + code: 500
> + message: Internal Server Error
> + headers:
> + content-type:
> + - text/html; charset=UTF-8
> + server:
> + - PasteWSGIServer/0.5 Python/2.7.1
> + date:
> + - Mon, 17 Oct 2011 17:38:15 GMT
> + body: "'NoneType' object has no attribute '_get_timestamp_nonce'"
> + http_version: "1.1"
> diff --git a/spec/vcr/cassettes/oauth_success_valid.yml b/spec/vcr/cassettes/oauth_success_valid.yml
> new file mode 100644
> index 0000000..17da22d
> --- /dev/null
> +++ b/spec/vcr/cassettes/oauth_success_valid.yml
> @@ -0,0 +1,30 @@
> +---
> +- !ruby/struct:VCR::HTTPInteraction
> + request: !ruby/struct:VCR::Request
> + method: :post
> + uri: http://127.0.0.1:8075/imagefactory/images
> + body: "{\"image\":{\"targets\":\"ec2\",\"template\":\"<template>\\n<name>f14jeos</name>\\n<os>\\n<name>Fedora</name>\\n<version>14</version>\\n<arch>x86_64</arch>\\n<install type='url'>\\n<url>http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86_64/os/</url>\\n</install>\\n</os>\\n<description>Fedora 14</description>\\n</template>\\n\"}}"
> + headers:
> + user-agent:
> + - OAuth gem v0.4.4
> + content-type:
> + - application/json
> + authorization:
> + - OAuth oauth_body_hash="iLFFmVptnUF4tv9PvDNdNxK%2FSOs%3D", oauth_consumer_key="mock-key", oauth_nonce="dESbWyTyKA0UTHekLdt7DOSOFh6tYU39Mw7LpFkts", oauth_signature="ydhBMjipuQ7ARZT5xfOrvShZfHI%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318873100", oauth_version="1.0"
> + content-length:
> + - "365"
> + response: !ruby/struct:VCR::Response
> + status: !ruby/struct:VCR::ResponseStatus
> + code: 202
> + message: Accepted
> + headers:
> + content-type:
> + - application/json
> + server:
> + - PasteWSGIServer/0.5 Python/2.7.1
> + date:
> + - Mon, 17 Oct 2011 17:38:15 GMT
> + content-length:
> + - "640"
> + body: "{\"_type\": \"image\", \"href\": \"http://127.0.0.1:8075/imagefactory/images/18f1b17e-3fdc-4931-a5d6-f4581e5f5f85\", \"id\": \"18f1b17e-3fdc-4931-a5d6-f4581e5f5f85\", \"build\": {\"target_images\": [{\"_type\": \"target_image\", \"href\": \"http://127.0.0.1:8075/imagefactory/images/18f1b17e-3fdc-4931-a5d6-f4581e5f5f85/builds/6d715c2f-8dc5-46eb-86ad-509366e64252/target_images/dd9c27c5-0bdb-4670-b172-46a3cf2101a6\", \"id\": \"dd9c27c5-0bdb-4670-b172-46a3cf2101a6\"}], \"_type\": \"build\", \"href\": \"http://127.0.0.1:8075/imagefactory/images/18f1b17e-3fdc-4931-a5d6-f4581e5f5f85/builds/6d715c2f-8dc5-46eb-86ad-509366e64252\", \"id\": \"6d715c2f-8dc5-46eb-86ad-509366e64252\"}}"
> + http_version: "1.1"
> diff --git a/spec/vcr_setup.rb b/spec/vcr_setup.rb
> index 0216c9b..5c5ce62 100644
> --- a/spec/vcr_setup.rb
> +++ b/spec/vcr_setup.rb
> @@ -24,11 +24,11 @@ VCR.config do |config|
> config.allow_http_connections_when_no_cassette = true
> end
>
> -ActiveResource::Connection.class_eval do
> - def request(method, path, *args)
> - # We want to add :body, but not :headers because they're too fickle with OAuth
> - VCR.use_cassette('oauth', :record => :new_episodes, :match_requests_on => [:method, :uri, :body]) do
> - request_with_oauth(method, path, *args)
> - end
> - end
> -end
> +# ActiveResource::Connection.class_eval do
> +# def request(method, path, *args)
> +# # We want to add :body, but not :headers because they're too fickle with OAuth
> +# VCR.use_cassette('oauth', :record => :new_episodes, :match_requests_on => [:method, :uri, :body]) do
> +# request_with_oauth(method, path, *args)
> +# end
> +# end
> +# end
ACK, it fixes the failing tests.
2 comments: if the commented-out section in vcr_setup.rb is no longer
needed, please remove it.
Second, it's much better to have file rename operations in a separate
commit. It makes it much easier to see the actual changes.
Thomas
More information about the aeolus-devel
mailing list