Merge "Initial Evacuate Server tests"

This commit is contained in:
Jenkins 2015-06-03 20:10:57 +00:00 committed by Gerrit Code Review
commit 018c5ca76c

View File

@ -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