[PATCH aeolus-image-rubygem 2/2] Resolve VCR problem with matching requests
Tomas Sedovic
tsedovic at redhat.com
Thu Feb 23 14:26:51 UTC 2012
On 02/23/2012 03:18 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_spec.rb | 74 ++++++++++++++++------------
> spec/spec_helper.rb | 1 +
> 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 | 8 ---
> 6 files changed, 126 insertions(+), 39 deletions(-)
> 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_spec.rb b/spec/models/factory/base_spec.rb
> index 86b8a70..7dadc1a 100644
> --- a/spec/models/factory/base_spec.rb
> +++ b/spec/models/factory/base_spec.rb
> @@ -42,41 +42,53 @@ describe Aeolus::Image::Factory::Base do
> 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
> + 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
>
> - 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)
> + 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
>
> - 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)
> + 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/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_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..b07d4ed 100644
> --- a/spec/vcr_setup.rb
> +++ b/spec/vcr_setup.rb
> @@ -24,11 +24,3 @@ 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
ACK
More information about the aeolus-devel
mailing list