Port hacluster tests from Amulet to Zaza
Closes-Bug: #1828424 func-test-pr: https://github.com/openstack-charmers/zaza-openstack-tests/pull/148 Signed-off-by: Xiyue Wang <celia.wang@canonical.com> Change-Id: I0c0447680f89e2378f9bca3b8322a9bfa50ffd46
This commit is contained in:
parent
bb4438cddb
commit
df5f114ae1
10
Makefile
10
Makefile
|
@ -1,16 +1,16 @@
|
||||||
#!/usr/bin/make
|
#!/usr/bin/make
|
||||||
PYTHON := /usr/bin/env python
|
PYTHON := /usr/bin/env python3
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
@tox -e pep8
|
@tox -e pep8
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@# Starting unit tests
|
@echo Starting unit tests
|
||||||
@tox -e py27
|
@tox -e py3
|
||||||
|
|
||||||
functional_test:
|
functional_test:
|
||||||
@echo Starting Amulet tests
|
@echo Starting Zaza functional tests
|
||||||
@tox -e func27
|
@tox -e func
|
||||||
|
|
||||||
bin/charm_helpers_sync.py:
|
bin/charm_helpers_sync.py:
|
||||||
@mkdir -p bin
|
@mkdir -p bin
|
||||||
|
|
|
@ -7,23 +7,6 @@ mock>=1.2
|
||||||
flake8>=2.2.4,<=2.4.1
|
flake8>=2.2.4,<=2.4.1
|
||||||
stestr>=2.2.0
|
stestr>=2.2.0
|
||||||
requests>=2.18.4
|
requests>=2.18.4
|
||||||
# BEGIN: Amulet OpenStack Charm Helper Requirements
|
|
||||||
# Liberty client lower constraints
|
|
||||||
amulet>=1.14.3,<2.0;python_version=='2.7'
|
|
||||||
bundletester>=0.6.1,<1.0;python_version=='2.7'
|
|
||||||
python-ceilometerclient>=1.5.0
|
|
||||||
python-cinderclient>=1.4.0,<5.0 # Train cinderclient removes v1.client
|
|
||||||
python-glanceclient>=1.1.0
|
|
||||||
python-heatclient>=0.8.0
|
|
||||||
python-keystoneclient>=1.7.1
|
|
||||||
python-neutronclient>=3.1.0
|
|
||||||
python-novaclient>=2.30.1
|
|
||||||
python-openstackclient>=1.7.0
|
|
||||||
python-swiftclient>=2.6.0
|
|
||||||
pika>=0.10.0,<1.0
|
|
||||||
distro-info
|
|
||||||
git+https://github.com/juju/charm-helpers.git#egg=charmhelpers
|
|
||||||
# END: Amulet OpenStack Charm Helper Requirements
|
|
||||||
# NOTE: workaround for 14.04 pip/tox
|
|
||||||
pytz
|
|
||||||
pyudev # for ceph-* charm unit tests (not mocked?)
|
pyudev # for ceph-* charm unit tests (not mocked?)
|
||||||
|
git+https://github.com/openstack-charmers/zaza.git#egg=zaza;python_version>='3.0'
|
||||||
|
git+https://github.com/openstack-charmers/zaza-openstack-tests.git#egg=zaza.openstack
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Overview
|
# Overview
|
||||||
|
|
||||||
This directory provides Amulet tests to verify basic deployment functionality
|
This directory provides Zaza tests to verify basic deployment functionality
|
||||||
from the perspective of this charm, its requirements and its features, as
|
from the perspective of this charm, its requirements and its features, as
|
||||||
exercised in a subset of the full OpenStack deployment test bundle topology.
|
exercised in a subset of the full OpenStack deployment test bundle topology.
|
||||||
|
|
||||||
|
|
|
@ -1,286 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
|
|
||||||
import amulet
|
|
||||||
|
|
||||||
from charmhelpers.contrib.openstack.amulet.deployment import (
|
|
||||||
OpenStackAmuletDeployment
|
|
||||||
)
|
|
||||||
from charmhelpers.contrib.openstack.amulet.utils import (
|
|
||||||
OpenStackAmuletUtils,
|
|
||||||
DEBUG,
|
|
||||||
# ERROR
|
|
||||||
)
|
|
||||||
import keystoneclient
|
|
||||||
from keystoneclient.v2_0 import client as keystone_client
|
|
||||||
from keystoneclient.v3 import client as keystone_client_v3
|
|
||||||
|
|
||||||
# Use DEBUG to turn on debug logging
|
|
||||||
u = OpenStackAmuletUtils(DEBUG)
|
|
||||||
seconds_to_wait = 600
|
|
||||||
|
|
||||||
# Set number of primary units and cluster-count for hacluster
|
|
||||||
NUM_UNITS = 3
|
|
||||||
|
|
||||||
PY_CRM_GET_PROPERTY = """cd hooks;
|
|
||||||
python -c 'import pcmk;
|
|
||||||
try:
|
|
||||||
print(pcmk.get_property(\"maintenance-mode\"))
|
|
||||||
except pcmk.PropertyNotFound:
|
|
||||||
print(\"false\")
|
|
||||||
'
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class HAClusterBasicDeployment(OpenStackAmuletDeployment):
|
|
||||||
|
|
||||||
def __init__(self, series=None, openstack=None, source=None, stable=False):
|
|
||||||
"""Deploy the entire test environment."""
|
|
||||||
super(HAClusterBasicDeployment, self).__init__(series, openstack,
|
|
||||||
source, stable)
|
|
||||||
env_var = 'TEST_VIP'
|
|
||||||
self._vip = os.getenv(env_var, None)
|
|
||||||
if not self._vip:
|
|
||||||
amulet.raise_status(amulet.SKIP, msg="No vip provided with '%s' - "
|
|
||||||
"skipping tests" % (env_var))
|
|
||||||
|
|
||||||
self._add_services()
|
|
||||||
self._add_relations()
|
|
||||||
self._configure_services()
|
|
||||||
self._deploy()
|
|
||||||
|
|
||||||
u.log.info('Waiting on extended status checks...')
|
|
||||||
exclude_services = []
|
|
||||||
|
|
||||||
# Wait for deployment ready msgs, except exclusions
|
|
||||||
self._auto_wait_for_status(exclude_services=exclude_services)
|
|
||||||
|
|
||||||
self.d.sentry.wait()
|
|
||||||
self._initialize_tests()
|
|
||||||
|
|
||||||
def _add_services(self):
|
|
||||||
this_service = {'name': 'hacluster'}
|
|
||||||
other_services = [
|
|
||||||
self.get_percona_service_entry(),
|
|
||||||
{'name': 'keystone', 'units': NUM_UNITS},
|
|
||||||
]
|
|
||||||
super(HAClusterBasicDeployment, self)._add_services(this_service,
|
|
||||||
other_services)
|
|
||||||
|
|
||||||
def _add_relations(self):
|
|
||||||
relations = {'keystone:shared-db': 'percona-cluster:shared-db',
|
|
||||||
'hacluster:ha': 'keystone:ha'}
|
|
||||||
super(HAClusterBasicDeployment, self)._add_relations(relations)
|
|
||||||
|
|
||||||
def _configure_services(self):
|
|
||||||
keystone_config = {
|
|
||||||
'admin-password': 'openstack',
|
|
||||||
'admin-token': 'ubuntutesting',
|
|
||||||
'debug': 'true',
|
|
||||||
'verbose': 'true',
|
|
||||||
'vip': self._vip,
|
|
||||||
}
|
|
||||||
|
|
||||||
if self._get_openstack_release() >= self.xenial_mitaka:
|
|
||||||
keystone_config.update({'ha-bindiface': 'ens2'})
|
|
||||||
|
|
||||||
pxc_config = {
|
|
||||||
'dataset-size': '25%',
|
|
||||||
'max-connections': 1000,
|
|
||||||
'root-password': 'ChangeMe123',
|
|
||||||
'sst-password': 'ChangeMe123',
|
|
||||||
}
|
|
||||||
hacluster_config = {
|
|
||||||
'debug': 'true',
|
|
||||||
'cluster_count': NUM_UNITS,
|
|
||||||
}
|
|
||||||
|
|
||||||
configs = {
|
|
||||||
'keystone': keystone_config,
|
|
||||||
'hacluster': hacluster_config,
|
|
||||||
'percona-cluster': pxc_config,
|
|
||||||
}
|
|
||||||
super(HAClusterBasicDeployment, self)._configure_services(configs)
|
|
||||||
|
|
||||||
def _initialize_tests(self):
|
|
||||||
"""Perform final initialization before tests get run."""
|
|
||||||
# Access the sentries for inspecting service units
|
|
||||||
self.pxc_sentry = self.d.sentry['percona-cluster'][0]
|
|
||||||
self.keystone_sentry = self.d.sentry['keystone'][0]
|
|
||||||
# NOTE: the hacluster unit id may not correspond with its parent unit
|
|
||||||
# id.
|
|
||||||
self.hacluster_sentry = self.d.sentry['hacluster'][0]
|
|
||||||
|
|
||||||
u.log.debug('openstack release val: {}'.format(
|
|
||||||
self._get_openstack_release()))
|
|
||||||
u.log.debug('openstack release str: {}'.format(
|
|
||||||
self._get_openstack_release_string()))
|
|
||||||
|
|
||||||
# Authenticate keystone admin
|
|
||||||
u.log.debug('Authenticating keystone admin against VIP: '
|
|
||||||
'{}'.format(self._vip))
|
|
||||||
#
|
|
||||||
api_version = 2
|
|
||||||
client_class = keystone_client.Client
|
|
||||||
if self._get_openstack_release() >= self.xenial_queens:
|
|
||||||
api_version = 3
|
|
||||||
client_class = keystone_client_v3.Client
|
|
||||||
self.keystone_session, auth = u.get_keystone_session(
|
|
||||||
self._vip,
|
|
||||||
api_version=api_version,
|
|
||||||
username='admin',
|
|
||||||
password='openstack',
|
|
||||||
project_name='admin',
|
|
||||||
user_domain_name='admin_domain',
|
|
||||||
project_domain_name='admin_domain')
|
|
||||||
self.keystone = client_class(session=self.keystone_session)
|
|
||||||
self.keystone.auth_ref = auth.get_access(self.keystone_session)
|
|
||||||
|
|
||||||
# Create a demo tenant/role/user
|
|
||||||
u.log.debug('Creating keystone demo tenant, role and user against '
|
|
||||||
'VIP: {}'.format(self._vip))
|
|
||||||
self.demo_tenant = 'demoTenant'
|
|
||||||
self.demo_role = 'demoRole'
|
|
||||||
self.demo_user = 'demoUser'
|
|
||||||
self.demo_project = 'demoProject'
|
|
||||||
self.demo_domain = 'demoDomain'
|
|
||||||
if self._get_openstack_release() >= self.xenial_queens:
|
|
||||||
self.create_users_v3()
|
|
||||||
self.demo_user_session, auth = u.get_keystone_session(
|
|
||||||
self._vip,
|
|
||||||
self.demo_user,
|
|
||||||
'password',
|
|
||||||
api_version=3,
|
|
||||||
user_domain_name=self.demo_domain,
|
|
||||||
project_domain_name=self.demo_domain,
|
|
||||||
project_name=self.demo_project
|
|
||||||
)
|
|
||||||
self.keystone_demo = keystone_client_v3.Client(
|
|
||||||
session=self.demo_user_session)
|
|
||||||
else:
|
|
||||||
self.create_users_v2()
|
|
||||||
# Authenticate demo user with keystone (authenticate_keystone_user
|
|
||||||
# looks up identity-service in service catalogue so uses vip)
|
|
||||||
self.keystone_demo = \
|
|
||||||
u.authenticate_keystone_user(
|
|
||||||
self.keystone, user=self.demo_user,
|
|
||||||
password='password',
|
|
||||||
tenant=self.demo_tenant)
|
|
||||||
|
|
||||||
def create_users_v3(self):
|
|
||||||
try:
|
|
||||||
self.keystone.projects.find(name=self.demo_project)
|
|
||||||
except keystoneclient.exceptions.NotFound:
|
|
||||||
domain = self.keystone.domains.create(
|
|
||||||
self.demo_domain,
|
|
||||||
description='Demo Domain',
|
|
||||||
enabled=True
|
|
||||||
)
|
|
||||||
project = self.keystone.projects.create(
|
|
||||||
self.demo_project,
|
|
||||||
domain,
|
|
||||||
description='Demo Project',
|
|
||||||
enabled=True,
|
|
||||||
)
|
|
||||||
user = self.keystone.users.create(
|
|
||||||
self.demo_user,
|
|
||||||
domain=domain.id,
|
|
||||||
project=self.demo_project,
|
|
||||||
password='password',
|
|
||||||
email='demov3@demo.com',
|
|
||||||
description='Demo',
|
|
||||||
enabled=True)
|
|
||||||
role = self.keystone.roles.find(name='Admin')
|
|
||||||
self.keystone.roles.grant(
|
|
||||||
role.id,
|
|
||||||
user=user.id,
|
|
||||||
project=project.id)
|
|
||||||
|
|
||||||
def create_users_v2(self):
|
|
||||||
if not u.tenant_exists(self.keystone, self.demo_tenant):
|
|
||||||
tenant = self.keystone.tenants.create(tenant_name=self.demo_tenant,
|
|
||||||
description='demo tenant',
|
|
||||||
enabled=True)
|
|
||||||
|
|
||||||
self.keystone.roles.create(name=self.demo_role)
|
|
||||||
self.keystone.users.create(name=self.demo_user,
|
|
||||||
password='password',
|
|
||||||
tenant_id=tenant.id,
|
|
||||||
email='demo@demo.com')
|
|
||||||
|
|
||||||
def _toggle_maintenance_and_wait(self, expected):
|
|
||||||
SLEEP = 10
|
|
||||||
TIMEOUT = 900 # secs
|
|
||||||
|
|
||||||
crm_get_prop_cmd = PY_CRM_GET_PROPERTY
|
|
||||||
self.d.configure('hacluster', {'maintenance-mode': expected})
|
|
||||||
|
|
||||||
stime = time.time()
|
|
||||||
ha_unit = self.d.sentry['hacluster'][0]
|
|
||||||
while time.time() - stime <= TIMEOUT:
|
|
||||||
time.sleep(SLEEP)
|
|
||||||
(output, exit_code) = ha_unit.run(crm_get_prop_cmd)
|
|
||||||
if output == expected:
|
|
||||||
u.log.debug('maintenance-mode enabled: %s' % output)
|
|
||||||
break
|
|
||||||
|
|
||||||
assert output == expected, 'maintenance-mode is: %s, expected: %s' \
|
|
||||||
% (output, expected)
|
|
||||||
|
|
||||||
def test_900_action_cleanup(self):
|
|
||||||
"""The services can be cleaned up. """
|
|
||||||
u.log.debug('Checking cleanup action...')
|
|
||||||
unit = self.hacluster_sentry
|
|
||||||
|
|
||||||
assert u.status_get(unit)[0] == "active"
|
|
||||||
|
|
||||||
action_id = u.run_action(unit, "cleanup")
|
|
||||||
assert u.wait_on_action(action_id), "Cleanup (all) action failed."
|
|
||||||
assert u.status_get(unit)[0] == "active"
|
|
||||||
|
|
||||||
params = {'resource': 'res_ks_haproxy'}
|
|
||||||
action_id = u.run_action(unit, "cleanup", params)
|
|
||||||
assert u.wait_on_action(action_id), "Cleanup action w/resource failed."
|
|
||||||
assert u.status_get(unit)[0] == "active"
|
|
||||||
|
|
||||||
u.log.debug('OK')
|
|
||||||
|
|
||||||
def test_910_pause_and_resume(self):
|
|
||||||
"""The services can be paused and resumed. """
|
|
||||||
u.log.debug('Checking pause and resume actions...')
|
|
||||||
unit = self.hacluster_sentry
|
|
||||||
|
|
||||||
assert u.status_get(unit)[0] == "active"
|
|
||||||
|
|
||||||
action_id = u.run_action(unit, "pause")
|
|
||||||
assert u.wait_on_action(action_id), "Pause action failed."
|
|
||||||
assert u.status_get(unit)[0] == "maintenance"
|
|
||||||
|
|
||||||
action_id = u.run_action(unit, "resume")
|
|
||||||
assert u.wait_on_action(action_id), "Resume action failed."
|
|
||||||
assert u.status_get(unit)[0] == "active"
|
|
||||||
u.log.debug('OK')
|
|
||||||
|
|
||||||
def test_920_put_in_maintenance(self):
|
|
||||||
"""Put pacemaker in maintenance mode"""
|
|
||||||
return
|
|
||||||
u.log.debug('Setting cluster in maintenance mode')
|
|
||||||
|
|
||||||
self._toggle_maintenance_and_wait('true')
|
|
||||||
self._toggle_maintenance_and_wait('false')
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
series: bionic
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: bionic
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:bionic-rocky
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: bionic
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:bionic-stein
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: bionic
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:bionic-train
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,31 @@
|
||||||
|
series: disco
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,4 @@
|
||||||
|
applications:
|
||||||
|
keystone:
|
||||||
|
options:
|
||||||
|
vip: '{{ TEST_VIP00 }}'
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: trusty
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:trusty/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:trusty-mitaka
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,31 @@
|
||||||
|
series: xenial
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: xenial
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:xenial-ocata
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: xenial
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:xenial-pike
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -0,0 +1,32 @@
|
||||||
|
series: xenial
|
||||||
|
|
||||||
|
machines:
|
||||||
|
'0':
|
||||||
|
'1':
|
||||||
|
'2':
|
||||||
|
'3':
|
||||||
|
|
||||||
|
relations:
|
||||||
|
- ['keystone:shared-db', 'percona-cluster:shared-db']
|
||||||
|
- ['hacluster:ha', 'keystone:ha']
|
||||||
|
|
||||||
|
applications:
|
||||||
|
percona-cluster:
|
||||||
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
|
num_units: 1
|
||||||
|
to:
|
||||||
|
- '0'
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
openstack-origin: cloud:xenial-queens
|
||||||
|
token-expiration: 60
|
||||||
|
to:
|
||||||
|
- '1'
|
||||||
|
- '2'
|
||||||
|
- '3'
|
||||||
|
hacluster:
|
||||||
|
charm: ../../../hacluster
|
||||||
|
subordinate-to:
|
||||||
|
- keystone
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on cosmic-rocky."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='cosmic')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on bionic-queens."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='bionic')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on bionic-rocky."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='bionic',
|
|
||||||
openstack='cloud:bionic-rocky',
|
|
||||||
source='cloud:bionic-updates/rocky')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on bionic-stein."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='bionic',
|
|
||||||
openstack='cloud:bionic-stein',
|
|
||||||
source='cloud:bionic-stein')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2019 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on bionic-train."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='bionic',
|
|
||||||
openstack='cloud:bionic-train',
|
|
||||||
source='cloud:bionic-train')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on disco-stein."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='disco')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on trusty-mitaka."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='trusty',
|
|
||||||
openstack='cloud:trusty-mitaka',
|
|
||||||
source='cloud:trusty-updates/mitaka')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on xenial-mitaka."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='xenial')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on xenial-ocata."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='xenial',
|
|
||||||
openstack='cloud:xenial-ocata',
|
|
||||||
source='cloud:xenial-updates/ocata')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on xenial-pike."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='xenial',
|
|
||||||
openstack='cloud:xenial-pike',
|
|
||||||
source='cloud:xenial-updates/pike')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
|
||||||
# Copyright 2016 Canonical Ltd
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Amulet tests on a basic hacluster deployment on xenial-queens."""
|
|
||||||
|
|
||||||
from basic_deployment import HAClusterBasicDeployment
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
deployment = HAClusterBasicDeployment(series='xenial',
|
|
||||||
openstack='cloud:xenial-queens',
|
|
||||||
source='cloud:xenial-updates/queens')
|
|
||||||
deployment.run_tests()
|
|
|
@ -1,18 +1,23 @@
|
||||||
# Bootstrap the model if necessary.
|
charm_name: hacluster
|
||||||
bootstrap: True
|
|
||||||
# Re-use bootstrap node.
|
smoke_bundles:
|
||||||
reset: True
|
- bionic-train
|
||||||
# Use tox/requirements to drive the venv instead of bundletester's venv feature.
|
gate_bundles:
|
||||||
virtualenv: False
|
- trusty-mitaka
|
||||||
# Leave makefile empty, otherwise unit/lint tests will rerun ahead of amulet.
|
- xenial-mitaka
|
||||||
makefile: []
|
- xenial-ocata
|
||||||
# Do not specify juju PPA sources. Juju is presumed to be pre-installed
|
- xenial-pike
|
||||||
# and configured in all test runner environments.
|
- xenial-queens
|
||||||
#sources:
|
- bionic-queens
|
||||||
# Do not specify or rely on system packages.
|
- bionic-rocky
|
||||||
#packages:
|
- bionic-stein
|
||||||
# Do not specify python packages here. Use test-requirements.txt
|
- bionic-train
|
||||||
# and tox instead. ie. The venv is constructed before bundletester
|
- disco-stein
|
||||||
# is invoked.
|
dev_bundles:
|
||||||
#python-packages:
|
- bionic-train
|
||||||
reset_timeout: 600
|
|
||||||
|
configure:
|
||||||
|
- zaza.openstack.charm_tests.keystone.setup.add_demo_user
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- zaza.openstack.charm_tests.hacluster.tests.HaclusterTest
|
||||||
|
|
23
tox.ini
23
tox.ini
|
@ -1,4 +1,4 @@
|
||||||
# Classic charm (with amulet): ./tox.ini
|
# Classic charm (with zaza): ./tox.ini
|
||||||
# This file is managed centrally by release-tools and should not be modified
|
# This file is managed centrally by release-tools and should not be modified
|
||||||
# within individual charm repos. See the 'global' dir contents for available
|
# within individual charm repos. See the 'global' dir contents for available
|
||||||
# choices of tox.ini for OpenStack Charms:
|
# choices of tox.ini for OpenStack Charms:
|
||||||
|
@ -15,12 +15,11 @@ skip_missing_interpreters = False
|
||||||
setenv = VIRTUAL_ENV={envdir}
|
setenv = VIRTUAL_ENV={envdir}
|
||||||
PYTHONHASHSEED=0
|
PYTHONHASHSEED=0
|
||||||
CHARM_DIR={envdir}
|
CHARM_DIR={envdir}
|
||||||
AMULET_SETUP_TIMEOUT=5400
|
|
||||||
install_command =
|
install_command =
|
||||||
pip install {opts} {packages}
|
pip install {opts} {packages}
|
||||||
commands = stestr run --slowest {posargs}
|
commands = stestr run --slowest {posargs}
|
||||||
whitelist_externals = juju
|
whitelist_externals = juju
|
||||||
passenv = HOME TERM AMULET_* CS_* OS_* TEST_*
|
passenv = HOME TERM CS_* OS_* TEST_*
|
||||||
|
|
||||||
[testenv:py3]
|
[testenv:py3]
|
||||||
basepython = python3
|
basepython = python3
|
||||||
|
@ -83,38 +82,38 @@ commands = {posargs}
|
||||||
|
|
||||||
[testenv:func-noop]
|
[testenv:func-noop]
|
||||||
# DRY RUN - For Debug
|
# DRY RUN - For Debug
|
||||||
basepython = python2.7
|
basepython = python3
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands =
|
commands =
|
||||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "gate-*" -n --no-destroy
|
functest-run-suite --help
|
||||||
|
|
||||||
[testenv:func]
|
[testenv:func]
|
||||||
# Charm Functional Test
|
# Charm Functional Test
|
||||||
# Run all gate tests which are +x (expected to always pass)
|
# Run all gate tests which are +x (expected to always pass)
|
||||||
basepython = python2.7
|
basepython = python3
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands =
|
commands =
|
||||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "gate-*" --no-destroy
|
functest-run-suite --keep-model
|
||||||
|
|
||||||
[testenv:func-smoke]
|
[testenv:func-smoke]
|
||||||
# Charm Functional Test
|
# Charm Functional Test
|
||||||
# Run a specific test as an Amulet smoke test (expected to always pass)
|
# Run a specific test as an zaza smoke test (expected to always pass)
|
||||||
basepython = python2.7
|
basepython = python3
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands =
|
commands =
|
||||||
bundletester -vl DEBUG -r json -o func-results.json gate-basic-bionic-train --no-destroy
|
functest-run-suite --keep-model --smoke --log INFO
|
||||||
|
|
||||||
[testenv:func-dev]
|
[testenv:func-dev]
|
||||||
# Charm Functional Test
|
# Charm Functional Test
|
||||||
# Run all development test targets which are +x (may not always pass!)
|
# Run all development test targets which are +x (may not always pass!)
|
||||||
basepython = python2.7
|
basepython = python3
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands =
|
commands =
|
||||||
bundletester -vl DEBUG -r json -o func-results.json --test-pattern "dev-*" --no-destroy
|
functest-run-suite --keep-model --bundle {posargs}
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
ignore = E402,E226
|
ignore = E402,E226
|
||||||
|
|
Loading…
Reference in New Issue