[rackspace|compute] server update method now updates accessIPv4, accessIPv6, as well as name; made server request tests more robust.

This commit is contained in:
Kyle Rames 2013-01-10 15:48:30 -06:00
parent a8d159f375
commit f75b0e3c52
5 changed files with 76 additions and 57 deletions

View File

@ -44,11 +44,17 @@ module Fog
ignore_attributes :metadata
attr_reader :password
attr_reader :password
def initialize(attributes={})
@service = attributes[:service]
super
end
end
alias :access_ipv4_address :ipv4_address
alias :access_ipv4_address= :ipv4_address=
alias :access_ipv6_address :ipv6_address
alias :access_ipv6_address= :ipv6_address=
def metadata
raise "Please save server before accessing metadata" unless identity
@ -88,8 +94,14 @@ module Fog
end
def update
requires :identity, :name
data = service.update_server(identity, name)
requires :identity
options = {
'name' => name,
'accessIPv4' => ipv4_address,
'accessIPv6' => ipv6_address
}
data = service.update_server(identity, options)
merge_attributes(data.body['server'])
true
end

View File

@ -2,15 +2,11 @@ module Fog
module Compute
class RackspaceV2
class Real
def update_server(server_id, name)
data = {
'server' => {
'name' => name
}
}
def update_server(server_id, options={})
data = options.is_a?(Hash) ? options : { 'name' => options } #LEGACY - second parameter was previously server name
request(
:body => Fog::JSON.encode(data),
:body => Fog::JSON.encode('server' => data),
:expects => [200],
:method => 'PUT',
:path => "servers/#{server_id}"

View File

@ -1,9 +1,11 @@
module Shindo
class Tests
def given_a_load_balancer_service(&block)
@service = Fog::Rackspace::LoadBalancers.new
instance_eval(&block)
end
def given_a_load_balancer(&block)
@lb = @service.load_balancers.create({
:name => ('fog' + Time.now.to_i.to_s),
@ -20,5 +22,18 @@ module Shindo
@lb.destroy
end
end
end
def wait_for_server_state(service, server_id, state, error_states=nil)
current_state = nil
until current_state == state
current_state = service.get_server(server_id).body['server']['status']
if error_states
raise "Error occurred! Server should have transitioned to '#{state}' not '#{current_state}'" if Array(error_states).include?(current_state)
end
sleep 10
end
sleep 30
end
end
end

View File

@ -11,64 +11,79 @@ Shindo.tests('Fog::Compute::RackspaceV2 | server', ['rackspace']) do
model_tests(service.servers, options, false) do
@instance.wait_for { ready? }
tests('#update').succeeds do
@instance.name = "fog_server_update"
@instance.access_ipv4_address= "10.10.0.1"
@instance.access_ipv6_address= "0:0:0:0:0:0:0:1"
@instance.save
@instance.reload
returns("10.10.0.1") { @instance.access_ipv4_address }
returns("0:0:0:0:0:0:0:1") { @instance.access_ipv6_address }
returns("fog_server_update") { @instance.name }
end
tests('#reboot("SOFT")').succeeds do
@instance.reboot('SOFT')
returns('REBOOT') { @instance.state }
end
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
tests('#reboot("HARD")').succeeds do
@instance.reboot('HARD')
returns('HARD_REBOOT') { @instance.state }
end
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
tests('#rebuild').succeeds do
@instance.rebuild('5cebb13a-f783-4f8c-8058-c4182c724ccd')
returns('REBUILD') { @instance.state }
end
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
tests('#resize').succeeds do
@instance.resize(3)
returns('RESIZE') { @instance.state }
end
@instance.wait_for { state == 'VERIFY_RESIZE' }
@instance.wait_for(timeout=1500) do
raise "ERROR: Server is in ACTIVE state and it should be in VERIFY_RESIZE" if state == 'ACTIVE'
state == 'VERIFY_RESIZE'
end
tests('#confirm_resize').succeeds do
@instance.confirm_resize
end
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
tests('#resize').succeeds do
@instance.resize(2)
returns('RESIZE') { @instance.state }
end
@instance.wait_for { state == 'VERIFY_RESIZE' }
@instance.wait_for(timeout=1500) { state == 'VERIFY_RESIZE' }
tests('#revert_resize').succeeds do
@instance.revert_resize
end
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
tests('#change_admin_password').succeeds do
@instance.change_admin_password('somerandompassword')
returns('PASSWORD') { @instance.state }
returns('somerandompassword') { @instance.password }
end
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
end
# When after testing resize/resize_confirm we get a 409 when we try to resize_revert so I am going to split it into two blocks
model_tests(service.servers, options, false) do
@instance.wait_for { ready? }
@instance.wait_for(timeout=1500) { ready? }
tests('#resize').succeeds do
@instance.resize(4)
returns('RESIZE') { @instance.state }
end
@instance.wait_for { state == 'VERIFY_RESIZE' }
@instance.wait_for(timeout=1500) { state == 'VERIFY_RESIZE' }
tests('#revert_resize').succeeds do
@instance.revert_resize
end

View File

@ -67,78 +67,59 @@ Shindo.tests('Fog::Compute::RackspaceV2 | server_tests', ['rackspace']) do
body
end
tests('#list_servers').formats(LIST_SERVERS_FORMAT) do
tests('#list_servers').formats(LIST_SERVERS_FORMAT, false) do
service.list_servers.body
end
tests('#get_server').formats(GET_SERVER_FORMAT) do
tests('#get_server').formats(GET_SERVER_FORMAT, false) do
service.get_server(server_id).body
end
until service.get_server(server_id).body['server']['status'] == 'ACTIVE'
sleep 10
end
tests("#update_server(#{server_id}, #{server_name}_update)").formats(GET_SERVER_FORMAT) do
tests("#update_server(#{server_id}, #{server_name}_update) LEGACY").formats(GET_SERVER_FORMAT) do
service.update_server(server_id, "#{server_name}_update").body
end
tests("#update_server(#{server_id}, { 'name' => #{server_name}_update)} ").formats(GET_SERVER_FORMAT) do
service.update_server(server_id, 'name' => "#{server_name}_update").body
end
tests('#change_server_password').succeeds do
service.change_server_password(server_id, 'some_server_password')
end
sleep 60
wait_for_server_state(service, server_id, 'ACTIVE', 'ERROR')
tests('#reboot_server').succeeds do
service.reboot_server(server_id, 'SOFT')
end
until service.get_server(server_id).body['server']['status'] == 'ACTIVE'
sleep 10
end
wait_for_server_state(service, server_id, 'ACTIVE')
tests('#rebuild_server').succeeds do
rebuild_image_id = "5cebb13a-f783-4f8c-8058-c4182c724ccd" # Ubuntu 12.04
service.rebuild_server(server_id, rebuild_image_id)
end
until service.get_server(server_id).body['server']['status'] == 'ACTIVE'
sleep 10
end
wait_for_server_state(service, server_id, 'ACTIVE', 'ERROR')
tests('#resize_server').succeeds do
resize_flavor_id = 3 # 1GB
service.resize_server(server_id, resize_flavor_id)
end
until service.get_server(server_id).body['server']['status'] == 'VERIFY_RESIZE'
sleep 10
end
wait_for_server_state(service, server_id, 'VERIFY_RESIZE', 'ACTIVE')
tests('#confirm_resize_server').succeeds do
service.confirm_resize_server(server_id)
end
until service.get_server(server_id).body['server']['status'] == 'ACTIVE'
sleep 10
end
wait_for_server_state(service, server_id, 'ACTIVE', 'ERROR')
tests('#resize_server').succeeds do
resize_flavor_id = 2 # 1GB
service.resize_server(server_id, resize_flavor_id)
end
until service.get_server(server_id).body['server']['status'] == 'VERIFY_RESIZE'
sleep 10
end
wait_for_server_state(service, server_id, 'VERIFY_RESIZE', 'ACTIVE')
tests('#revert_resize_server').succeeds do
service.revert_resize_server(server_id)
end
until service.get_server(server_id).body['server']['status'] == 'ACTIVE'
sleep 10
end
wait_for_server_state(service, server_id, 'ACTIVE', 'ERROR')
tests('#delete_server').succeeds do
service.delete_server(server_id)