Merge "Extend tests for UCA deployment" into stable/mitaka

This commit is contained in:
Jenkins 2016-05-06 14:38:38 +00:00 committed by Gerrit Code Review
commit 7a815f91df
1 changed files with 228 additions and 11 deletions

View File

@ -13,16 +13,66 @@
# under the License.
from proboscis import test
from proboscis.asserts import assert_true, assert_is_not_none
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test import logger
from fuelweb_test import settings
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test.helpers.ssh_manager import SSHManager
from fuelweb_test.tests.base_test_case import SetupEnvironment
from fuelweb_test.tests.base_test_case import TestBasic
@test(groups=["uca_neutron_ha"])
@test(groups=["deploy_from_uca"])
class UCATest(TestBasic):
"""UCATest.""" # TODO(mattymo) documentation
"""Tests for "enable deployment from ubuntu cloud archive" feature.
Deploy several cluster using Ubuntu+UCA release then validate packages
origin (ubuntu-cloud.archive.canonical.com)"""
def get_uca_repo(self, cluster_id):
"""Pick link to UCA repository from cluster settings"""
repos = self.fuel_web.get_cluster_repos(cluster_id)
template = '{uri}/ {suite}/{section}'
uca_repo = None
for repo in repos['value']:
if repo['name'] == 'uca':
uca_repo = template.format(**repo)
break
assert_is_not_none(uca_repo, "UCA repo was not found!")
assert_true("ubuntu-cloud.archive.canonical.com" in uca_repo,
"{!r} does not contains link to UCA repo".format(uca_repo))
return uca_repo
@staticmethod
def check_package_origin(ip, package, origin):
"""Check that given package was installed from given repository"""
version_cmd = ("apt-cache policy {package} | "
"awk '$1 == \"Installed:\" {{print $2}}'").format(
package=package)
version = SSHManager().execute_on_remote(ip, version_cmd)['stdout_str']
origin_cmd = ("apt-cache madison {package} | "
"grep {version}").format(package=package,
version=version)
result = SSHManager().execute_on_remote(ip, origin_cmd)['stdout']
repos = [str.strip(line.split("|")[2]) for line in result]
assert_true(
any([origin in repo for repo in repos]),
"Package {!r}: repository {!r} not found in {!r}".format(
package, origin, repos)
)
@staticmethod
def get_os_packages(ip, packages_pattern=None):
"""Pick names of some OS packages from node"""
if not packages_pattern:
packages_pattern = "neutron|nova|cinder|keystone|" \
"ceilometer|ironic|glance"
packages = SSHManager().execute_on_remote(
ip, "dpkg-query -W -f '${{package}}\n' | grep -E '{}'".format(
packages_pattern)
)['stdout_str']
return packages.split('\n')
@test(depends_on=[SetupEnvironment.prepare_slaves_5],
groups=["uca_neutron_ha"])
@ -31,13 +81,14 @@ class UCATest(TestBasic):
"""Deploy cluster in ha mode with UCA repo
Scenario:
1. Create cluster
2. Enable UCA configuration
3. Add 3 nodes with controller role
4. Add 2 nodes with compute+cinder role
1. Create cluster using UCA release
2. Add 3 nodes with controller role
3. Add 2 nodes with compute+cinder role
4. Run network verification
5. Deploy the cluster
6. Run network verification
7. Run OSTF
7. Ensure that openstack packages were taken from UCA repository
8. Run OSTF
Duration 60m
Snapshot uca_neutron_ha
@ -46,8 +97,7 @@ class UCATest(TestBasic):
uca_enabled = {'uca_enabled': True}
self.show_step(1, initialize=True)
self.show_step(2)
self.show_step(1)
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
mode=settings.DEPLOYMENT_MODE,
@ -55,8 +105,8 @@ class UCATest(TestBasic):
settings=uca_enabled
)
self.show_step(2)
self.show_step(3)
self.show_step(4)
self.fuel_web.update_nodes(
cluster_id,
{
@ -67,6 +117,10 @@ class UCATest(TestBasic):
'slave-05': ['compute', 'cinder'],
}
)
self.show_step(4)
self.fuel_web.verify_network(cluster_id)
self.show_step(5)
self.fuel_web.deploy_cluster_wait(cluster_id)
@ -74,6 +128,169 @@ class UCATest(TestBasic):
self.fuel_web.verify_network(cluster_id)
self.show_step(7)
uca_repo = self.get_uca_repo(cluster_id)
assert_is_not_none(uca_repo, "UCA repo was not found!")
for node in self.fuel_web.client.list_cluster_nodes(cluster_id):
logger.info("Checking packages on node {!r}".format(node['name']))
packages = self.get_os_packages(node['ip'])
for package in packages:
self.check_package_origin(node['ip'], package, uca_repo)
self.show_step(8)
self.fuel_web.run_ostf(cluster_id=cluster_id)
self.env.make_snapshot("uca_neutron_ha")
@test(depends_on=[SetupEnvironment.prepare_slaves_5],
groups=["uca_neutron_tun_ceph"])
@log_snapshot_after_test
def uca_neutron_tun_ceph(self):
"""Deploy cluster with NeutronTUN, Ceph and UCA repo
Scenario:
1. Create cluster using UCA release
2. Add 3 nodes with controller role
3. Add 2 nodes with compute+ceph role
4. Add 1 node with ceph role
5. Run network verification
6. Deploy the cluster
7. Run network verification
8. Ensure that openstack packages were taken from UCA repository
9. Run OSTF
Duration 60m
"""
self.env.revert_snapshot("ready_with_5_slaves")
self.env.bootstrap_nodes([self.env.d_env.get_node(name='slave-06')])
cluster_settings = {
'net_provider': settings.NEUTRON,
'net_segment_type': settings.NEUTRON_SEGMENT['tun'],
'uca_enabled': True,
'volumes_lvm': False,
'volumes_ceph': True,
'images_ceph': True,
'objects_ceph': True,
'ephemeral_ceph': True
}
self.show_step(1)
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
mode=settings.DEPLOYMENT_MODE,
release_name=settings.OPENSTACK_RELEASE_UBUNTU_UCA,
settings=cluster_settings
)
self.show_step(2)
self.show_step(3)
self.show_step(4)
self.fuel_web.update_nodes(
cluster_id,
{
'slave-01': ['controller'],
'slave-02': ['controller'],
'slave-03': ['controller'],
'slave-04': ['compute', 'ceph-osd'],
'slave-05': ['compute', 'ceph-osd'],
'slave-06': ['ceph-osd']
}
)
self.show_step(5)
self.fuel_web.verify_network(cluster_id)
self.show_step(6)
self.fuel_web.deploy_cluster_wait(cluster_id)
self.show_step(7)
self.fuel_web.verify_network(cluster_id)
self.show_step(8)
uca_repo = self.get_uca_repo(cluster_id)
assert_is_not_none(uca_repo, "UCA repo was not found!")
for node in self.fuel_web.client.list_cluster_nodes(cluster_id):
logger.info("Checking packages on node {!r}".format(node['name']))
packages = self.get_os_packages(node['ip'])
for package in packages:
self.check_package_origin(node['ip'], package, uca_repo)
self.show_step(9)
self.fuel_web.run_ostf(cluster_id=cluster_id)
@test(depends_on=[SetupEnvironment.prepare_slaves_9],
groups=["uca_vlan_mongo"])
@log_snapshot_after_test
def uca_vlan_mongo(self):
"""Deploy cluster with NeutronVlan, Ceilometer and UCA repo
Scenario:
1. Create cluster using UCA release, Ceph for images and objects
2. Add 3 nodes with controller+mongo role
3. Add 1 node with compute+cinder role
4. Add 3 nodes with ceph-osd role
5. Run network verification
6. Deploy the cluster
7. Run network verification
8. Ensure that openstack packages were taken from UCA repository
9. Run OSTF
Duration 60m
"""
self.env.revert_snapshot("ready_with_9_slaves")
cluster_settings = {
'net_provider': settings.NEUTRON,
'net_segment_type': settings.NEUTRON_SEGMENT['vlan'],
'uca_enabled': True,
'images_ceph': True,
'objects_ceph': True,
}
self.show_step(1)
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
mode=settings.DEPLOYMENT_MODE,
release_name=settings.OPENSTACK_RELEASE_UBUNTU_UCA,
settings=cluster_settings
)
self.show_step(2)
self.show_step(3)
self.show_step(4)
self.fuel_web.update_nodes(
cluster_id,
{
'slave-01': ['controller', 'mongo'],
'slave-02': ['controller', 'mongo'],
'slave-03': ['controller', 'mongo'],
'slave-04': ['compute', 'cinder'],
'slave-05': ['ceph-osd'],
'slave-06': ['ceph-osd'],
'slave-07': ['ceph-osd']
}
)
self.show_step(5)
self.fuel_web.verify_network(cluster_id)
self.show_step(6)
self.fuel_web.deploy_cluster_wait(cluster_id)
self.show_step(7)
self.fuel_web.verify_network(cluster_id)
self.show_step(8)
uca_repo = self.get_uca_repo(cluster_id)
assert_is_not_none(uca_repo, "UCA repo was not found!")
for node in self.fuel_web.client.list_cluster_nodes(cluster_id):
logger.info("Checking packages on node {!r}".format(node['name']))
packages = self.get_os_packages(node['ip'])
for package in packages:
self.check_package_origin(node['ip'], package, uca_repo)
self.show_step(9)
self.fuel_web.run_ostf(cluster_id=cluster_id)