Add gate test for fuel-agent repo
Add gate test for fuel-agent that should be executed for each review in openstack/fuel-agent repo. Next variables should be exported: UPDATE_FUEL=True UPDATE_FUEL_PATH=/path/to/source Test depends on ready, so it is better to run it with -k option. Scenario: 1. Revert snapshot "ready" 2. Update fuel-agent in MCollective 3. Update bootstrap 4. Bootstrap 1 slave 5. Create environment via FUEL CLI 6. Assign controller role 7. Provisioning node Change-Id: I323398d5a039896f3ec8793ba64b6a6541a4967f Closes-Bug: #1519880
This commit is contained in:
parent
ca25386326
commit
f17ec5d130
|
@ -172,6 +172,13 @@ Test Ironic
|
|||
.. automodule:: fuelweb_test.tests.test_ironic_base
|
||||
:members:
|
||||
|
||||
Gating tests
|
||||
============
|
||||
|
||||
Test Fuel agent
|
||||
---------------
|
||||
.. automodule:: gates_tests.tests.test_review_in_fuel_agent
|
||||
:members:
|
||||
|
||||
Fuel mirror verification
|
||||
========================
|
||||
|
|
|
@ -30,6 +30,7 @@ from fuelweb_test.helpers.decorators import update_rpm_packages
|
|||
from fuelweb_test.helpers.decorators import upload_manifests
|
||||
from fuelweb_test.helpers.eb_tables import Ebtables
|
||||
from fuelweb_test.helpers.fuel_actions import AdminActions
|
||||
from fuelweb_test.helpers.fuel_actions import BaseActions
|
||||
from fuelweb_test.helpers.fuel_actions import CobblerActions
|
||||
from fuelweb_test.helpers.fuel_actions import DockerActions
|
||||
from fuelweb_test.helpers.fuel_actions import NailgunActions
|
||||
|
@ -85,6 +86,10 @@ class EnvironmentModel(object):
|
|||
def admin_actions(self):
|
||||
return AdminActions(self.d_env.get_admin_remote())
|
||||
|
||||
@property
|
||||
def base_actions(self):
|
||||
return BaseActions(self.d_env.get_admin_remote())
|
||||
|
||||
@property
|
||||
def nailgun_actions(self):
|
||||
return NailgunActions(self.d_env.get_admin_remote())
|
||||
|
|
|
@ -136,6 +136,7 @@ def import_tests():
|
|||
from system_test.tests.strength import destroy_controllers # noqa
|
||||
from system_test.tests.strength import filling_root # noqa
|
||||
from system_test.tests import test_fuel_migration # noqa
|
||||
from gates_tests.tests import test_review_in_fuel_agent # noqa
|
||||
|
||||
|
||||
def run_tests():
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# 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 proboscis.asserts import assert_equal
|
||||
|
||||
from fuelweb_test.helpers import checkers
|
||||
|
||||
from fuelweb_test import logger
|
||||
from fuelweb_test import settings
|
||||
|
||||
|
||||
def replace_fuel_agent_rpm(environment):
|
||||
"""Replaced fuel_agent*.rpm in MCollective with fuel_agent*.rpm
|
||||
from review
|
||||
environment - Environment Model object - self.env
|
||||
"""
|
||||
logger.info("Patching fuel-agent")
|
||||
if not settings.UPDATE_FUEL:
|
||||
raise Exception("{} variable don't exist"
|
||||
.format(settings.UPDATE_FUEL))
|
||||
try:
|
||||
pack_path = '/var/www/nailgun/fuel-agent/'
|
||||
container = 'mcollective'
|
||||
with environment.d_env.get_admin_remote() as remote:
|
||||
remote.upload(settings.UPDATE_FUEL_PATH.rstrip('/'),
|
||||
pack_path)
|
||||
|
||||
# Update fuel-agent in MCollective
|
||||
cmd = "rpm -q fuel-agent"
|
||||
old_package = \
|
||||
environment.base_actions.execute_in_container(
|
||||
cmd, container, exit_code=0)
|
||||
logger.info("Delete package {0}"
|
||||
.format(old_package))
|
||||
|
||||
cmd = "rpm -e fuel-agent"
|
||||
environment.base_actions.execute_in_container(
|
||||
cmd, container, exit_code=0)
|
||||
|
||||
cmd = "ls -1 {0}|grep 'fuel-agent'".format(pack_path)
|
||||
new_package = \
|
||||
environment.base_actions.execute_in_container(
|
||||
cmd, container).rstrip('.rpm')
|
||||
logger.info("Install package {0}"
|
||||
.format(new_package))
|
||||
|
||||
cmd = "yum localinstall -y {0}fuel-agent*.rpm".format(
|
||||
pack_path)
|
||||
environment.base_actions.execute_in_container(
|
||||
cmd, container, exit_code=0)
|
||||
|
||||
cmd = "rpm -q fuel-agent"
|
||||
installed_package = \
|
||||
environment.base_actions.execute_in_container(
|
||||
cmd, container, exit_code=0)
|
||||
|
||||
assert_equal(installed_package, new_package,
|
||||
"The new package {0} was not installed".
|
||||
format(new_package))
|
||||
except Exception as e:
|
||||
logger.error("Could not upload package {e}".format(e=e))
|
||||
raise
|
||||
|
||||
|
||||
def replace_bootstrap(environment):
|
||||
"""Replaced initramfs.img in /var/www/nailgun/
|
||||
with newly_builded from review
|
||||
environment - Environment Model object - self.env
|
||||
"""
|
||||
logger.info("Updating bootstrap")
|
||||
if not settings.UPDATE_FUEL:
|
||||
raise Exception("{} variable don't exist"
|
||||
.format(settings.UPDATE_FUEL))
|
||||
try:
|
||||
pack_path = '/var/www/nailgun/fuel-agent/'
|
||||
with environment.d_env.get_admin_remote() as remote:
|
||||
remote.upload(settings.UPDATE_FUEL_PATH.rstrip('/'),
|
||||
pack_path)
|
||||
logger.info("Assigning new bootstrap from {}"
|
||||
.format(pack_path))
|
||||
bootstrap = "/var/www/nailgun/bootstrap"
|
||||
cmd = ("rm {0}/initramfs.img;"
|
||||
"cp {1}/initramfs.img.updated {0}/initramfs.img;"
|
||||
"chmod +r {0}/initramfs.img;"
|
||||
).format(bootstrap, pack_path)
|
||||
with environment.d_env.get_admin_remote() as remote:
|
||||
checkers.check_file_exists(
|
||||
remote,
|
||||
'{0}initramfs.img.updated'.format(pack_path))
|
||||
result = remote.execute(cmd)
|
||||
assert_equal(result['exit_code'], 0,
|
||||
('Failed to assign bootstrap {}'
|
||||
).format(result))
|
||||
cmd = "cobbler sync"
|
||||
container = "cobbler"
|
||||
environment.base_actions.execute_in_container(
|
||||
cmd, container, exit_code=0)
|
||||
except Exception as e:
|
||||
logger.error("Could not upload package {e}".format(e=e))
|
||||
raise
|
|
@ -0,0 +1,92 @@
|
|||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# 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 proboscis import test
|
||||
|
||||
from gates_tests.helpers.utils import replace_bootstrap
|
||||
from gates_tests.helpers.utils import replace_fuel_agent_rpm
|
||||
|
||||
from fuelweb_test.helpers.decorators import log_snapshot_after_test
|
||||
from fuelweb_test.helpers.utils import run_on_remote
|
||||
from fuelweb_test.settings import NEUTRON_SEGMENT_TYPE
|
||||
from fuelweb_test.settings import OPENSTACK_RELEASE
|
||||
from fuelweb_test.tests.base_test_case import TestBasic
|
||||
|
||||
from fuelweb_test import settings
|
||||
|
||||
|
||||
@test(groups=["review_fuel_agent"])
|
||||
class Gate(TestBasic):
|
||||
"""Using in fuel-agent CI-gates
|
||||
Update fuel-agent in MCollective, bootstrap from review,
|
||||
build environment images and provision one node"""
|
||||
|
||||
@test(depends_on_groups=['ready'],
|
||||
groups=["review_fuel_agent_one_node_provision"])
|
||||
@log_snapshot_after_test
|
||||
def gate_patch_fuel_agent(self):
|
||||
""" Revert snapshot, update fuel-agent, bootstrap from review
|
||||
and provision one node
|
||||
|
||||
Scenario:
|
||||
1. Revert snapshot "ready"
|
||||
2. Update fuel-agent in MCollective
|
||||
3. Update bootstrap
|
||||
4. Bootstrap 1 slave
|
||||
5. Create environment via FUEL CLI
|
||||
6. Assign controller role
|
||||
7. Provisioning node
|
||||
|
||||
"""
|
||||
if not settings.UPDATE_FUEL:
|
||||
raise Exception("{} variable don't exist"
|
||||
.format(settings.UPDATE_FUEL))
|
||||
self.show_step(1)
|
||||
self.env.revert_snapshot("ready")
|
||||
|
||||
self.show_step(2)
|
||||
replace_fuel_agent_rpm(self.env)
|
||||
|
||||
self.show_step(3)
|
||||
replace_bootstrap(self.env)
|
||||
|
||||
self.show_step(4)
|
||||
self.env.bootstrap_nodes(
|
||||
self.env.d_env.nodes().slaves[:1])
|
||||
|
||||
release_id = self.fuel_web.get_releases_list_for_os(
|
||||
release_name=OPENSTACK_RELEASE)[0]
|
||||
|
||||
self.show_step(5)
|
||||
with self.env.d_env.get_admin_remote() as remote:
|
||||
cmd = ('fuel env create --name={0} --release={1} '
|
||||
'--nst={2} --json'.format(self.__class__.__name__,
|
||||
release_id,
|
||||
NEUTRON_SEGMENT_TYPE))
|
||||
env_result = run_on_remote(remote, cmd, jsonify=True)
|
||||
cluster_id = env_result['id']
|
||||
|
||||
self.show_step(6)
|
||||
self.fuel_web.update_nodes(
|
||||
cluster_id,
|
||||
{
|
||||
'slave-01': ['controller'],
|
||||
}
|
||||
)
|
||||
|
||||
cluster_id = self.fuel_web.get_last_created_cluster()
|
||||
self.show_step(7)
|
||||
self.fuel_web.provisioning_cluster_wait(cluster_id)
|
||||
|
||||
self.env.make_snapshot("review_fuel_agent_one_node_provision")
|
Loading…
Reference in New Issue