1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

refining mocks, getting tests to cooperate

This commit is contained in:
Wesley Beary 2009-08-07 19:55:11 -07:00
parent 9af158aa9c
commit 3e6c9703b9
12 changed files with 260 additions and 235 deletions

View file

@ -1,13 +1,9 @@
require "#{File.dirname(__FILE__)}/fog/aws"
module Fog
def self.mocking=(new_mocking)
@mocking = new_mocking
end
def self.mocking?
!!@mocking
false
end
end
require "#{File.dirname(__FILE__)}/fog/aws"

View file

@ -1,3 +1,73 @@
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../connection"
require "#{current_directory}/../parser"
require "#{current_directory}/../response"
parsers_directory = "#{current_directory}/parsers/ec2"
require "#{parsers_directory}/allocate_address"
require "#{parsers_directory}/attach_volume"
require "#{parsers_directory}/basic"
require "#{parsers_directory}/create_key_pair"
require "#{parsers_directory}/create_snapshot"
require "#{parsers_directory}/create_volume"
require "#{parsers_directory}/describe_addresses"
require "#{parsers_directory}/describe_availability_zones"
require "#{parsers_directory}/describe_images"
require "#{parsers_directory}/describe_instances"
require "#{parsers_directory}/describe_key_pairs"
require "#{parsers_directory}/describe_regions"
require "#{parsers_directory}/describe_security_groups"
require "#{parsers_directory}/describe_snapshots"
require "#{parsers_directory}/describe_volumes"
require "#{parsers_directory}/detach_volume"
require "#{parsers_directory}/get_console_output"
require "#{parsers_directory}/run_instances"
require "#{parsers_directory}/terminate_instances"
requests_directory = "#{current_directory}/requests/ec2"
require "#{requests_directory}/allocate_address"
require "#{requests_directory}/associate_address"
require "#{requests_directory}/attach_volume"
require "#{requests_directory}/authorize_security_group_ingress"
# TODO: require "#{requests_directory}/bundle_instance"
# TODO: require "#{requests_directory}/cancel_bundle_task"
# TODO: require "#{requests_directory}/confirm_product_instance"
require "#{requests_directory}/create_key_pair"
require "#{requests_directory}/create_security_group"
require "#{requests_directory}/create_snapshot"
require "#{requests_directory}/create_volume"
require "#{requests_directory}/delete_key_pair"
require "#{requests_directory}/delete_security_group"
require "#{requests_directory}/delete_snapshot"
require "#{requests_directory}/delete_volume"
# TODO: require "#{requests_directory}/deregister_image"
require "#{requests_directory}/describe_addresses"
require "#{requests_directory}/describe_availability_zones"
# TODO: require "#{requests_directory}/describe_bundle_tasks"
# TODO: require "#{requests_directory}/describe_image_attribute"
require "#{requests_directory}/describe_images"
require "#{requests_directory}/describe_instances"
require "#{requests_directory}/describe_key_pairs"
require "#{requests_directory}/describe_regions"
# TODO: require "#{requests_directory}/describe_reserved_instances"
# TODO: require "#{requests_directory}/describe_reserved_instances_offerings"
require "#{requests_directory}/describe_security_groups"
require "#{requests_directory}/describe_snapshots"
require "#{requests_directory}/describe_volumes"
require "#{requests_directory}/detach_volume"
require "#{requests_directory}/disassociate_address"
require "#{requests_directory}/get_console_output"
# TODO: require "#{requests_directory}/modify_image_attribute"
# TODO: require "#{requests_directory}/monitor_instances"
# TODO: require "#{requests_directory}/purchase_reserved_instances_offering"
require "#{requests_directory}/reboot_instances"
# TODO: require "#{requests_directory}/register_image"
require "#{requests_directory}/release_address"
require "#{requests_directory}/revoke_security_group_ingress"
require "#{requests_directory}/run_instances"
require "#{requests_directory}/terminate_instances"
# TODO: require "#{requests_directory}/unmonitor_instances"
module Fog
module AWS
class EC2
@ -20,78 +90,6 @@ module Fog
# ==== Returns
# * EC2 object with connection to aws.
def initialize(options={})
Fog.mocking = options[:mocking] || false
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../connection"
require "#{current_directory}/../parser"
require "#{current_directory}/../response"
parsers_directory = "#{current_directory}/parsers/ec2"
require "#{parsers_directory}/allocate_address"
require "#{parsers_directory}/attach_volume"
require "#{parsers_directory}/basic"
require "#{parsers_directory}/create_key_pair"
require "#{parsers_directory}/create_snapshot"
require "#{parsers_directory}/create_volume"
require "#{parsers_directory}/describe_addresses"
require "#{parsers_directory}/describe_availability_zones"
require "#{parsers_directory}/describe_images"
require "#{parsers_directory}/describe_instances"
require "#{parsers_directory}/describe_key_pairs"
require "#{parsers_directory}/describe_regions"
require "#{parsers_directory}/describe_security_groups"
require "#{parsers_directory}/describe_snapshots"
require "#{parsers_directory}/describe_volumes"
require "#{parsers_directory}/detach_volume"
require "#{parsers_directory}/get_console_output"
require "#{parsers_directory}/run_instances"
require "#{parsers_directory}/terminate_instances"
requests_directory = "#{current_directory}/requests/ec2"
require "#{requests_directory}/allocate_address"
require "#{requests_directory}/associate_address"
require "#{requests_directory}/attach_volume"
require "#{requests_directory}/authorize_security_group_ingress"
# TODO: require "#{requests_directory}/bundle_instance"
# TODO: require "#{requests_directory}/cancel_bundle_task"
# TODO: require "#{requests_directory}/confirm_product_instance"
require "#{requests_directory}/create_key_pair"
require "#{requests_directory}/create_security_group"
require "#{requests_directory}/create_snapshot"
require "#{requests_directory}/create_volume"
require "#{requests_directory}/delete_key_pair"
require "#{requests_directory}/delete_security_group"
require "#{requests_directory}/delete_snapshot"
require "#{requests_directory}/delete_volume"
# TODO: require "#{requests_directory}/deregister_image"
require "#{requests_directory}/describe_addresses"
require "#{requests_directory}/describe_availability_zones"
# TODO: require "#{requests_directory}/describe_bundle_tasks"
# TODO: require "#{requests_directory}/describe_image_attribute"
require "#{requests_directory}/describe_images"
require "#{requests_directory}/describe_instances"
require "#{requests_directory}/describe_key_pairs"
require "#{requests_directory}/describe_regions"
# TODO: require "#{requests_directory}/describe_reserved_instances"
# TODO: require "#{requests_directory}/describe_reserved_instances_offerings"
require "#{requests_directory}/describe_security_groups"
require "#{requests_directory}/describe_snapshots"
require "#{requests_directory}/describe_volumes"
require "#{requests_directory}/detach_volume"
require "#{requests_directory}/disassociate_address"
require "#{requests_directory}/get_console_output"
# TODO: require "#{requests_directory}/modify_image_attribute"
# TODO: require "#{requests_directory}/monitor_instances"
# TODO: require "#{requests_directory}/purchase_reserved_instances_offering"
require "#{requests_directory}/reboot_instances"
# TODO: require "#{requests_directory}/register_image"
require "#{requests_directory}/release_address"
require "#{requests_directory}/revoke_security_group_ingress"
require "#{requests_directory}/run_instances"
require "#{requests_directory}/terminate_instances"
# TODO: require "#{requests_directory}/unmonitor_instances"
@aws_access_key_id = options[:aws_access_key_id]
@aws_secret_access_key = options[:aws_secret_access_key]
@hmac = HMAC::SHA256.new(@aws_secret_access_key)

View file

@ -1,24 +1,45 @@
module Fog
module AWS
class S3
unless Fog.mocking?
module Fog
module AWS
class S3
# Delete an S3 bucket
#
# ==== Parameters
# * bucket_name<~String> - name of bucket to delete
#
# ==== Returns
# * response<~Fog::AWS::Response>:
# * status<~Integer> - 204
def delete_bucket(bucket_name)
request({
:expects => 204,
:headers => {},
:host => "#{bucket_name}.#{@host}",
:method => 'DELETE'
})
end
# Delete an S3 bucket
#
# ==== Parameters
# * bucket_name<~String> - name of bucket to delete
#
# ==== Returns
# * response<~Fog::AWS::Response>:
# * status<~Integer> - 204
def delete_bucket(bucket_name)
request({
:expects => 204,
:headers => {},
:host => "#{bucket_name}.#{@host}",
:method => 'DELETE'
})
end
end
end
else
module Fog
module AWS
class S3
def delete_bucket(bucket_name)
response = Fog::Response.new
response.status = 204
@data['Buckets'].delete_if {|bucket| bucket['Name'] == bucket_name}
response
end
end
end
end
end

View file

@ -40,7 +40,7 @@ else
response = Fog::Response.new
response.headers['Status'] = 200
response.body = {
'Buckets' => [ { 'CreationDate' => Time.now - rand(3600), 'Name' => 'foggetservice' } ],
'Buckets' => @data['Buckets'],
'Owner' => { 'DisplayName' => 'owner', 'ID' => 'some_id'}
}
response

View file

@ -1,37 +1,58 @@
module Fog
module AWS
class S3
unless Fog.mocking?
# Create an S3 bucket
#
# ==== Parameters
# * bucket_name<~String> - name of bucket to create
# * options<~Hash> - config arguments for bucket. Defaults to {}.
# * :location_constraint<~Symbol> - sets the location for the bucket
#
# ==== Returns
# * response<~Fog::AWS::Response>:
# * status<~Integer> - 200
def put_bucket(bucket_name, options = {})
if options['LocationConstraint']
data =
<<-DATA
<CreateBucketConfiguration>
<LocationConstraint>#{options['LocationConstraint']}</LocationConstraint>
</CreateBucketConfiguration>
DATA
else
data = nil
module Fog
module AWS
class S3
# Create an S3 bucket
#
# ==== Parameters
# * bucket_name<~String> - name of bucket to create
# * options<~Hash> - config arguments for bucket. Defaults to {}.
# * :location_constraint<~Symbol> - sets the location for the bucket
#
# ==== Returns
# * response<~Fog::AWS::Response>:
# * status<~Integer> - 200
def put_bucket(bucket_name, options = {})
if options['LocationConstraint']
data =
<<-DATA
<CreateBucketConfiguration>
<LocationConstraint>#{options['LocationConstraint']}</LocationConstraint>
</CreateBucketConfiguration>
DATA
else
data = nil
end
request({
:expects => 200,
:body => data,
:headers => {},
:host => "#{bucket_name}.#{@host}",
:method => 'PUT'
})
end
request({
:expects => 200,
:body => data,
:headers => {},
:host => "#{bucket_name}.#{@host}",
:method => 'PUT'
})
end
end
end
end
end
else
module Fog
module AWS
class S3
def put_bucket(bucket_name, options = {})
response = Fog::Response.new
response.status = 200
@data['Buckets'] << { 'Name' => bucket_name, 'CreationDate' => Time.now }
response
end
end
end
end
end

View file

@ -1,3 +1,29 @@
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../connection"
require "#{current_directory}/../parser"
require "#{current_directory}/../response"
parsers_directory = "#{current_directory}/parsers/s3"
require "#{parsers_directory}/copy_object"
require "#{parsers_directory}/get_bucket"
require "#{parsers_directory}/get_bucket_location"
require "#{parsers_directory}/get_request_payment"
require "#{parsers_directory}/get_service"
requests_directory = "#{current_directory}/requests/s3"
require "#{requests_directory}/copy_object"
require "#{requests_directory}/delete_bucket"
require "#{requests_directory}/delete_object"
require "#{requests_directory}/get_bucket"
require "#{requests_directory}/get_bucket_location"
require "#{requests_directory}/get_object"
require "#{requests_directory}/get_request_payment"
require "#{requests_directory}/get_service"
require "#{requests_directory}/head_object"
require "#{requests_directory}/put_bucket"
require "#{requests_directory}/put_object"
require "#{requests_directory}/put_request_payment"
module Fog
module AWS
class S3
@ -20,34 +46,6 @@ module Fog
# ==== Returns
# * S3 object with connection to aws.
def initialize(options={})
Fog.mocking = options[:mocking] || false
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../connection"
require "#{current_directory}/../parser"
require "#{current_directory}/../response"
parsers_directory = "#{current_directory}/parsers/s3"
require "#{parsers_directory}/copy_object"
require "#{parsers_directory}/get_bucket"
require "#{parsers_directory}/get_bucket_location"
require "#{parsers_directory}/get_request_payment"
require "#{parsers_directory}/get_service"
requests_directory = "#{current_directory}/requests/s3"
require "#{requests_directory}/copy_object"
require "#{requests_directory}/delete_bucket"
require "#{requests_directory}/delete_object"
require "#{requests_directory}/get_bucket"
require "#{requests_directory}/get_bucket_location"
require "#{requests_directory}/get_object"
require "#{requests_directory}/get_request_payment"
require "#{requests_directory}/get_service"
require "#{requests_directory}/head_object"
require "#{requests_directory}/put_bucket"
require "#{requests_directory}/put_object"
require "#{requests_directory}/put_request_payment"
@aws_access_key_id = options[:aws_access_key_id]
@aws_secret_access_key = options[:aws_secret_access_key]
@hmac = HMAC::SHA1.new(@aws_secret_access_key)
@ -55,6 +53,10 @@ module Fog
@port = options[:port] || 443
@scheme = options[:scheme] || 'https'
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
if Fog.mocking?
@data = { 'Buckets' => [] }
end
end
private

View file

@ -1,3 +1,26 @@
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../connection"
require "#{current_directory}/../parser"
require "#{current_directory}/../response"
parsers_directory = "#{current_directory}/parsers/simpledb"
require "#{parsers_directory}/basic"
require "#{parsers_directory}/domain_metadata"
require "#{parsers_directory}/get_attributes"
require "#{parsers_directory}/list_domains"
require "#{parsers_directory}/select"
requests_directory = "#{current_directory}/requests/simpledb"
require "#{requests_directory}/batch_put_attributes"
require "#{requests_directory}/create_domain"
require "#{requests_directory}/delete_attributes"
require "#{requests_directory}/delete_domain"
require "#{requests_directory}/domain_metadata"
require "#{requests_directory}/get_attributes"
require "#{requests_directory}/list_domains"
require "#{requests_directory}/put_attributes"
require "#{requests_directory}/select"
module Fog
module AWS
class SimpleDB
@ -20,31 +43,6 @@ module Fog
# ==== Returns
# * SimpleDB object with connection to aws.
def initialize(options={})
Fog.mocking = options[:mocking] || false
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../connection"
require "#{current_directory}/../parser"
require "#{current_directory}/../response"
parsers_directory = "#{current_directory}/parsers/simpledb"
require "#{parsers_directory}/basic"
require "#{parsers_directory}/domain_metadata"
require "#{parsers_directory}/get_attributes"
require "#{parsers_directory}/list_domains"
require "#{parsers_directory}/select"
requests_directory = "#{current_directory}/requests/simpledb"
require "#{requests_directory}/batch_put_attributes"
require "#{requests_directory}/create_domain"
require "#{requests_directory}/delete_attributes"
require "#{requests_directory}/delete_domain"
require "#{requests_directory}/domain_metadata"
require "#{requests_directory}/get_attributes"
require "#{requests_directory}/list_domains"
require "#{requests_directory}/put_attributes"
require "#{requests_directory}/select"
@aws_access_key_id = options[:aws_access_key_id]
@aws_secret_access_key = options[:aws_secret_access_key]
@hmac = HMAC::SHA256.new(@aws_secret_access_key)

9
lib/fog/mocking.rb Normal file
View file

@ -0,0 +1,9 @@
module Fog
def self.mocking?
true
end
end
require "#{File.dirname(__FILE__)}/../fog/aws"

View file

@ -3,11 +3,12 @@ require File.dirname(__FILE__) + '/../../spec_helper'
describe 'S3.delete_bucket' do
before(:all) do
s3.put_bucket('fogdeletebucket')
@s3 = s3
@s3.put_bucket('fogdeletebucket')
end
it 'should return proper attributes' do
actual = s3.delete_bucket('fogdeletebucket')
actual = @s3.delete_bucket('fogdeletebucket')
actual.status.should == 204
end

View file

@ -3,15 +3,16 @@ require File.dirname(__FILE__) + '/../../spec_helper'
describe 'S3.get_service' do
before(:all) do
s3.put_bucket('foggetservice')
@s3 = s3
@s3.put_bucket('foggetservice')
end
after(:all) do
s3.delete_bucket('foggetservice')
@s3.delete_bucket('foggetservice')
end
it 'should return proper_attributes' do
actual = s3.get_service
actual = @s3.get_service
actual.body['Buckets'].should be_an(Array)
bucket = actual.body['Buckets'].select {|bucket| bucket['Name'] == 'foggetservice'}.first
bucket['CreationDate'].should be_a(Time)
@ -23,7 +24,7 @@ describe 'S3.get_service' do
it 'should include foggetservice in get_service' do
eventually do
actual = s3.get_service
actual = @s3.get_service
actual.body['Buckets'].collect { |bucket| bucket['Name'] }.should include('foggetservice')
end
end

View file

@ -2,27 +2,17 @@ require File.dirname(__FILE__) + '/../../spec_helper'
describe 'S3.put_bucket' do
after(:all) do
s3.delete_bucket('fogputbucket')
before(:all) do
@s3 = s3
end
it 'should not include fogputbucket in get_service buckets before put_bucket' do
eventually do
actual = s3.get_service
actual.body['Buckets'].collect { |bucket| bucket['Name'] }.should_not include('fogputbucket')
end
after(:all) do
@s3.delete_bucket('fogputbucket')
end
it 'should return proper attributes' do
actual = s3.put_bucket('fogputbucket')
actual = @s3.put_bucket('fogputbucket')
actual.status.should == 200
end
it 'should include fogputbucket in get_service buckets after put_bucket' do
eventually do
actual = s3.get_service
actual.body['Buckets'].collect { |bucket| bucket['Name'] }.should include('fogputbucket')
end
end
end

View file

@ -1,11 +1,7 @@
require 'spec'
current_directory = File.dirname(__FILE__)
require "#{current_directory}/../lib/fog"
Fog.mocking = true
Spec::Runner.configure do |config|
end
require "#{current_directory}/../lib/fog/mocking"
def credentials
@credentials ||= begin
@ -16,37 +12,29 @@ def credentials
end
def ec2
@ec2 ||= begin
Fog::AWS::EC2.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key']
)
end
Fog::AWS::EC2.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key']
)
end
def sdb
@sdb ||= begin
Fog::AWS::SimpleDB.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key']
)
end
Fog::AWS::SimpleDB.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key']
)
end
def s3
@s3 ||= begin
Fog::AWS::S3.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key']
)
end
Fog::AWS::S3.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key']
)
end
def eu_s3
@eu_s3 ||= begin
Fog::AWS::S3.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key'],
:host => 's3-external-3.amazonaws.com'
)
end
Fog::AWS::S3.new(
:aws_access_key_id => credentials['aws_access_key_id'],
:aws_secret_access_key => credentials['aws_secret_access_key'],
:host => 's3-external-3.amazonaws.com'
)
end
def eventually(max_delay = 16, &block)