Merge "Initial Evacuate Server tests"
This commit is contained in:
commit
018c5ca76c
@ -0,0 +1,108 @@
|
||||
"""
|
||||
Copyright 2015 Rackspace
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
"""
|
||||
|
||||
from cafe.drivers.unittest.decorators import tags
|
||||
from cloudcafe.compute.common.types import NovaServerStatusTypes, \
|
||||
InstanceAuthStrategies
|
||||
from cloudroast.compute.fixtures import ServerFromImageFixture
|
||||
from cloudcafe.compute.composites import ComputeAdminComposite
|
||||
|
||||
|
||||
class EvacuateServerTest(object):
|
||||
|
||||
@tags(type='smoke', net='no')
|
||||
def test_evacuate_server_on_same_cell(self):
|
||||
"""
|
||||
Verify that a server can be evacuated successfully.
|
||||
|
||||
Get the server that was created in setup and use it to call evacuate
|
||||
server and waits for status active, once it confirms
|
||||
the status, it will check to see if the actual host was changed
|
||||
|
||||
This test will be successful if:
|
||||
- The server went to Active status
|
||||
- The host was changed
|
||||
"""
|
||||
self.new_password = "newslice129690TuG72Bgj2"
|
||||
|
||||
# Evacuate and wait for ACTIVE status
|
||||
self.compute_admin.servers.client.evacuate(self.server.id,
|
||||
host=self.host_before_evacuate,
|
||||
on_shared_storage=False,
|
||||
admin_pass=self.new_password)
|
||||
server_after_evacuate = self.admin_server_behaviors.wait_for_server_status(
|
||||
self.server.id, NovaServerStatusTypes.ACTIVE).entity
|
||||
|
||||
# Check that compute node is changed
|
||||
self.assertNotEqual(
|
||||
self.compute_host_name.host, server_after_evacuate.host,
|
||||
msg="Host is not changed after evacuation, source host is {host_before} "
|
||||
"destination host is {host_after}".format(
|
||||
host_before=self.compute_host_name.host,
|
||||
host_after=server_after_evacuate.host))
|
||||
|
||||
# Get server details
|
||||
server = self.servers_client.get_server(self.server.id).entity
|
||||
|
||||
# Set the server's admin_pass attribute to the new password
|
||||
server.admin_pass = self.new_password
|
||||
|
||||
public_address = self.server_behaviors.get_public_ip_address(server)
|
||||
# Get an instance of the remote client
|
||||
remote_client = self.server_behaviors.get_remote_instance_client(
|
||||
server, config=self.servers_config,
|
||||
auth_strategy=InstanceAuthStrategies.PASSWORD)
|
||||
|
||||
self.assertTrue(
|
||||
remote_client.can_authenticate(),
|
||||
"Could not connect to server {uuid} with ip {ip} using new "
|
||||
" admin password {new_password} "
|
||||
(uuid=server.id, ip=public_address, new_password=self.new_password))
|
||||
|
||||
|
||||
class ServerFromImageEvacuateTests(ServerFromImageFixture,
|
||||
EvacuateServerTest):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
"""
|
||||
Perform actions that setup the necessary resources for testing.
|
||||
|
||||
The following resources are accessed from a parent class:
|
||||
- An instance from ServerFromImageEvacuateTests.
|
||||
|
||||
The following resources are created during this setup:
|
||||
- Initializes compute admin.
|
||||
- Create a server from server behaviors.
|
||||
"""
|
||||
super(ServerFromImageEvacuateTests, cls).setUpClass()
|
||||
cls.compute_admin = ComputeAdminComposite()
|
||||
cls.create_server()
|
||||
|
||||
cls.compute_host_name = cls.compute_admin.servers.client.get_server(
|
||||
cls.server.id).entity
|
||||
host_list = cls.compute_admin.hosts.client.list_hosts()
|
||||
for host in host_list.entity:
|
||||
if cls.compute_host_name.host in host.host_name:
|
||||
cls.host_before_evacuate = host.host_name
|
||||
host_response = cls.compute_admin.hosts.client.\
|
||||
update_host(cls.compute_host_name.host, status="disable").entity
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
super(ServerFromImageEvacuateTests, cls).tearDownClass()
|
||||
cls.compute_admin.hosts.client.\
|
||||
update_host(cls.compute_host_name.host, status="enable").entity
|
Loading…
Reference in New Issue
Block a user