fog 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/Gemfile.lock +2 -2
  2. data/fog.gemspec +2 -2
  3. data/lib/fog.rb +7 -3
  4. data/lib/fog/aws/ec2.rb +30 -18
  5. data/lib/fog/aws/models/ec2/flavors.rb +3 -2
  6. data/lib/fog/aws/models/ec2/server.rb +1 -1
  7. data/lib/fog/aws/requests/ec2/associate_address.rb +5 -4
  8. data/lib/fog/aws/requests/ec2/attach_volume.rb +10 -11
  9. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +33 -19
  10. data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -3
  11. data/lib/fog/aws/requests/ec2/create_security_group.rb +4 -5
  12. data/lib/fog/aws/requests/ec2/delete_security_group.rb +2 -3
  13. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +2 -3
  14. data/lib/fog/aws/requests/ec2/delete_volume.rb +2 -3
  15. data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -3
  16. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +10 -6
  17. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -3
  18. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -3
  19. data/lib/fog/aws/requests/ec2/describe_regions.rb +10 -6
  20. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -3
  21. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -3
  22. data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -3
  23. data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -3
  24. data/lib/fog/aws/requests/ec2/disassociate_address.rb +2 -3
  25. data/lib/fog/aws/requests/ec2/get_console_output.rb +3 -4
  26. data/lib/fog/aws/requests/ec2/reboot_instances.rb +2 -3
  27. data/lib/fog/aws/requests/ec2/release_address.rb +2 -3
  28. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +24 -15
  29. data/lib/fog/aws/requests/ec2/terminate_instances.rb +3 -3
  30. data/lib/fog/aws/requests/s3/put_object.rb +3 -0
  31. data/spec/aws/requests/ec2/describe_instances_spec.rb +2 -2
  32. data/spec/aws/requests/ec2/get_console_output_spec.rb +2 -2
  33. data/spec/aws/requests/ec2/reboot_instances_spec.rb +2 -2
  34. data/spec/aws/requests/ec2/terminate_instances_spec.rb +2 -2
  35. data/tests/aws/requests/ec2/address_tests.rb +13 -25
  36. data/tests/aws/requests/ec2/availability_zone_tests.rb +1 -1
  37. data/tests/aws/requests/ec2/key_pair_tests.rb +2 -2
  38. data/tests/aws/requests/ec2/region_tests.rb +1 -1
  39. data/tests/aws/requests/ec2/security_group_tests.rb +7 -7
  40. data/tests/aws/requests/ec2/snapshot_tests.rb +2 -2
  41. data/tests/aws/requests/ec2/volume_tests.rb +5 -5
  42. metadata +3 -3
@@ -62,13 +62,13 @@ specs:
62
62
  - net-ssh:
63
63
  version: 2.0.22
64
64
  - nokogiri:
65
- version: 1.4.1
65
+ version: 1.4.2
66
66
  - rspec:
67
67
  version: 1.3.0
68
68
  - ruby-hmac:
69
69
  version: 0.4.0
70
70
  - shindo:
71
- version: 0.1.2
71
+ version: 0.1.3
72
72
  hash: 4e55927c1be02ee00fc3353e71caecdebd9d4817
73
73
  sources:
74
74
  - Rubygems:
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  ## If your rubyforge_project name is different, then edit it and comment out
8
8
  ## the sub! line in the Rakefile
9
9
  s.name = 'fog'
10
- s.version = '0.1.2'
11
- s.date = '2010-05-24'
10
+ s.version = '0.1.3'
11
+ s.date = '2010-05-26'
12
12
  s.rubyforge_project = 'fog'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
data/lib/fog.rb CHANGED
@@ -25,6 +25,10 @@ require 'fog/model'
25
25
  require 'fog/parser'
26
26
  require 'fog/ssh'
27
27
 
28
+ module Fog
29
+ class Error < StandardError; end
30
+ end
31
+
28
32
  require 'fog/aws'
29
33
  require 'fog/local'
30
34
  require 'fog/rackspace'
@@ -34,8 +38,10 @@ require 'fog/vcloud'
34
38
 
35
39
  module Fog
36
40
 
41
+ class MockNotImplemented < Fog::Error; end
42
+
37
43
  unless const_defined?(:VERSION)
38
- VERSION = '0.1.2'
44
+ VERSION = '0.1.3'
39
45
  end
40
46
 
41
47
  module Mock
@@ -50,8 +56,6 @@ module Fog
50
56
  end
51
57
  end
52
58
 
53
- class MockNotImplemented < StandardError; end
54
-
55
59
  def self.mock!
56
60
  @mocking = true
57
61
  end
@@ -2,6 +2,8 @@ module Fog
2
2
  module AWS
3
3
  module EC2
4
4
 
5
+ class Error < Fog::Error; end
6
+
5
7
  def self.new(options={})
6
8
 
7
9
  unless @required
@@ -96,40 +98,42 @@ module Fog
96
98
 
97
99
  def self.data
98
100
  @data ||= Hash.new do |hash, key|
101
+ owner_id = Fog::AWS::Mock.owner_id
99
102
  hash[key] = {
100
103
  :deleted_at => {},
101
- :addresses => {},
102
- :instances => {},
103
- :key_pairs => {},
104
- :limits => { :addresses => 5 },
104
+ :addresses => {},
105
+ :instances => {},
106
+ :key_pairs => {},
107
+ :limits => { :addresses => 5 },
108
+ :owner_id => owner_id,
105
109
  :security_groups => {
106
110
  'default' => {
107
111
  'groupDescription' => 'default group',
108
112
  'groupName' => 'default',
109
113
  'ipPermissions' => [
110
114
  {
111
- 'groups' => [{'groupName' => 'default', 'userId' => @owner_id}],
115
+ 'groups' => [{'groupName' => 'default', 'userId' => owner_id}],
112
116
  'fromPort' => -1,
113
117
  'toPort' => -1,
114
118
  'ipProtocol' => 'icmp',
115
119
  'ipRanges' => []
116
120
  },
117
121
  {
118
- 'groups' => [{'groupName' => 'default', 'userId' => @owner_id}],
122
+ 'groups' => [{'groupName' => 'default', 'userId' => owner_id}],
119
123
  'fromPort' => 0,
120
124
  'toPort' => 65535,
121
125
  'ipProtocol' => 'tcp',
122
126
  'ipRanges' => []
123
127
  },
124
128
  {
125
- 'groups' => [{'groupName' => 'default', 'userId' => @owner_id}],
129
+ 'groups' => [{'groupName' => 'default', 'userId' => owner_id}],
126
130
  'fromPort' => 0,
127
131
  'toPort' => 65535,
128
132
  'ipProtocol' => 'udp',
129
133
  'ipRanges' => []
130
134
  }
131
135
  ],
132
- 'ownerId' => @owner_id
136
+ 'ownerId' => owner_id
133
137
  }
134
138
  },
135
139
  :snapshots => {},
@@ -146,8 +150,8 @@ module Fog
146
150
 
147
151
  def initialize(options={})
148
152
  @aws_access_key_id = options[:aws_access_key_id]
149
- @owner_id = Fog::AWS::Mock.owner_id
150
153
  @data = self.class.data[@aws_access_key_id]
154
+ @owner_id = @data[:owner_id]
151
155
  end
152
156
 
153
157
  end
@@ -210,15 +214,23 @@ module Fog
210
214
  }
211
215
  )
212
216
 
213
- response = @connection.request({
214
- :body => body,
215
- :expects => 200,
216
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
217
- :idempotent => idempotent,
218
- :host => @host,
219
- :method => 'POST',
220
- :parser => parser
221
- })
217
+ begin
218
+ response = @connection.request({
219
+ :body => body,
220
+ :expects => 200,
221
+ :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
222
+ :idempotent => idempotent,
223
+ :host => @host,
224
+ :method => 'POST',
225
+ :parser => parser
226
+ })
227
+ rescue Excon::Errors::Error => error
228
+ if match = error.message.match(/<Code>(.*)<\/Code><Message>(.*)<\/Message>/)
229
+ raise Fog::AWS::EC2::Error.new("#{match[1]} => #{match[2]}")
230
+ else
231
+ raise error
232
+ end
233
+ end
222
234
 
223
235
  response
224
236
  end
@@ -30,8 +30,9 @@ module Fog
30
30
  { :bits => 32, :cores => 5, :disk => 350, :id => 'c1.medium', :name => 'High-CPU Medium', :ram => 1740.8},
31
31
  { :bits => 64, :cores => 20, :disk => 1690, :id => 'c1.xlarge', :name => 'High-CPU Extra Large', :ram => 7168},
32
32
 
33
- { :bits => 64, :cores => 13, :disk => 850, :id => 'm2.2xlarge', :name => 'High Memory Double Extra Large', :ram => 35020.8},
34
- { :bits => 64, :cores => 26, :disk => 1690, :id => 'm2.4xlarge', :name => 'High Memory Quadruple Extra Large', :ram => 70041.6},
33
+ { :bits => 64, :cores => 6.5, :disk => 420, :id => 'm2.xlarge', :name => 'High-Memory Extra Large', :ram => 17510.4},
34
+ { :bits => 64, :cores => 13, :disk => 850, :id => 'm2.2xlarge', :name => 'High Memory Double Extra Large', :ram => 35020.8},
35
+ { :bits => 64, :cores => 26, :disk => 1690, :id => 'm2.4xlarge', :name => 'High Memory Quadruple Extra Large', :ram => 70041.6},
35
36
  ]
36
37
  load(data)
37
38
  self
@@ -117,7 +117,7 @@ module Fog
117
117
 
118
118
  options = {
119
119
  'BlockDeviceMapping' => @block_device_mapping,
120
- 'InstanceType' => flavor.id,
120
+ 'InstanceType' => flavor_id,
121
121
  'KernelId' => @kernel_id,
122
122
  'KeyName' => @key_name,
123
123
  'Monitoring.Enabled' => @monitoring,
@@ -43,11 +43,12 @@ module Fog
43
43
  'requestId' => Fog::AWS::Mock.request_id,
44
44
  'return' => true
45
45
  }
46
- else
47
- response.status = 400
48
- raise(Excon::Errors.status_error({:expects => 200}, response))
46
+ response
47
+ elsif !instance
48
+ raise Fog::AWS::EC2::Error.new("InvalidInstanceID.NotFound => The instance ID '#{instance_id}' does not exist")
49
+ elsif !address
50
+ raise Fog::AWS::EC2::Error.new("AuthFailure => The address '#{public_ip}' does not belong to you.")
49
51
  end
50
- response
51
52
  end
52
53
 
53
54
  end
@@ -54,24 +54,23 @@ module Fog
54
54
  response.body = {
55
55
  'requestId' => Fog::AWS::Mock.request_id
56
56
  }.merge!(data)
57
- else
58
- response.status = 400
59
- raise(Excon::Errors.status_error({:expects => 200}, response))
57
+ response
58
+ elsif !instance
59
+ raise Fog::AWS::EC2::Error.new("InvalidInstanceID.NotFound => The instance ID '#{instance_id}' does not exist.")
60
+ elsif !volume
61
+ raise Fog::AWS::EC2::Error.new("InvalidVolume.NotFound => The volume '#{volume_id}' does not exist.")
60
62
  end
61
63
  else
62
- response.status = 400
63
- response.body = {
64
- 'Code' => 'MissingParameter'
65
- }
64
+ message = 'MissingParameter => '
66
65
  if !instance_id
67
- response['Message'] = 'The request must contain the parameter instance_id'
66
+ message << 'The request must contain the parameter instance_id'
68
67
  elsif !volume_id
69
- response['Message'] = 'The request must contain the parameter volume_id'
68
+ message << 'The request must contain the parameter volume_id'
70
69
  else
71
- response['Message'] = 'The request must contain the parameter device'
70
+ message << 'The request must contain the parameter device'
72
71
  end
72
+ raise Fog::AWS::EC2::Error.new(message)
73
73
  end
74
- response
75
74
  end
76
75
 
77
76
  end
@@ -37,33 +37,47 @@ module Fog
37
37
  def authorize_security_group_ingress(options = {})
38
38
  response = Excon::Response.new
39
39
  group = @data[:security_groups][options['GroupName']]
40
- group['ipPermissions'] ||= []
41
40
 
42
- if options['GroupName'] && options['SourceSecurityGroupName'] && options['SourceSecurityGroupOwnerId']
43
- ['icmp', 'tcp', 'udp'].each do |protocol|
41
+ if group
42
+ group['ipPermissions'] ||= []
43
+ if options['GroupName'] && options['SourceSecurityGroupName'] && options['SourceSecurityGroupOwnerId']
44
+ ['tcp', 'udp'].each do |protocol|
45
+ group['ipPermissions'] << {
46
+ 'groups' => [{'groupName' => options['GroupName'], 'userId' => @owner_id}],
47
+ 'fromPort' => 1,
48
+ 'ipRanges' => [],
49
+ 'ipProtocol' => protocol,
50
+ 'toPort' => 65535
51
+ }
52
+ end
44
53
  group['ipPermissions'] << {
45
54
  'groups' => [{'groupName' => options['GroupName'], 'userId' => @owner_id}],
46
- 'fromPort' => 1,
55
+ 'fromPort' => -1,
47
56
  'ipRanges' => [],
48
- 'ipProtocol' => protocol,
49
- 'toPort' => 65535
57
+ 'ipProtocol' => 'icmp',
58
+ 'toPort' => -1
50
59
  }
60
+ else
61
+ group['ipPermissions'] << {
62
+ 'groups' => [],
63
+ 'fromPort' => options['FromPort'],
64
+ 'ipRanges' => [],
65
+ 'ipProtocol' => options['IpProtocol'],
66
+ 'toPort' => options['ToPort']
67
+ }
68
+ if options['CidrIp']
69
+ group['ipPermissions'].last['ipRanges'] << { 'cidrIp' => options['CidrIp'] }
70
+ end
51
71
  end
52
- else
53
- group['ipPermissions'] << {
54
- 'groups' => [],
55
- 'fromPort' => options['FromPort'],
56
- 'ipRanges' => [{ 'cidrIp' => options['CidrIp'] }],
57
- 'ipProtocol' => options['IpProtocol'],
58
- 'toPort' => options['ToPort']
72
+ response.status = 200
73
+ response.body = {
74
+ 'requestId' => Fog::AWS::Mock.request_id,
75
+ 'return' => true
59
76
  }
77
+ response
78
+ else
79
+ raise Fog::AWS::EC2::Error.new("InvalidGroup.NotFound => The security group '#{options['GroupName']}' does not exist")
60
80
  end
61
- response.status = 200
62
- response.body = {
63
- 'requestId' => Fog::AWS::Mock.request_id,
64
- 'return' => true
65
- }
66
- response
67
81
  end
68
82
 
69
83
  end
@@ -40,11 +40,10 @@ module Fog
40
40
  response.body = {
41
41
  'requestId' => Fog::AWS::Mock.request_id
42
42
  }.merge!(data)
43
+ response
43
44
  else
44
- response.status = 400
45
- raise(Excon::Errors.status_error({:expects => 200}, response))
45
+ raise Fog::AWS::EC2::Error.new("InvalidKeyPair.Duplicate => The keypair '#{key_name}' already exists.")
46
46
  end
47
- response
48
47
  end
49
48
 
50
49
  end
@@ -31,8 +31,8 @@ module Fog
31
31
  response = Excon::Response.new
32
32
  unless @data[:security_groups][name]
33
33
  data = {
34
- 'groupDescription' => description,
35
- 'groupName' => name,
34
+ 'groupDescription' => CGI.escape(description).gsub('%20', '+'),
35
+ 'groupName' => CGI.escape(name).gsub('%20', '+'),
36
36
  'ipPermissions' => [],
37
37
  'ownerId' => @owner_id
38
38
  }
@@ -41,11 +41,10 @@ module Fog
41
41
  'requestId' => Fog::AWS::Mock.request_id,
42
42
  'return' => true
43
43
  }
44
+ response
44
45
  else
45
- response.status = 400
46
- raise(Excon::Errors.status_error({:expects => 200}, response))
46
+ raise Fog::AWS::EC2::Error.new("InvalidGroup.Duplicate => The security group '#{name}' already exists")
47
47
  end
48
- response
49
48
  end
50
49
 
51
50
  end
@@ -34,11 +34,10 @@ module Fog
34
34
  'requestId' => Fog::AWS::Mock.request_id,
35
35
  'return' => true
36
36
  }
37
+ response
37
38
  else
38
- response.status = 400
39
- raise(Excon::Errors.status_error({:expects => 200}, response))
39
+ raise Fog::AWS::EC2::Error.new("InvalidGroup.NotFound => The security group '#{name}' does not exist")
40
40
  end
41
- response
42
41
  end
43
42
  end
44
43
  end
@@ -34,11 +34,10 @@ module Fog
34
34
  'requestId' => Fog::AWS::Mock.request_id,
35
35
  'return' => true
36
36
  }
37
+ response
37
38
  else
38
- response.status = 400
39
- raise(Excon::Errors.status_error({:expects => 200}, response))
39
+ raise Fog::AWS::EC2::Error.new("InvalidSnapshot.NotFound => The snapshot '#{snapshot_id}' does not exist.")
40
40
  end
41
- response
42
41
  end
43
42
 
44
43
  end
@@ -36,11 +36,10 @@ module Fog
36
36
  'requestId' => Fog::AWS::Mock.request_id,
37
37
  'return' => true
38
38
  }
39
+ response
39
40
  else
40
- response.status = 400
41
- raise(Excon::Errors.status_error({:expects => 200}, response))
41
+ raise Fog::AWS::EC2::Error.new("InvalidVolume.NotFound => The volume '#{volume_id}' does not exist.")
42
42
  end
43
- response
44
43
  end
45
44
 
46
45
  end
@@ -42,11 +42,10 @@ module Fog
42
42
  'requestId' => Fog::AWS::Mock.request_id,
43
43
  'addressesSet' => addresses_set
44
44
  }
45
+ response
45
46
  else
46
- response.status = 400
47
- raise(Excon::Errors.status_error({:expects => 200}, response))
47
+ raise Fog::AWS::EC2::Error.new("InvalidAddress.NotFound => Address #{public_ip.inspect} not found.")
48
48
  end
49
- response
50
49
  end
51
50
 
52
51
  end
@@ -44,12 +44,16 @@ module Fog
44
44
  availability_zone_info = zones.values
45
45
  end
46
46
 
47
- response.status = 200
48
- response.body = {
49
- 'requestId' => Fog::AWS::Mock.request_id,
50
- 'availabilityZoneInfo' => availability_zone_info
51
- }
52
- response
47
+ if zone_name.length == 0 || zone_name.length == availability_zone_info.length
48
+ response.status = 200
49
+ response.body = {
50
+ 'requestId' => Fog::AWS::Mock.request_id,
51
+ 'availabilityZoneInfo' => availability_zone_info
52
+ }
53
+ response
54
+ else
55
+ raise Fog::AWS::EC2::Error.new("InvalidParameterValue => Invalid availability zone: #{zone_name.inspect}")
56
+ end
53
57
  end
54
58
 
55
59
  end
@@ -115,11 +115,10 @@ module Fog
115
115
  'requestId' => Fog::AWS::Mock.request_id,
116
116
  'reservationSet' => reservation_set.values
117
117
  }
118
+ response
118
119
  else
119
- response.status = 400
120
- raise(Excon::Errors.status_error({:expects => 200}, response))
120
+ raise Fog::AWS::EC2::Error.new("InvalidInstanceID.NotFound => The instance ID #{instance_id.inspect} does not exist")
121
121
  end
122
- response
123
122
  end
124
123
 
125
124
  end
@@ -44,11 +44,10 @@ module Fog
44
44
  key.reject {|key,value| !['keyFingerprint', 'keyName'].include?(key)}
45
45
  end
46
46
  }
47
+ response
47
48
  else
48
- response.status = 400
49
- raise(Excon::Errors.status_error({:expects => 200}, response))
49
+ raise Fog::AWS::EC2::Error.new("InvalidKeyPair.NotFound => The key pair #{key_name.inspect} does not exist")
50
50
  end
51
- response
52
51
  end
53
52
 
54
53
  end
@@ -41,12 +41,16 @@ module Fog
41
41
  region_info = regions.values
42
42
  end
43
43
 
44
- response.status = 200
45
- response.body = {
46
- 'requestId' => Fog::AWS::Mock.request_id,
47
- 'regionInfo' => region_info
48
- }
49
- response
44
+ if region_name.length == 0 || region_name.length == region_info.length
45
+ response.status = 200
46
+ response.body = {
47
+ 'requestId' => Fog::AWS::Mock.request_id,
48
+ 'regionInfo' => region_info
49
+ }
50
+ response
51
+ else
52
+ raise Fog::AWS::EC2::Error.new("InvalidParameterValue => Invalid region: #{region_name.inspect}")
53
+ end
50
54
  end
51
55
 
52
56
  end
@@ -52,11 +52,10 @@ module Fog
52
52
  'requestId' => Fog::AWS::Mock.request_id,
53
53
  'securityGroupInfo' => security_group_info
54
54
  }
55
+ response
55
56
  else
56
- response.status = 400
57
- raise(Excon::Errors.status_error({:expects => 200}, response))
57
+ raise Fog::AWS::EC2::Error.new("InvalidGroup.NotFound => The security group #{group_name.inspect} does not exist")
58
58
  end
59
- response
60
59
  end
61
60
 
62
61
  end
@@ -66,11 +66,10 @@ module Fog
66
66
  'requestId' => Fog::AWS::Mock.request_id,
67
67
  'snapshotSet' => snapshot_set
68
68
  }
69
+ response
69
70
  else
70
- response.status = 400
71
- raise(Excon::Errors.status_error({:expects => 200}, response))
71
+ raise Fog::AWS::EC2::Error.new("InvalidSnapshot.NotFound => The snapshot #{snapshot_id.inspect} does not exist.")
72
72
  end
73
- response
74
73
  end
75
74
 
76
75
  end
@@ -72,11 +72,10 @@ module Fog
72
72
  'requestId' => Fog::AWS::Mock.request_id,
73
73
  'volumeSet' => volume_set
74
74
  }
75
+ response
75
76
  else
76
- response.status = 400
77
- raise(Excon::Errors.status_error({:expects => 200}, response))
77
+ raise Fog::AWS::EC2::Error.new("InvalidVolume.NotFound => The volume #{volume_id.inspect} does not exist.")
78
78
  end
79
- response
80
79
  end
81
80
 
82
81
  end
@@ -44,11 +44,10 @@ module Fog
44
44
  response.body = {
45
45
  'requestId' => Fog::AWS::Mock.request_id
46
46
  }.merge!(data)
47
+ response
47
48
  else
48
- response.status = 400
49
- raise(Excon::Errors.status_error({:expects => 200}, response))
49
+ raise Fog::AWS::EC2::Error.new("InvalidVolume.NotFound => The volume '#{volume_id}' does not exist.")
50
50
  end
51
- response
52
51
  end
53
52
 
54
53
  end
@@ -40,11 +40,10 @@ module Fog
40
40
  'requestId' => Fog::AWS::Mock.request_id,
41
41
  'return' => true
42
42
  }
43
+ response
43
44
  else
44
- response.status = 400
45
- raise(Excon::Errors.status_error({:expects => 200}, response))
45
+ raise Fog::AWS::EC2::Error.new("AuthFailure => The address '#{public_ip}' does not belong to you.")
46
46
  end
47
- response
48
47
  end
49
48
 
50
49
  end
@@ -38,11 +38,10 @@ module Fog
38
38
  'requestId' => Fog::AWS::Mock.request_id,
39
39
  'timestamp' => Time.now
40
40
  }
41
- else
42
- response.status = 400
43
- raise(Excon::Errors.status_error({:expects => 200}, response))
41
+ response
42
+ else;
43
+ raise Fog::AWS::EC2::Error.new("InvalidInstanceID.NotFound => The instance ID '#{instance_id}' does not exist")
44
44
  end
45
- response
46
45
  end
47
46
 
48
47
  end
@@ -38,11 +38,10 @@ module Fog
38
38
  'requestId' => Fog::AWS::Mock.request_id,
39
39
  'return' => true
40
40
  }
41
+ response
41
42
  else
42
- response.status = 400
43
- raise(Excon::Errors.status_error({:expects => 200}, response))
43
+ raise Fog::AWS::EC2::Error.new("InvalidInstanceID.NotFound => The instance ID #{instance_id.inspect} does not exist")
44
44
  end
45
- response
46
45
  end
47
46
 
48
47
  end
@@ -31,11 +31,10 @@ module Fog
31
31
  'requestId' => Fog::AWS::Mock.request_id,
32
32
  'return' => true
33
33
  }
34
+ response
34
35
  else
35
- response.status = 400
36
- raise(Excon::Errors.status_error({:expects => 200}, response))
36
+ raise Fog::AWS::EC2::Error.new("AuthFailure => The address '#{public_ip}' does not belong to you.")
37
37
  end
38
- response
39
38
  end
40
39
 
41
40
  end
@@ -35,27 +35,36 @@ module Fog
35
35
  class Mock
36
36
 
37
37
  def revoke_security_group_ingress(options = {})
38
- if options['GroupName'] && options['SourceSecurityGroupName'] && options['SourceSecurityGroupOwnerId']
39
- raise MockNotImplemented.new("Contributions welcome!")
40
- else
41
- response = Excon::Response.new
42
- group = @data[:security_groups][options['GroupName']]
43
-
44
- ingress = group['ipPermissions'].select {|permission|
45
- permission['fromPort'] == options['FromPort'] &&
46
- permission['ipProtocol'] == options['IpProtocol'] &&
47
- permission['toPort'] == options['ToPort'] &&
48
- permission['ipRanges'].first['cidrIp'] == options['CidrIp']
49
- }.first
50
-
51
- group['ipPermissions'].delete(ingress)
52
-
38
+ response = Excon::Response.new
39
+ group = @data[:security_groups][options['GroupName']]
40
+ if group
41
+ if options['GroupName'] && options['SourceSecurityGroupName'] && options['SourceSecurityGroupOwnerId']
42
+ group['ipPermissions'].delete_if {|permission|
43
+ permission['groups'].first['groupName'] == options['GroupName']
44
+ }
45
+ else
46
+ ingress = group['ipPermissions'].select {|permission|
47
+ permission['fromPort'] == options['FromPort'] &&
48
+ permission['ipProtocol'] == options['IpProtocol'] &&
49
+ permission['toPort'] == options['ToPort'] &&
50
+ (
51
+ permission['ipRanges'].empty? ||
52
+ (
53
+ permission['ipRanges'].first &&
54
+ permission['ipRanges'].first['cidrIp'] == options['CidrIp']
55
+ )
56
+ )
57
+ }.first
58
+ group['ipPermissions'].delete(ingress)
59
+ end
53
60
  response.status = 200
54
61
  response.body = {
55
62
  'requestId' => Fog::AWS::Mock.request_id,
56
63
  'return' => true
57
64
  }
58
65
  response
66
+ else
67
+ raise Fog::AWS::EC2::Error.new("InvalidGroup.NotFound => The security group '#{options['GroupName']}' does not exist")
59
68
  end
60
69
  end
61
70
 
@@ -77,11 +77,11 @@ module Fog
77
77
  detach_volume(volume['volumeId'])
78
78
  end
79
79
  end
80
+
81
+ response
80
82
  else
81
- response.status = 400
82
- raise(Excon::Errors.status_error({:expects => 200}, response))
83
+ raise Fog::AWS::EC2::Error.new("InvalidInstanceID.NotFound => The instance ID '#{instance_id}' does not exist")
83
84
  end
84
- response
85
85
  end
86
86
 
87
87
  end
@@ -43,6 +43,9 @@ module Fog
43
43
 
44
44
  def put_object(bucket_name, object_name, data, options = {})
45
45
  data = Fog::AWS::S3.parse_data(data)
46
+ unless data[:body].is_a?(String)
47
+ data[:body] = data[:body].read
48
+ end
46
49
  response = Excon::Response.new
47
50
  if (bucket = @data[:buckets][bucket_name])
48
51
  response.status = 200
@@ -94,10 +94,10 @@ describe 'EC2.describe_instances' do
94
94
  end
95
95
  describe 'failure' do
96
96
 
97
- it 'should raise a BadRequest error if the instance does not exist' do
97
+ it 'should raise a Fog::AWS::EC2::Error if the instance does not exist' do
98
98
  lambda {
99
99
  AWS[:ec2].describe_instances('i-00000000')
100
- }.should raise_error(Excon::Errors::BadRequest)
100
+ }.should raise_error(Fog::AWS::EC2::Error)
101
101
  end
102
102
 
103
103
  end
@@ -25,10 +25,10 @@ describe 'EC2.get_console_output' do
25
25
  end
26
26
  describe 'failure' do
27
27
 
28
- it "should raise a BadRequest error if the instance does not exist" do
28
+ it "should raise a Fog::AWS::EC2::Error if the instance does not exist" do
29
29
  lambda {
30
30
  AWS[:ec2].get_console_output('i-00000000')
31
- }.should raise_error(Excon::Errors::BadRequest)
31
+ }.should raise_error(Fog::AWS::EC2::Error)
32
32
  end
33
33
 
34
34
  end
@@ -20,10 +20,10 @@ describe 'EC2.reboot_instances' do
20
20
  end
21
21
  describe 'failure' do
22
22
 
23
- it "should raise a BadRequest error if the instance does not exist" do
23
+ it "should raise a Fog::AWS::EC2::Error if the instance does not exist" do
24
24
  lambda {
25
25
  AWS[:ec2].reboot_instances('i-00000000')
26
- }.should raise_error(Excon::Errors::BadRequest)
26
+ }.should raise_error(Fog::AWS::EC2::Error)
27
27
  end
28
28
 
29
29
  end
@@ -25,10 +25,10 @@ describe 'EC2.terminate_instances' do
25
25
  end
26
26
  describe 'failure' do
27
27
 
28
- it 'should raise a BadRequest error if the instance does not exist' do
28
+ it 'should raise a Fog::AWS::EC2::Error if the instance does not exist' do
29
29
  lambda {
30
30
  AWS[:ec2].terminate_instances('i-00000000')
31
- }.should raise_error(Excon::Errors::BadRequest)
31
+ }.should raise_error(Fog::AWS::EC2::Error)
32
32
  end
33
33
 
34
34
  end
@@ -22,28 +22,12 @@ Shindo.tests('AWS::EC2 | address requests', ['aws']) do
22
22
  AWS[:ec2].describe_addresses(@public_ip).body
23
23
  end
24
24
 
25
- tests("#associate_addresses('#{@server.identity}', '#{@public_Ip}')") do
26
-
27
- formats(AWS::EC2::Formats::BASIC) do
28
- AWS[:ec2].associate_address(@server.identity, @public_ip).body
29
- end
30
-
31
- tests('server.ip_address').returns(@public_ip) do
32
- @server.reload.ip_address
33
- end
34
-
25
+ tests("#associate_addresses('#{@server.identity}', '#{@public_Ip}')").formats(AWS::EC2::Formats::BASIC) do
26
+ AWS[:ec2].associate_address(@server.identity, @public_ip).body
35
27
  end
36
28
 
37
- tests("#dissassociate_address('#{@public_ip}')") do
38
-
39
- formats(AWS::EC2::Formats::BASIC) do
40
- AWS[:ec2].disassociate_address(@public_ip).body
41
- end
42
-
43
- test("server.ip_address is not #{@public_ip}") do
44
- @server.reload.ip_address != @public_ip
45
- end
46
-
29
+ tests("#dissassociate_address('#{@public_ip}')").formats(AWS::EC2::Formats::BASIC) do
30
+ AWS[:ec2].disassociate_address(@public_ip).body
47
31
  end
48
32
 
49
33
  tests("#release_address('#{@public_ip}')").formats(AWS::EC2::Formats::BASIC) do
@@ -55,23 +39,27 @@ Shindo.tests('AWS::EC2 | address requests', ['aws']) do
55
39
 
56
40
  @address = AWS[:ec2].addresses.create
57
41
 
58
- tests("#describe_addresses('127.0.0.1')").raises(Excon::Errors::BadRequest) do
42
+ tests("#describe_addresses('127.0.0.1')").raises(Fog::AWS::EC2::Error) do
59
43
  AWS[:ec2].describe_addresses('127.0.0.1')
60
44
  end
61
45
 
62
- tests("#associate_addresses('i-00000000', '#{@address.identity}')").raises(Excon::Errors::BadRequest) do
46
+ tests("#associate_addresses('i-00000000', '#{@address.identity}')").raises(Fog::AWS::EC2::Error) do
63
47
  AWS[:ec2].associate_address('i-00000000', @address.identity)
64
48
  end
65
49
 
66
- tests("#associate_addresses('#{@server.identity}', '127.0.0.1')").raises(Excon::Errors::BadRequest) do
50
+ tests("#associate_addresses('#{@server.identity}', '127.0.0.1')").raises(Fog::AWS::EC2::Error) do
67
51
  AWS[:ec2].associate_address(@server.identity, '127.0.0.1')
68
52
  end
69
53
 
70
- tests("#disassociate_addresses('127.0.0.1') raises BadRequest error").raises(Excon::Errors::BadRequest) do
54
+ tests("#associate_addresses('i-00000000', '127.0.0.1')").raises(Fog::AWS::EC2::Error) do
55
+ AWS[:ec2].associate_address('i-00000000', '127.0.0.1')
56
+ end
57
+
58
+ tests("#disassociate_addresses('127.0.0.1') raises BadRequest error").raises(Fog::AWS::EC2::Error) do
71
59
  AWS[:ec2].disassociate_address('127.0.0.1')
72
60
  end
73
61
 
74
- tests("#release_address('127.0.0.1')").raises(Excon::Errors::BadRequest) do
62
+ tests("#release_address('127.0.0.1')").raises(Fog::AWS::EC2::Error) do
75
63
  AWS[:ec2].release_address('127.0.0.1')
76
64
  end
77
65
 
@@ -14,7 +14,7 @@ Shindo.tests('AWS::EC2 | availability zone requests', ['aws']) do
14
14
 
15
15
  tests('failure') do
16
16
 
17
- tests("#describe_availability_zones('not-a-zone')").raises(Excon::Errors::BadRequest) do
17
+ tests("#describe_availability_zones('not-a-zone')").raises(Fog::AWS::EC2::Error) do
18
18
  AWS[:ec2].describe_availability_zones('not-a-zone')
19
19
  end
20
20
 
@@ -29,11 +29,11 @@ Shindo.tests('AWS::EC2 | key pair requests', ['aws']) do
29
29
 
30
30
  @key_pair = AWS[:ec2].key_pairs.create(:name => 'fog_key_pair')
31
31
 
32
- tests("duplicate #create_key_pair('#{@key_pair.name}')").raises(Excon::Errors::BadRequest) do
32
+ tests("duplicate #create_key_pair('#{@key_pair.name}')").raises(Fog::AWS::EC2::Error) do
33
33
  AWS[:ec2].create_key_pair(@key_pair.name)
34
34
  end
35
35
 
36
- tests("#describe_key_pair('not_a_key_name')").raises(Excon::Errors::BadRequest) do
36
+ tests("#describe_key_pair('not_a_key_name')").raises(Fog::AWS::EC2::Error) do
37
37
  AWS[:ec2].describe_key_pairs('not_a_key_name').body
38
38
  end
39
39
 
@@ -14,7 +14,7 @@ Shindo.tests('AWS::EC2 | region requests', ['aws']) do
14
14
 
15
15
  tests('failure') do
16
16
 
17
- tests("#describe_regions('not-a-region')").raises(Excon::Errors::BadRequest) do
17
+ tests("#describe_regions('not-a-region')").raises(Fog::AWS::EC2::Error) do
18
18
  AWS[:ec2].describe_regions('not-a-region')
19
19
  end
20
20
  end
@@ -59,11 +59,11 @@ Shindo.tests('AWS::EC2 | security group requests', ['aws']) do
59
59
 
60
60
  @security_group = AWS[:ec2].security_groups.create(:description => 'tests group', :name => 'fog_security_group')
61
61
 
62
- tests("duplicate #create_security_group(#{@security_group.name}, #{@security_group.description})").raises(Excon::Errors::BadRequest) do
62
+ tests("duplicate #create_security_group(#{@security_group.name}, #{@security_group.description})").raises(Fog::AWS::EC2::Error) do
63
63
  AWS[:ec2].create_security_group(@security_group.name, @security_group.description)
64
64
  end
65
65
 
66
- tests("#authorize_security_group_ingress({'FromPort' => 80, 'GroupName' => 'not_a_group_name', 'IpProtocol' => 'tcp', 'toPort' => 80})").raises(Excon::Errors::BadRequest) do
66
+ tests("#authorize_security_group_ingress({'FromPort' => 80, 'GroupName' => 'not_a_group_name', 'IpProtocol' => 'tcp', 'toPort' => 80})").raises(Fog::AWS::EC2::Error) do
67
67
  AWS[:ec2].authorize_security_group_ingress({
68
68
  'FromPort' => 80,
69
69
  'GroupName' => 'not_a_group_name',
@@ -72,7 +72,7 @@ Shindo.tests('AWS::EC2 | security group requests', ['aws']) do
72
72
  })
73
73
  end
74
74
 
75
- tests("#authorize_security_group_ingress({'GroupName' => 'not_a_group_name', 'SourceSecurityGroupName' => 'not_a_group_name', 'SourceSecurityGroupOwnerId' => '#{@owner_id}'})").raises(Excon::Errors::BadRequest) do
75
+ tests("#authorize_security_group_ingress({'GroupName' => 'not_a_group_name', 'SourceSecurityGroupName' => 'not_a_group_name', 'SourceSecurityGroupOwnerId' => '#{@owner_id}'})").raises(Fog::AWS::EC2::Error) do
76
76
  AWS[:ec2].authorize_security_group_ingress({
77
77
  'GroupName' => 'not_a_group_name',
78
78
  'SourceSecurityGroupName' => 'not_a_group_name',
@@ -80,11 +80,11 @@ Shindo.tests('AWS::EC2 | security group requests', ['aws']) do
80
80
  })
81
81
  end
82
82
 
83
- tests("#describe_security_group('not_a_group_name)").raises(Excon::Errors::BadRequest) do
83
+ tests("#describe_security_group('not_a_group_name)").raises(Fog::AWS::EC2::Error) do
84
84
  AWS[:ec2].describe_security_groups('not_a_group_name')
85
85
  end
86
86
 
87
- tests("#revoke_security_group_ingress({'FromPort' => 80, 'GroupName' => 'not_a_group_name', 'IpProtocol' => 'tcp', 'toPort' => 80})").raises(Excon::Errors::BadRequest) do
87
+ tests("#revoke_security_group_ingress({'FromPort' => 80, 'GroupName' => 'not_a_group_name', 'IpProtocol' => 'tcp', 'toPort' => 80})").raises(Fog::AWS::EC2::Error) do
88
88
  AWS[:ec2].revoke_security_group_ingress({
89
89
  'FromPort' => 80,
90
90
  'GroupName' => 'not_a_group_name',
@@ -93,7 +93,7 @@ Shindo.tests('AWS::EC2 | security group requests', ['aws']) do
93
93
  })
94
94
  end
95
95
 
96
- tests("#revoke_security_group_ingress({'GroupName' => 'not_a_group_name', 'SourceSecurityGroupName' => 'not_a_group_name', 'SourceSecurityGroupOwnerId' => '#{@owner_id}'})").raises(Excon::Errors::BadRequest) do
96
+ tests("#revoke_security_group_ingress({'GroupName' => 'not_a_group_name', 'SourceSecurityGroupName' => 'not_a_group_name', 'SourceSecurityGroupOwnerId' => '#{@owner_id}'})").raises(Fog::AWS::EC2::Error) do
97
97
  AWS[:ec2].revoke_security_group_ingress({
98
98
  'GroupName' => 'not_a_group_name',
99
99
  'SourceSecurityGroupName' => 'not_a_group_name',
@@ -101,7 +101,7 @@ Shindo.tests('AWS::EC2 | security group requests', ['aws']) do
101
101
  })
102
102
  end
103
103
 
104
- tests("#delete_security_group('not_a_group_name')").raises(Excon::Errors::BadRequest) do
104
+ tests("#delete_security_group('not_a_group_name')").raises(Fog::AWS::EC2::Error) do
105
105
  AWS[:ec2].delete_security_group('not_a_group_name')
106
106
  end
107
107
 
@@ -28,11 +28,11 @@ Shindo.tests('AWS::EC2 | snapshot requests', ['aws']) do
28
28
  end
29
29
  tests ('failure') do
30
30
 
31
- tests("#describe_snapshot('snap-00000000')").raises(Excon::Errors::BadRequest) do
31
+ tests("#describe_snapshot('snap-00000000')").raises(Fog::AWS::EC2::Error) do
32
32
  AWS[:ec2].describe_snapshots('snap-00000000')
33
33
  end
34
34
 
35
- tests("#delete_snapshot('snap-00000000')").raises(Excon::Errors::BadRequest) do
35
+ tests("#delete_snapshot('snap-00000000')").raises(Fog::AWS::EC2::Error) do
36
36
  AWS[:ec2].delete_snapshot('snap-00000000')
37
37
  end
38
38
 
@@ -41,23 +41,23 @@ Shindo.tests('AWS::EC2 | volume requests', ['aws']) do
41
41
 
42
42
  @volume = AWS[:ec2].volumes.create(:availability_zone => @server.availability_zone, :size => 1)
43
43
 
44
- tests("#describe_volume('vol-00000000')").raises(Excon::Errors::BadRequest) do
44
+ tests("#describe_volume('vol-00000000')").raises(Fog::AWS::EC2::Error) do
45
45
  AWS[:ec2].describe_volumes('vol-00000000')
46
46
  end
47
47
 
48
- tests("#attach_volume('i-00000000', '#{@volume.identity}', '/dev/sdh')").raises(Excon::Errors::BadRequest) do
48
+ tests("#attach_volume('i-00000000', '#{@volume.identity}', '/dev/sdh')").raises(Fog::AWS::EC2::Error) do
49
49
  AWS[:ec2].attach_volume('i-00000000', @volume.identity, '/dev/sdh')
50
50
  end
51
51
 
52
- tests("#attach_volume('#{@server.identity}', 'vol-00000000', '/dev/sdh')").raises(Excon::Errors::BadRequest) do
52
+ tests("#attach_volume('#{@server.identity}', 'vol-00000000', '/dev/sdh')").raises(Fog::AWS::EC2::Error) do
53
53
  AWS[:ec2].attach_volume(@server.identity, 'vol-00000000', '/dev/sdh')
54
54
  end
55
55
 
56
- tests("#detach_volume('vol-00000000')").raises(Excon::Errors::BadRequest) do
56
+ tests("#detach_volume('vol-00000000')").raises(Fog::AWS::EC2::Error) do
57
57
  AWS[:ec2].detach_volume('vol-00000000')
58
58
  end
59
59
 
60
- tests("#delete_volume('vol-00000000')").raises(Excon::Errors::BadRequest) do
60
+ tests("#delete_volume('vol-00000000')").raises(Fog::AWS::EC2::Error) do
61
61
  AWS[:ec2].delete_volume('vol-00000000')
62
62
  end
63
63
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - geemus (Wesley Beary)
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-24 00:00:00 -07:00
17
+ date: 2010-05-26 00:00:00 -07:00
18
18
  default_executable: fog
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency