From 31e68e20fe983a0af6014ff84a4afea4847b607d Mon Sep 17 00:00:00 2001 From: Wesley Beary Date: Mon, 9 Nov 2009 22:53:04 -0800 Subject: [PATCH] add BUILD -> ACTIVE transition with delay for rackspace mocks --- .../rackspace/requests/servers/create_server.rb | 1 + .../rackspace/requests/servers/delete_server.rb | 8 ++++---- .../requests/servers/list_servers_detail.rb | 17 ++++++++++++++++- .../rackspace/requests/servers/update_server.rb | 2 +- lib/fog/rackspace/servers.rb | 3 ++- .../requests/servers/create_server_spec.rb | 4 ++-- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/lib/fog/rackspace/requests/servers/create_server.rb b/lib/fog/rackspace/requests/servers/create_server.rb index 6eedfb479..8661a16ec 100644 --- a/lib/fog/rackspace/requests/servers/create_server.rb +++ b/lib/fog/rackspace/requests/servers/create_server.rb @@ -90,6 +90,7 @@ else } data['name'] = "slice#{data[:id]}" data['adminPass'] = "#{data['name']}password" + Fog::Rackspace::Servers.data[:last_modified][data['id']] = Time.now Fog::Rackspace::Servers.data[:servers][data['id']] = data response.body = { 'server' => data } response diff --git a/lib/fog/rackspace/requests/servers/delete_server.rb b/lib/fog/rackspace/requests/servers/delete_server.rb index 4d05396b4..224b7b1eb 100644 --- a/lib/fog/rackspace/requests/servers/delete_server.rb +++ b/lib/fog/rackspace/requests/servers/delete_server.rb @@ -29,12 +29,12 @@ else def delete_server(server_id) response = Fog::Response.new - if server = Fog::Rackspace::Servers.data[:servers][server_id] - if server['STATUS'] == 'BUILD' + if server = list_servers_detail.body['servers'].detect { |server| server['id'] == server_id } + if server['status'] == 'BUILD' response.status = 409 - raise(Excon::Errors.status_error(202, 400, response)) + raise(Excon::Errors.status_error(202, 409, response)) else - Fog::Rackspace::Servers.data.delete(server_id) + Fog::Rackspace::Servers.data[:servers].delete(server_id) response.status = 202 end else diff --git a/lib/fog/rackspace/requests/servers/list_servers_detail.rb b/lib/fog/rackspace/requests/servers/list_servers_detail.rb index f2f2fd0c3..2c69b716b 100644 --- a/lib/fog/rackspace/requests/servers/list_servers_detail.rb +++ b/lib/fog/rackspace/requests/servers/list_servers_detail.rb @@ -39,7 +39,22 @@ else module Rackspace class Servers - def list_servers_details + def list_servers_detail + response = Fog::Response.new + + servers = Fog::Rackspace::Servers.data[:servers].values + for server in servers + case server['status'] + when 'BUILD' + if Time.now - Fog::Rackspace::Servers.data[:last_modified][server['id']] > 2 + server['status'] = 'ACTIVE' + end + end + end + + response.status = [200, 203][rand(1)] + response.body = { 'servers' => servers } + response end end diff --git a/lib/fog/rackspace/requests/servers/update_server.rb b/lib/fog/rackspace/requests/servers/update_server.rb index 3b44d07b2..156e88d97 100644 --- a/lib/fog/rackspace/requests/servers/update_server.rb +++ b/lib/fog/rackspace/requests/servers/update_server.rb @@ -32,7 +32,7 @@ else def update_server(server_id, options) response = Fog::Response.new - if server = Fog::Rackspace::Servers.data[:servers][server_id] + if server = list_servers_detail.body['servers'].detect { |server| server['id'] == server_id } if options['adminPass'] server['adminPass'] = options['adminPass'] end diff --git a/lib/fog/rackspace/servers.rb b/lib/fog/rackspace/servers.rb index a3b7bf28a..dd3a6be56 100644 --- a/lib/fog/rackspace/servers.rb +++ b/lib/fog/rackspace/servers.rb @@ -8,7 +8,8 @@ module Fog end def self.reset_data @data = { - :servers => {}, + :last_modified => [], + :servers => {} } end end diff --git a/spec/rackspace/requests/servers/create_server_spec.rb b/spec/rackspace/requests/servers/create_server_spec.rb index 9d090f13d..78d59d622 100644 --- a/spec/rackspace/requests/servers/create_server_spec.rb +++ b/spec/rackspace/requests/servers/create_server_spec.rb @@ -4,9 +4,9 @@ describe 'Rackspace::Servers.create_server' do describe 'success' do after(:each) do - # eventually(128) do + eventually(128) do servers.delete_server(@server_id) - # end + end end it "should return proper attributes" do