Merge "Add another scenario testcase test_minimum_basic"
This commit is contained in:
commit
d8a803f95f
|
@ -477,7 +477,8 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
|||
|
||||
self.addCleanup(self.snapshots_client.wait_for_resource_deletion,
|
||||
snapshot['id'])
|
||||
self.addCleanup(self.snapshots_client.delete_snapshot, snapshot['id'])
|
||||
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
|
||||
self.snapshots_client.delete_snapshot, snapshot['id'])
|
||||
waiters.wait_for_volume_resource_status(self.snapshots_client,
|
||||
snapshot['id'], 'available')
|
||||
snapshot = self.snapshots_client.show_snapshot(
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
|
@ -29,24 +31,11 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
|
|||
|
||||
"""This is a basic minimum scenario test.
|
||||
|
||||
This test below:
|
||||
These tests below:
|
||||
* across the multiple components
|
||||
* as a regular user
|
||||
* with and without optional parameters
|
||||
* check command outputs
|
||||
|
||||
Steps:
|
||||
1. Create image
|
||||
2. Create keypair
|
||||
3. Boot instance with keypair and get list of instances
|
||||
4. Create volume and show list of volumes
|
||||
5. Attach volume to instance and getlist of volumes
|
||||
6. Add IP to instance
|
||||
7. Create and add security group to instance
|
||||
8. Check SSH connection to instance
|
||||
9. Reboot instance
|
||||
10. Check SSH connection to instance after reboot
|
||||
|
||||
"""
|
||||
|
||||
def nova_show(self, server):
|
||||
|
@ -67,8 +56,9 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
|
|||
volume, custom_matchers.MatchesDictExceptForKeys(
|
||||
got_volume, excluded_keys=excluded_keys))
|
||||
|
||||
def nova_reboot(self, server):
|
||||
self.servers_client.reboot_server(server['id'], type='SOFT')
|
||||
def nova_reboot(self, server, hard=False):
|
||||
self.servers_client.reboot_server(server['id'],
|
||||
type="HARD" if hard else "SOFT")
|
||||
waiters.wait_for_server_status(self.servers_client,
|
||||
server['id'], 'ACTIVE')
|
||||
|
||||
|
@ -96,9 +86,37 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
|
|||
'%s' % (secgroup['id'], server['id']))
|
||||
raise exceptions.TimeoutException(msg)
|
||||
|
||||
def _get_floating_ip_in_server_addresses(self, floating_ip, server):
|
||||
for addresses in server['addresses'].values():
|
||||
for address in addresses:
|
||||
if (address['OS-EXT-IPS:type'] == 'floating' and
|
||||
address['addr'] == floating_ip['floating_ip_address']):
|
||||
return address
|
||||
|
||||
def _is_floating_ip_detached_from_server(self, server, floating_ip):
|
||||
server_info = self.servers_client.show_server(
|
||||
server['id'])['server']
|
||||
address = self._get_floating_ip_in_server_addresses(
|
||||
floating_ip, server_info)
|
||||
return (not address)
|
||||
|
||||
@decorators.idempotent_id('bdbb5441-9204-419d-a225-b4fdbfb1a1a8')
|
||||
@utils.services('compute', 'volume', 'image', 'network')
|
||||
def test_minimum_basic_scenario(self):
|
||||
"""This is a basic minimum scenario with multiple components
|
||||
|
||||
Steps:
|
||||
1. Create image
|
||||
2. Create keypair
|
||||
3. Boot instance with keypair and get list of instances
|
||||
4. Create volume and show list of volumes
|
||||
5. Attach volume to instance and getlist of volumes
|
||||
6. Add IP to instance
|
||||
7. Create and add security group to instance
|
||||
8. Check SSH connection to instance
|
||||
9. Reboot instance
|
||||
10. Check SSH connection to instance after reboot
|
||||
"""
|
||||
image = self.image_create()
|
||||
keypair = self.create_keypair()
|
||||
|
||||
|
@ -121,7 +139,7 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
|
|||
floating_ip = None
|
||||
server = self.servers_client.show_server(server['id'])['server']
|
||||
if (CONF.network_feature_enabled.floating_ips and
|
||||
CONF.network.floating_network_name):
|
||||
CONF.network.floating_network_name):
|
||||
fip = self.create_floating_ip(server)
|
||||
floating_ip = self.associate_floating_ip(
|
||||
fip, server)
|
||||
|
@ -154,3 +172,116 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
|
|||
waiters.wait_for_server_floating_ip(
|
||||
self.servers_client, server, floating_ip,
|
||||
wait_for_disassociate=True)
|
||||
|
||||
if not test_utils.call_until_true(
|
||||
self._is_floating_ip_detached_from_server,
|
||||
CONF.compute.build_timeout,
|
||||
CONF.compute.build_interval, server, floating_ip):
|
||||
msg = ("Floating IP '%s' should not be in server addresses: %s"
|
||||
% (floating_ip['floating_ip_address'],
|
||||
server['addresses']))
|
||||
raise exceptions.TimeoutException(msg)
|
||||
|
||||
@decorators.idempotent_id('a8fd48ec-1d01-4895-b932-02321661ec1e')
|
||||
@testtools.skipUnless(CONF.volume_feature_enabled.snapshot,
|
||||
"Cinder volume snapshots are disabled")
|
||||
@utils.services('compute', 'volume', 'image', 'network')
|
||||
def test_minimum_basic_instance_hard_reboot_after_vol_snap_deletion(self):
|
||||
"""Test compute hard reboot after volume snapshot deleted
|
||||
|
||||
Steps:
|
||||
1. Create image
|
||||
2. Create keypair
|
||||
3. Boot instance with keypair and get list of instances
|
||||
4. Create volume and show list of volumes
|
||||
5. Attach volume to instance and getlist of volumes
|
||||
6. Create a snapshot from volume
|
||||
7. Add IP to instance
|
||||
8. Create and add security group to instance
|
||||
9. Check SSH connection to instance
|
||||
10. Write data timestamp to the attached volume
|
||||
11. Delete volume snapshot before reboot instance
|
||||
12. Reboot instance (HARD)
|
||||
13. Check SSH connection to instance after reboot
|
||||
14. Verify attached disk data timestamp post instance reboot
|
||||
"""
|
||||
image = self.image_create()
|
||||
keypair = self.create_keypair()
|
||||
|
||||
server = self.create_server(image_id=image, key_name=keypair['name'])
|
||||
servers = self.servers_client.list_servers()['servers']
|
||||
self.assertIn(server['id'], [x['id'] for x in servers])
|
||||
|
||||
self.nova_show(server)
|
||||
|
||||
volume = self.create_volume()
|
||||
volumes = self.volumes_client.list_volumes()['volumes']
|
||||
self.assertIn(volume['id'], [x['id'] for x in volumes])
|
||||
|
||||
self.cinder_show(volume)
|
||||
|
||||
volume = self.nova_volume_attach(server, volume)
|
||||
self.addCleanup(self.nova_volume_detach, server, volume)
|
||||
snapshot = self.create_volume_snapshot(volume['id'], force=True)
|
||||
self.cinder_show(volume)
|
||||
|
||||
floating_ip = None
|
||||
server = self.servers_client.show_server(server['id'])['server']
|
||||
if (CONF.network_feature_enabled.floating_ips and
|
||||
CONF.network.floating_network_name):
|
||||
fip = self.create_floating_ip(server)
|
||||
floating_ip = self.associate_floating_ip(
|
||||
fip, server)
|
||||
# fetch the server again to make sure the addresses were refreshed
|
||||
# after associating the floating IP
|
||||
server = self.servers_client.show_server(server['id'])['server']
|
||||
address = self._get_floating_ip_in_server_addresses(
|
||||
floating_ip, server)
|
||||
self.assertIsNotNone(
|
||||
address,
|
||||
"Failed to find floating IP '%s' in server addresses: %s" %
|
||||
(floating_ip['floating_ip_address'], server['addresses']))
|
||||
ssh_ip = floating_ip['floating_ip_address']
|
||||
else:
|
||||
ssh_ip = self.get_server_ip(server)
|
||||
|
||||
self.create_and_add_security_group_to_server(server)
|
||||
|
||||
# check that we can SSH to the server before reboot
|
||||
self.linux_client = self.get_remote_client(
|
||||
ssh_ip, private_key=keypair['private_key'],
|
||||
server=server)
|
||||
|
||||
# write data to the volume before reboot instance
|
||||
timestamp_before = self.create_timestamp(
|
||||
ssh_ip, private_key=keypair['private_key'], server=server)
|
||||
# delete the snapshot before rebooting the instance
|
||||
self.snapshots_client.delete_snapshot(snapshot['id'])
|
||||
self.snapshots_client.wait_for_resource_deletion(snapshot['id'])
|
||||
self.nova_reboot(server, hard=True)
|
||||
|
||||
# check that we can SSH to the server after reboot
|
||||
# (both connections are part of the scenario)
|
||||
self.linux_client = self.get_remote_client(
|
||||
ssh_ip, private_key=keypair['private_key'],
|
||||
server=server)
|
||||
|
||||
self.check_disks()
|
||||
timestamp_after = self.get_timestamp(
|
||||
ssh_ip, private_key=keypair['private_key'], server=server)
|
||||
self.assertEqual(timestamp_before, timestamp_after)
|
||||
if floating_ip:
|
||||
# delete the floating IP, this should refresh the server addresses
|
||||
self.disassociate_floating_ip(floating_ip)
|
||||
waiters.wait_for_server_floating_ip(
|
||||
self.servers_client, server, floating_ip,
|
||||
wait_for_disassociate=True)
|
||||
|
||||
if not test_utils.call_until_true(
|
||||
self._is_floating_ip_detached_from_server,
|
||||
CONF.compute.build_timeout, CONF.compute.build_interval,
|
||||
server, floating_ip):
|
||||
msg = ("Floating IP '%s' should not be in server addresses: %s"
|
||||
% (floating_ip['floating_ip_address'],
|
||||
server['addresses']))
|
||||
raise exceptions.TimeoutException(msg)
|
||||
|
|
Loading…
Reference in New Issue