mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge branch 'master' of github.com:fog/fog into test_fix3
This commit is contained in:
commit
0197937ae0
25 changed files with 349 additions and 51 deletions
|
@ -130,7 +130,10 @@ module Fog
|
||||||
|
|
||||||
# CGI.escape, but without special treatment on spaces
|
# CGI.escape, but without special treatment on spaces
|
||||||
def self.escape(str,extra_exclude_chars = '')
|
def self.escape(str,extra_exclude_chars = '')
|
||||||
str.gsub(/([^a-zA-Z0-9_.-#{extra_exclude_chars}]+)/) do
|
# '-' is a special character inside a regex class so it must be first or last.
|
||||||
|
# Add extra excludes before the final '-' so it always remains trailing, otherwise
|
||||||
|
# an unwanted range is created by mistake.
|
||||||
|
str.gsub(/([^a-zA-Z0-9_.#{extra_exclude_chars}-]+)/) do
|
||||||
'%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
|
'%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
98
lib/fog/rackspace/examples/compute_v2/bootstrap_server.rb
Normal file
98
lib/fog/rackspace/examples/compute_v2/bootstrap_server.rb
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
# This example demonstrates creating a server with the Rackpace Open Cloud
|
||||||
|
|
||||||
|
require 'rubygems' #required for Ruby 1.8.x
|
||||||
|
require 'fog'
|
||||||
|
require 'base64' #required to encode files for personality functionality
|
||||||
|
require 'sshkey' #required to generate ssh keys. 'gem install sshkey'
|
||||||
|
|
||||||
|
def get_user_input(prompt)
|
||||||
|
print "#{prompt}: "
|
||||||
|
gets.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
# Use username defined in ~/.fog file, if absent prompt for username.
|
||||||
|
# For more details on ~/.fog refer to http://fog.io/about/getting_started.html
|
||||||
|
def rackspace_username
|
||||||
|
Fog.credentials[:rackspace_username] || get_user_input("Enter Rackspace Username")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Use api key defined in ~/.fog file, if absent prompt for api key
|
||||||
|
# For more details on ~/.fog refer to http://fog.io/about/getting_started.html
|
||||||
|
def rackspace_api_key
|
||||||
|
Fog.credentials[:rackspace_api_key] || get_user_input("Enter Rackspace API key")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Generates a ssh key using the SSHKey library. The private key is avaialble via
|
||||||
|
# the '.private_key' and the public key is avaialble via '.ssh_public_key'
|
||||||
|
def generate_ssh_key
|
||||||
|
SSHKey.generate
|
||||||
|
end
|
||||||
|
|
||||||
|
# create Next Generation Cloud Server service
|
||||||
|
service = Fog::Compute.new({
|
||||||
|
:provider => 'rackspace',
|
||||||
|
:rackspace_username => rackspace_username,
|
||||||
|
:rackspace_api_key => rackspace_api_key,
|
||||||
|
:version => :v2, # Use Next Gen Cloud Servers
|
||||||
|
:rackspace_region => :ord #Use Chicago Region
|
||||||
|
})
|
||||||
|
|
||||||
|
# pick the first flavor
|
||||||
|
flavor = service.flavors.first
|
||||||
|
|
||||||
|
# pick the first Ubuntu image we can find
|
||||||
|
image = service.images.find {|image| image.name =~ /Ubuntu/}
|
||||||
|
|
||||||
|
# prompt for server name
|
||||||
|
server_name = get_user_input "\nEnter Server Name"
|
||||||
|
|
||||||
|
# generate the ssh key
|
||||||
|
ssh_key = generate_ssh_key
|
||||||
|
|
||||||
|
# reload flavor in order to retrieve all of its attributes
|
||||||
|
flavor.reload
|
||||||
|
|
||||||
|
puts "\nNow creating server '#{server_name}' the following with specifications:\n"
|
||||||
|
puts "\t* #{flavor.ram} MB RAM"
|
||||||
|
puts "\t* #{flavor.disk} GB"
|
||||||
|
puts "\t* #{flavor.vcpus} CPU(s)"
|
||||||
|
puts "\t* #{image.name}"
|
||||||
|
puts "\n"
|
||||||
|
|
||||||
|
begin
|
||||||
|
# bootstrap server
|
||||||
|
server = service.servers.bootstrap :name => server_name,
|
||||||
|
:flavor_id => flavor.id,
|
||||||
|
:image_id => image.id,
|
||||||
|
:private_key => ssh_key.private_key,
|
||||||
|
:public_key => ssh_key.ssh_public_key
|
||||||
|
|
||||||
|
if server.ready?
|
||||||
|
puts "[DONE]\n\n"
|
||||||
|
|
||||||
|
puts "The server has been successfully created.\n"
|
||||||
|
puts "Write the following ssh keys to you ~/.ssh directory in order to log in\n\n"
|
||||||
|
puts "+++++++++++PRIVATE_KEY (~/.ssh/fog_key)++++++++++++"
|
||||||
|
puts ssh_key.private_key
|
||||||
|
puts "++++++++++PUBLIC_KEY (~/.ssh/fog_key.pub)++++++++++"
|
||||||
|
puts ssh_key.ssh_public_key
|
||||||
|
puts "+++++++++++++++++++++++++++++++++++++++++++++++++++i\n\n"
|
||||||
|
|
||||||
|
puts "You can then log into the server using the following command\n"
|
||||||
|
puts "ssh #{server.username}@#{server.public_ip_address}\n\n"
|
||||||
|
else
|
||||||
|
puts "An error occured, please try again"
|
||||||
|
end
|
||||||
|
|
||||||
|
rescue Fog::Errors::TimeoutError
|
||||||
|
puts "[TIMEOUT]\n\n"
|
||||||
|
|
||||||
|
puts "This server is currently #{server.progress}% into the build process and is taking longer to complete than expected."
|
||||||
|
puts "You can continute to monitor the build process through the web console at https://mycloud.rackspace.com/\n\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "To delete the server please execute the delete_server.rb script\n\n"
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,7 @@ module Fog
|
||||||
request :get_error_page
|
request :get_error_page
|
||||||
request :set_error_page
|
request :set_error_page
|
||||||
request :remove_error_page
|
request :remove_error_page
|
||||||
|
request :get_stats
|
||||||
|
|
||||||
module Shared
|
module Shared
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,30 @@ module Fog
|
||||||
class RackspaceV2
|
class RackspaceV2
|
||||||
class Images < Fog::Collection
|
class Images < Fog::Collection
|
||||||
|
|
||||||
|
# @!attribute [rw] name
|
||||||
|
# @return [String] Given a string value x, filters the list of images by image name.
|
||||||
|
attribute :name
|
||||||
|
|
||||||
|
# @!attribute [rw] status
|
||||||
|
# @return [String] Given a string value x, filters the list of images by status.
|
||||||
|
# @note Possible values are ACTIVE, DELETED, ERROR, SAVING, and UNKNOWN.
|
||||||
|
attribute :status
|
||||||
|
|
||||||
|
# @!attribute [rw] marker
|
||||||
|
# @return [String] Given a string value x, return object names greater in value than the specified marker.
|
||||||
|
# @see http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Large_Number_of_Objects-d1e1521.html
|
||||||
|
attribute :marker
|
||||||
|
|
||||||
|
# @!attribute [rw] limit
|
||||||
|
# @return [Integer] For an integer value n, limits the number of results to at most n values.
|
||||||
|
# @see http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Large_Number_of_Objects-d1e1521.html
|
||||||
|
attribute :limit
|
||||||
|
|
||||||
|
# @!attribute [rw] type
|
||||||
|
# @return [String] Given a string value x, filters the list of images by type.
|
||||||
|
# @note Valid values are BASE and SNAPSHOT
|
||||||
|
attribute :type
|
||||||
|
|
||||||
model Fog::Compute::RackspaceV2::Image
|
model Fog::Compute::RackspaceV2::Image
|
||||||
|
|
||||||
# Returns list of images
|
# Returns list of images
|
||||||
|
@ -17,8 +41,17 @@ module Fog
|
||||||
# @note Fog's current implementation only returns 1000 images.
|
# @note Fog's current implementation only returns 1000 images.
|
||||||
# @note Fog does not retrieve all image details. Please use get to retrieve all details for a specific image.
|
# @note Fog does not retrieve all image details. Please use get to retrieve all details for a specific image.
|
||||||
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Images-d1e4435.html
|
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Images-d1e4435.html
|
||||||
def all
|
def all(options = {})
|
||||||
data = service.list_images.body['images']
|
options = {
|
||||||
|
'name' => name,
|
||||||
|
'status' => status,
|
||||||
|
'marker' => marker,
|
||||||
|
'limit' => limit,
|
||||||
|
'type' => type
|
||||||
|
}.merge!(options)
|
||||||
|
merge_attributes(options)
|
||||||
|
|
||||||
|
data = service.list_images(options).body['images']
|
||||||
load(data)
|
load(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -196,6 +196,11 @@ module Fog
|
||||||
service.get_load_balancer_usage(identity, options).body
|
service.get_load_balancer_usage(identity, options).body
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def stats
|
||||||
|
requires :identity
|
||||||
|
service.get_stats(identity).body
|
||||||
|
end
|
||||||
|
|
||||||
def error_page
|
def error_page
|
||||||
requires :identity
|
requires :identity
|
||||||
service.get_error_page(identity).body['errorpage']['content']
|
service.get_error_page(identity).body['errorpage']['content']
|
||||||
|
|
|
@ -4,29 +4,39 @@ module Fog
|
||||||
class Real
|
class Real
|
||||||
|
|
||||||
# Retrieves a list of images
|
# Retrieves a list of images
|
||||||
|
# ==== Parameters
|
||||||
|
# * options<~String>:
|
||||||
|
# * 'name'<~String> - Filters the list of images by image name
|
||||||
|
# * 'limit'<~String> - Maximum number of objects to return
|
||||||
|
# * 'marker'<~String> - Only return objects whose name is greater than marker
|
||||||
|
# * 'status'<~String> - Filters the list of images by status
|
||||||
|
# * 'type'<~String> - Filters base Rackspace images or anyn custom server images that have been created
|
||||||
|
#
|
||||||
# @return [Excon::Response] response:
|
# @return [Excon::Response] response:
|
||||||
# * body [Hash]:
|
# * body [Hash]:
|
||||||
# * images [Array]:
|
# * images [Array]:
|
||||||
# * [Hash]:
|
# * [Hash]:
|
||||||
# * id [String] - flavor id
|
# * id [String] - image id
|
||||||
# * links [Array] - image links
|
# * links [Array] - image links
|
||||||
# * name [String] - image name
|
# * name [String] - image name
|
||||||
# @raise [Fog::Compute::RackspaceV2::NotFound] - HTTP 404
|
# @raise [Fog::Compute::RackspaceV2::NotFound] - HTTP 404
|
||||||
# @raise [Fog::Compute::RackspaceV2::BadRequest] - HTTP 400
|
# @raise [Fog::Compute::RackspaceV2::BadRequest] - HTTP 400
|
||||||
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
# @raise [Fog::Compute::RackspaceV2::InternalServerError] - HTTP 500
|
||||||
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
# @raise [Fog::Compute::RackspaceV2::ServiceError]
|
||||||
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Flavors-d1e4188.html
|
# @see http://docs.rackspace.com/servers/api/v2/cs-devguide/content/List_Images-d1e4435.html
|
||||||
def list_images
|
def list_images(options = {})
|
||||||
|
options = options.reject {|key, value| value.nil?}
|
||||||
request(
|
request(
|
||||||
:expects => [200, 203],
|
:expects => [200, 203],
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:path => 'images'
|
:path => 'images',
|
||||||
|
:query => {'format' => 'json'}.merge!(options)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Mock
|
class Mock
|
||||||
def list_images
|
def list_images(options = {})
|
||||||
images = self.data[:images].values
|
images = self.data[:images].values
|
||||||
response(:body => {"images" => images})
|
response(:body => {"images" => images})
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ module Fog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
request(
|
request_without_retry(
|
||||||
:body => Fog::JSON.encode(data),
|
:body => Fog::JSON.encode(data),
|
||||||
:expects => [200, 203],
|
:expects => [200, 203],
|
||||||
:method => 'POST',
|
:method => 'POST',
|
||||||
|
|
|
@ -24,6 +24,18 @@ module Fog
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock
|
||||||
|
def create_load_balancer(name, protocol, port, virtual_ips, nodes, options = {})
|
||||||
|
data = {"loadBalancer"=>{"name"=>name, "id"=>uniq_id, "protocol"=>protocol, "port"=>port, "algorithm"=>"RANDOM", "status"=>"BUILD",
|
||||||
|
"cluster"=>{"name"=>"ztm-n13.dfw1.lbaas.rackspace.net"}, "timeout"=>30, "created"=>{"time"=>"2013-08-20T20:52:44Z"},
|
||||||
|
"updated"=>{"time"=>"2013-08-20T20:52:44Z"}, "halfClosed"=>false, "connectionLogging"=>{"enabled"=>false}, "contentCaching"=>{"enabled"=>false}}}
|
||||||
|
data["virtual_ips"] = virtual_ips.collect {|n| {"virtualIps"=>[{"address"=>"192.237.192.152", "id"=>uniq_id, "type"=>n[:type], "ipVersion"=>"IPV4"}, {"address"=>"2001:4800:7901:0000:ba81:a6a5:0000:0002", "id"=>9153169, "type"=>"PUBLIC", "ipVersion"=>"IPV6"}], "sourceAddresses"=>{"ipv6Public"=>"2001:4800:7901::13/64", "ipv4Servicenet"=>"10.189.254.5", "ipv4Public"=>"166.78.44.5"}}
|
||||||
|
data["nodes"] = nodes.collect {|n| {"address"=>n[:address], "id"=>uniq_id, "type"=>"PRIMARY", "port"=>n[:port], "status"=>"ONLINE", "condition"=>"ENABLED", "weight"=>1}}
|
||||||
|
data = Excon::Response.new(:body => data, :status => 202)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
31
lib/fog/rackspace/requests/load_balancers/get_stats.rb
Normal file
31
lib/fog/rackspace/requests/load_balancers/get_stats.rb
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
module Fog
|
||||||
|
module Rackspace
|
||||||
|
class LoadBalancers
|
||||||
|
class Real
|
||||||
|
def get_stats(load_balancer_id)
|
||||||
|
|
||||||
|
request(
|
||||||
|
:expects => 200,
|
||||||
|
:path => "loadbalancers/#{load_balancer_id}/stats",
|
||||||
|
:method => 'GET'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Mock
|
||||||
|
def get_stats(load_balancer_id)
|
||||||
|
mock_data = {
|
||||||
|
'connectTimeOut' => 0,
|
||||||
|
'connectError' => 1,
|
||||||
|
'connectFailure' => 2,
|
||||||
|
'dataTimedOut' => 3,
|
||||||
|
'keepAliveTimedOut' => 4,
|
||||||
|
'maxConn' => 5
|
||||||
|
}
|
||||||
|
|
||||||
|
Excon::Response.new(:body => mock_data, :status => 200)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -30,6 +30,13 @@ module Fog
|
||||||
self.send authentication_method, options
|
self.send authentication_method, options
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def request_without_retry(params, parse_json = true, &block)
|
||||||
|
response = @connection.request(request_params(params), &block)
|
||||||
|
|
||||||
|
process_response(response) if parse_json
|
||||||
|
response
|
||||||
|
end
|
||||||
|
|
||||||
def request(params, parse_json = true, &block)
|
def request(params, parse_json = true, &block)
|
||||||
first_attempt = true
|
first_attempt = true
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -77,6 +77,7 @@ module Fog
|
||||||
require 'mime/types'
|
require 'mime/types'
|
||||||
@rackspace_api_key = options[:rackspace_api_key]
|
@rackspace_api_key = options[:rackspace_api_key]
|
||||||
@rackspace_username = options[:rackspace_username]
|
@rackspace_username = options[:rackspace_username]
|
||||||
|
@rackspace_cdn_ssl = options[:rackspace_cdn_ssl]
|
||||||
end
|
end
|
||||||
|
|
||||||
def data
|
def data
|
||||||
|
@ -95,6 +96,10 @@ module Fog
|
||||||
@rackspace_region
|
@rackspace_region
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ssl?
|
||||||
|
!!@rackspace_cdn_ssl
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Real < Fog::Rackspace::Service
|
class Real < Fog::Rackspace::Service
|
||||||
|
@ -134,7 +139,7 @@ module Fog
|
||||||
# @return [Boolean] return true if service is returning SSL-Secured URLs in public_url methods
|
# @return [Boolean] return true if service is returning SSL-Secured URLs in public_url methods
|
||||||
# @see Directory#public_url
|
# @see Directory#public_url
|
||||||
def ssl?
|
def ssl?
|
||||||
!rackspace_cdn_ssl.nil?
|
!!rackspace_cdn_ssl
|
||||||
end
|
end
|
||||||
|
|
||||||
# Resets presistent service connections
|
# Resets presistent service connections
|
||||||
|
|
|
@ -105,10 +105,15 @@ Shindo.tests('Fog::Rackspace::BlockStorage', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Rackspace::BlockStorage.new :rackspace_region => :ord
|
@service = Fog::Rackspace::BlockStorage.new :rackspace_region => :ord
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad-token")
|
@service.instance_variable_set("@auth_token", "bad-token")
|
||||||
returns(200) { @service.list_volumes.status }
|
returns(200) { @service.list_volumes.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) {Fog::Rackspace::BlockStorage.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -99,11 +99,16 @@ Shindo.tests('Fog::CDN::Rackspace', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
@service = Fog::CDN::Rackspace.new
|
tests('should reauth with valid credentials') do
|
||||||
|
@service = Fog::CDN::Rackspace.new :rackspace_region => :ord
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad-token")
|
@service.instance_variable_set("@auth_token", "bad-token")
|
||||||
returns(true) { [200, 204].include? @service.get_containers.status }
|
returns(true) { [200, 204].include? @service.get_containers.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::CDN::Rackspace.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
|
|
@ -91,9 +91,15 @@ Shindo.tests('Rackspace | Compute', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Compute::Rackspace.new
|
@service = Fog::Compute::Rackspace.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad-token")
|
@service.instance_variable_set("@auth_token", "bad-token")
|
||||||
returns(true) { [200, 203].include?(@service.list_flavors.status) }
|
returns(true) { [200, 203].include?(@service.list_flavors.status) }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Compute::Rackspace.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -104,10 +104,15 @@ Shindo.tests('Fog::Compute::RackspaceV2', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Compute::RackspaceV2.new
|
@service = Fog::Compute::RackspaceV2.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad_token")
|
@service.instance_variable_set("@auth_token", "bad_token")
|
||||||
returns(true) { [200, 203].include? @service.list_flavors.status }
|
returns(true) { [200, 203].include? @service.list_flavors.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Compute::RackspaceV2.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -105,11 +105,16 @@ Shindo.tests('Fog::Rackspace::Databases', ['rackspace']) do |variable|
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Rackspace::Databases.new
|
@service = Fog::Rackspace::Databases.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad_token")
|
@service.instance_variable_set("@auth_token", "bad_token")
|
||||||
returns(200) { @service.list_flavors.status }
|
returns(200) { @service.list_flavors.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Rackspace::Databases.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@service = Fog::Rackspace::Databases.new
|
@service = Fog::Rackspace::Databases.new
|
||||||
|
|
||||||
|
|
|
@ -85,11 +85,16 @@ Shindo.tests('Fog::DNS::Rackspace', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::DNS::Rackspace.new
|
@service = Fog::DNS::Rackspace.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad_token")
|
@service.instance_variable_set("@auth_token", "bad_token")
|
||||||
returns(200) { @service.list_domains.status }
|
returns(200) { @service.list_domains.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::DNS::Rackspace.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
tests('array_to_query_string') do
|
tests('array_to_query_string') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
|
@ -16,10 +16,15 @@ Shindo.tests('Fog::Rackspace::Identity', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Rackspace::Identity.new :rackspace_region => :ord
|
@service = Fog::Rackspace::Identity.new :rackspace_region => :ord
|
||||||
returns(true, "auth token populated") { !@service.auth_token.nil? }
|
returns(true, "auth token populated") { !@service.auth_token.nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad-token")
|
@service.instance_variable_set("@auth_token", "bad-token")
|
||||||
returns(true) { [200, 203].include? @service.list_tenants.status }
|
returns(true) { [200, 203].include? @service.list_tenants.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Rackspace::Identity.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -105,10 +105,14 @@ Shindo.tests('Fog::Rackspace::LoadBalancers', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Rackspace::LoadBalancers.new
|
@service = Fog::Rackspace::LoadBalancers.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad-token")
|
@service.instance_variable_set("@auth_token", "bad-token")
|
||||||
returns(200) { @service.list_load_balancers.status }
|
returns(200) { @service.list_load_balancers.status } end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Rackspace::LoadBalancers.new:rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
|
@ -20,6 +20,11 @@ Shindo.tests('Fog::Rackspace::LoadBalancers | load_balancer', ['rackspace']) do
|
||||||
end
|
end
|
||||||
|
|
||||||
@instance.wait_for { ready? }
|
@instance.wait_for { ready? }
|
||||||
|
|
||||||
|
tests('#stats').succeeds do
|
||||||
|
@instance.stats
|
||||||
|
end
|
||||||
|
|
||||||
tests('#enable_connection_logging').succeeds do
|
tests('#enable_connection_logging').succeeds do
|
||||||
@instance.enable_connection_logging
|
@instance.enable_connection_logging
|
||||||
returns(true) { @instance.connection_logging }
|
returns(true) { @instance.connection_logging }
|
||||||
|
|
|
@ -63,10 +63,15 @@ Shindo.tests('Fog::Rackspace::Monitoring', ['rackspace','rackspace_monitoring'])
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Rackspace::Monitoring.new
|
@service = Fog::Rackspace::Monitoring.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad_token")
|
@service.instance_variable_set("@auth_token", "bad_token")
|
||||||
returns(true) { [200, 203].include? @service.list_entities.status }
|
returns(true) { [200, 203].include? @service.list_entities.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Rackspace::Monitoring.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
13
tests/rackspace/requests/load_balancers/get_stats_tests.rb
Normal file
13
tests/rackspace/requests/load_balancers/get_stats_tests.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
Shindo.tests('Fog::Rackspace::LoadBalancers | load_balancer_get_stats', ['rackspace']) do
|
||||||
|
|
||||||
|
given_a_load_balancer_service do
|
||||||
|
given_a_load_balancer do
|
||||||
|
tests('success') do
|
||||||
|
@lb.wait_for { ready? }
|
||||||
|
tests("#get_stats(#{@lb.id})").formats(LOAD_BALANCER_STATS_FORMAT) do
|
||||||
|
@service.get_stats(@lb.id).body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -32,6 +32,15 @@ LOAD_BALANCER_USAGE_FORMAT = {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOAD_BALANCER_STATS_FORMAT = {
|
||||||
|
'connectTimeOut' => Integer,
|
||||||
|
'connectError' => Integer,
|
||||||
|
'connectFailure' => Integer,
|
||||||
|
'dataTimedOut' => Integer,
|
||||||
|
'keepAliveTimedOut' => Integer,
|
||||||
|
'maxConn' => Integer
|
||||||
|
}
|
||||||
|
|
||||||
SSL_TERMINATION_FORMAT = {
|
SSL_TERMINATION_FORMAT = {
|
||||||
'sslTermination' => {
|
'sslTermination' => {
|
||||||
'certificate' => String,
|
'certificate' => String,
|
||||||
|
|
|
@ -102,15 +102,34 @@ Shindo.tests('Rackspace | Storage', ['rackspace']) do
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
|
|
||||||
|
tests('should reauth with valid credentials') do
|
||||||
@service = Fog::Storage::Rackspace.new
|
@service = Fog::Storage::Rackspace.new
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
@service.instance_variable_set("@auth_token", "bad-token")
|
@service.instance_variable_set("@auth_token", "bad-token")
|
||||||
returns(204) { @service.head_containers.status }
|
returns(204) { @service.head_containers.status }
|
||||||
end
|
end
|
||||||
|
tests('should terminate with incorrect credentials') do
|
||||||
|
raises(Excon::Errors::Unauthorized) { Fog::Storage::Rackspace.new :rackspace_api_key => 'bad_key' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
tests('account').succeeds do
|
tests('account').succeeds do
|
||||||
pending if Fog.mocking?
|
pending if Fog.mocking?
|
||||||
Fog::Storage[:rackspace].account
|
Fog::Storage[:rackspace].account
|
||||||
end
|
end
|
||||||
|
|
||||||
|
tests('ssl') do
|
||||||
|
tests('ssl enabled') do
|
||||||
|
@service = Fog::Storage::Rackspace.new(:rackspace_cdn_ssl => true)
|
||||||
|
returns(true) { @service.ssl? }
|
||||||
|
end
|
||||||
|
tests('ssl disabled') do
|
||||||
|
@service = Fog::Storage::Rackspace.new(:rackspace_cdn_ssl => false)
|
||||||
|
returns(false) { @service.ssl? }
|
||||||
|
|
||||||
|
@service = Fog::Storage::Rackspace.new(:rackspace_cdn_ssl => nil)
|
||||||
|
returns(false) { @service.ssl? }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
Shindo.tests('Rackspace | url_encoding', ['rackspace']) do
|
Shindo.tests('Rackspace | url_encoding', ['rackspace']) do
|
||||||
returns( Fog::Rackspace.escape( "is this my file?.jpg" ) ) { "is%20this%20my%20file%3F.jpg" }
|
returns("is%20this%20my%20file%3F.jpg") { Fog::Rackspace.escape("is this my file?.jpg") }
|
||||||
|
returns("foo/bar") { Fog::Rackspace.escape("foo/bar", "/") }
|
||||||
|
returns("foo%2Fbar") { Fog::Rackspace.escape("foo/bar", "0") }
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue