mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
commit
8ad1fc81c4
6 changed files with 34 additions and 24 deletions
|
@ -141,12 +141,12 @@ module Fog
|
||||||
|
|
||||||
@aws_access_key_id = options[:aws_access_key_id]
|
@aws_access_key_id = options[:aws_access_key_id]
|
||||||
|
|
||||||
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1'].include?(options[:region])
|
|
||||||
raise ArgumentError, "Unknown region: #{options[:region].inspect}"
|
|
||||||
end
|
|
||||||
|
|
||||||
@region = options[:region] || 'us-east-1'
|
@region = options[:region] || 'us-east-1'
|
||||||
|
|
||||||
|
unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1'].include?(@region)
|
||||||
|
raise ArgumentError, "Unknown region: #{@region.inspect}"
|
||||||
|
end
|
||||||
|
|
||||||
@data = self.class.data[@region][@aws_access_key_id]
|
@data = self.class.data[@region][@aws_access_key_id]
|
||||||
@owner_id = @data[:owner_id]
|
@owner_id = @data[:owner_id]
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,7 +33,19 @@ module Fog
|
||||||
class Mock
|
class Mock
|
||||||
|
|
||||||
def get_password_data(instance_id)
|
def get_password_data(instance_id)
|
||||||
Fog::Mock.not_implemented
|
response = Excon::Response.new
|
||||||
|
if instance = @data[:instances][instance_id]
|
||||||
|
response.status = 200
|
||||||
|
response.body = {
|
||||||
|
'instanceId' => instance_id,
|
||||||
|
'passwordData' => nil,
|
||||||
|
'requestId' => Fog::AWS::Mock.request_id,
|
||||||
|
'timestamp' => Time.now
|
||||||
|
}
|
||||||
|
response
|
||||||
|
else;
|
||||||
|
raise Fog::AWS::Compute::NotFound.new("The instance ID '#{instance_id}' does not exist")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
require 'fog/core'
|
require 'fog/core'
|
||||||
require 'fog/core/parser'
|
require 'fog/core/parser'
|
||||||
|
require 'openssl' # For RSA key pairs
|
||||||
|
|
||||||
module Fog
|
module Fog
|
||||||
module AWS
|
module AWS
|
||||||
|
@ -44,7 +45,7 @@ module Fog
|
||||||
def self.escape(string)
|
def self.escape(string)
|
||||||
string.gsub( /([^-a-zA-Z0-9_.~]+)/n ) { |match| '%' + match.unpack( 'H2' * match.size ).join( '%' ).upcase }
|
string.gsub( /([^-a-zA-Z0-9_.~]+)/n ) { |match| '%' + match.unpack( 'H2' * match.size ).join( '%' ).upcase }
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.signed_params(params, options = {})
|
def self.signed_params(params, options = {})
|
||||||
params.merge!({
|
params.merge!({
|
||||||
'AWSAccessKeyId' => options[:aws_access_key_id],
|
'AWSAccessKeyId' => options[:aws_access_key_id],
|
||||||
|
@ -140,13 +141,7 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.key_material
|
def self.key_material
|
||||||
key_material = ['-----BEGIN RSA PRIVATE KEY-----']
|
OpenSSL::PKey::RSA.generate(1024).to_s
|
||||||
20.times do
|
|
||||||
key_material << Fog::Mock.random_base64(76)
|
|
||||||
end
|
|
||||||
key_material << Fog::Mock.random_base64(67) + '='
|
|
||||||
key_material << '-----END RSA PRIVATE KEY-----'
|
|
||||||
key_material.join("\n")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.owner_id
|
def self.owner_id
|
||||||
|
|
|
@ -60,7 +60,7 @@ Shindo.tests('AWS::Compute | instance requests', ['aws']) do
|
||||||
|
|
||||||
@get_password_data_format = {
|
@get_password_data_format = {
|
||||||
'instanceId' => String,
|
'instanceId' => String,
|
||||||
'passwordData' => String,
|
'passwordData' => Fog::Nullable::String,
|
||||||
'requestId' => String,
|
'requestId' => String,
|
||||||
'timestamp' => Time
|
'timestamp' => Time
|
||||||
}
|
}
|
||||||
|
@ -119,15 +119,18 @@ Shindo.tests('AWS::Compute | instance requests', ['aws']) do
|
||||||
end
|
end
|
||||||
|
|
||||||
tests("#get_password_data('#{@instance_id}')").formats(@get_password_data_format) do
|
tests("#get_password_data('#{@instance_id}')").formats(@get_password_data_format) do
|
||||||
pending if Fog.mock?
|
result = AWS[:compute].get_password_data(@instance_id).body
|
||||||
result = nil
|
|
||||||
Fog.wait_for do
|
|
||||||
result = AWS[:compute].get_password_data(@instance_id).body
|
|
||||||
!result['passwordData'].nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
tests("key can decrypt passwordData").returns(true) do
|
tests("key can decrypt passwordData").returns(true) do
|
||||||
decoded_password = Base64.decode64(result['passwordData'])
|
|
||||||
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
password_data = result['passwordData']
|
||||||
|
Fog.wait_for do
|
||||||
|
password_data ||= AWS[:compute].get_password_data(@instance_id).body['passwordData']
|
||||||
|
end
|
||||||
|
|
||||||
|
decoded_password = Base64.decode64(password_data)
|
||||||
pkey = OpenSSL::PKey::RSA.new(key.private_key)
|
pkey = OpenSSL::PKey::RSA.new(key.private_key)
|
||||||
String === pkey.private_decrypt(decoded_password)
|
String === pkey.private_decrypt(decoded_password)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ Shindo.tests('AWS::Compute | key pair requests', ['aws']) do
|
||||||
|
|
||||||
tests("#create_key_pair('#{@key_pair_name}')").formats(@keypair_format.merge({'keyMaterial' => String})) do
|
tests("#create_key_pair('#{@key_pair_name}')").formats(@keypair_format.merge({'keyMaterial' => String})) do
|
||||||
body = AWS[:compute].create_key_pair(@key_pair_name).body
|
body = AWS[:compute].create_key_pair(@key_pair_name).body
|
||||||
tests("private key is valid RSA key").returns(OpenSSL::PKey::RSA) do
|
tests("key material").returns(OpenSSL::PKey::RSA, "is a valid private RSA key") do
|
||||||
OpenSSL::PKey::RSA.new(body['keyMaterial']).class
|
OpenSSL::PKey::RSA.new(body['keyMaterial']).class
|
||||||
end
|
end
|
||||||
body
|
body
|
||||||
|
|
|
@ -22,12 +22,12 @@ Shindo.tests('AWS::Compute | volume requests', ['aws']) do
|
||||||
@volumes_format = {
|
@volumes_format = {
|
||||||
'volumeSet' => [{
|
'volumeSet' => [{
|
||||||
'availabilityZone' => String,
|
'availabilityZone' => String,
|
||||||
'attachmentSet' => [],
|
'attachmentSet' => Array,
|
||||||
'createTime' => Time,
|
'createTime' => Time,
|
||||||
'size' => Integer,
|
'size' => Integer,
|
||||||
'snapshotId' => Fog::Nullable::String,
|
'snapshotId' => Fog::Nullable::String,
|
||||||
'status' => String,
|
'status' => String,
|
||||||
'tagSet' => {},
|
'tagSet' => Hash,
|
||||||
'volumeId' => String
|
'volumeId' => String
|
||||||
}],
|
}],
|
||||||
'requestId' => String
|
'requestId' => String
|
||||||
|
|
Loading…
Reference in a new issue