mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[rackspace|compute] server update method now updates accessIPv4, accessIPv6, as well as name; made server request tests more robust.
This commit is contained in:
parent
a8d159f375
commit
f75b0e3c52
5 changed files with 76 additions and 57 deletions
|
@ -45,11 +45,17 @@ module Fog
|
|||
ignore_attributes :metadata
|
||||
|
||||
attr_reader :password
|
||||
|
||||
def initialize(attributes={})
|
||||
@service = attributes[:service]
|
||||
super
|
||||
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
|
||||
@metadata ||= begin
|
||||
|
@ -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
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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
|
||||
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
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}, #{server_name}_update)").formats(GET_SERVER_FORMAT) do
|
||||
service.update_server(server_id, "#{server_name}_update").body
|
||||
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)
|
||||
|
|
Loading…
Add table
Reference in a new issue