ZuulV3 support for watcherclient
Change-Id: I0efc302dae72d18f86dbdae1d22a6ea798cfb8f5
This commit is contained in:
parent
b87399cb2c
commit
8acf01859c
setup.cfg
watcherclient
@ -26,7 +26,7 @@ packages =
|
|||||||
console_scripts =
|
console_scripts =
|
||||||
watcher = watcherclient.shell:main
|
watcher = watcherclient.shell:main
|
||||||
tempest.test_plugins =
|
tempest.test_plugins =
|
||||||
watcherclient_tests = watcherclient.tests.functional.plugin:WatcherClientTempestPlugin
|
watcherclient_tests = watcherclient.plugin:WatcherClientTempestPlugin
|
||||||
|
|
||||||
openstack.cli.extension =
|
openstack.cli.extension =
|
||||||
infra_optim = watcherclient.osc.plugin
|
infra_optim = watcherclient.osc.plugin
|
||||||
|
@ -15,14 +15,14 @@ import os
|
|||||||
|
|
||||||
from tempest.test_discover import plugins
|
from tempest.test_discover import plugins
|
||||||
|
|
||||||
from watcherclient.tests.functional import config as watcher_config
|
from watcherclient import config as watcher_config
|
||||||
|
|
||||||
|
|
||||||
class WatcherClientTempestPlugin(plugins.TempestPlugin):
|
class WatcherClientTempestPlugin(plugins.TempestPlugin):
|
||||||
def load_tests(self):
|
def load_tests(self):
|
||||||
base_path = os.path.split(os.path.dirname(
|
base_path = os.path.split(os.path.dirname(
|
||||||
os.path.abspath(__file__)))[0]
|
os.path.abspath(__file__)))[0]
|
||||||
test_dir = "watcherclient/tests/functional"
|
test_dir = "watcherclient/tests/functional/v1"
|
||||||
full_test_dir = os.path.join(base_path, test_dir)
|
full_test_dir = os.path.join(base_path, test_dir)
|
||||||
return full_test_dir, base_path
|
return full_test_dir, base_path
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
#!/bin/bash -xe
|
|
||||||
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
# This script is executed inside post_test_hook function in devstack gate.
|
|
||||||
|
|
||||||
# Default gate uses /opt/stack/new... but some of us may install differently
|
|
||||||
STACK_DIR=$BASE/new/devstack
|
|
||||||
|
|
||||||
function generate_testr_results {
|
|
||||||
if [ -f .testrepository/0 ]; then
|
|
||||||
sudo .tox/functional/bin/testr last --subunit > $WORKSPACE/testrepository.subunit
|
|
||||||
sudo mv $WORKSPACE/testrepository.subunit $BASE/logs/testrepository.subunit
|
|
||||||
sudo /usr/os-testr-env/bin/subunit2html $BASE/logs/testrepository.subunit $BASE/logs/testr_results.html
|
|
||||||
sudo gzip -9 $BASE/logs/testrepository.subunit
|
|
||||||
sudo gzip -9 $BASE/logs/testr_results.html
|
|
||||||
sudo chown $USER:$USER $BASE/logs/testrepository.subunit.gz $BASE/logs/testr_results.html.gz
|
|
||||||
sudo chmod a+r $BASE/logs/testrepository.subunit.gz $BASE/logs/testr_results.html.gz
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
export WATCHERCLIENT_DIR="$BASE/new/python-watcherclient"
|
|
||||||
|
|
||||||
sudo chown -R $USER:stack $WATCHERCLIENT_DIR
|
|
||||||
|
|
||||||
# Get admin credentials
|
|
||||||
cd $STACK_DIR
|
|
||||||
source openrc admin admin
|
|
||||||
|
|
||||||
# Go to the watcherclient dir
|
|
||||||
cd $WATCHERCLIENT_DIR
|
|
||||||
|
|
||||||
# Run tests
|
|
||||||
echo "Running watcherclient functional test suite"
|
|
||||||
set +e
|
|
||||||
# Preserve env for OS_ credentials
|
|
||||||
sudo -E -H -u $USER tox -efunctional
|
|
||||||
EXIT_CODE=$?
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Collect and parse result
|
|
||||||
generate_testr_results
|
|
||||||
exit $EXIT_CODE
|
|
@ -18,22 +18,31 @@ import subprocess
|
|||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
from tempest import clients
|
||||||
|
from tempest.common import credentials_factory as creds_factory
|
||||||
from tempest.lib.cli import output_parser
|
from tempest.lib.cli import output_parser
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
|
|
||||||
def credentials():
|
def credentials():
|
||||||
creds = {
|
# You can get credentials either from tempest.conf file or
|
||||||
'--os-username': os.environ.get('OS_USERNAME', 'admin'),
|
# from OS environment.
|
||||||
'--os-password': os.environ.get('OS_PASSWORD', 'secretadmin'),
|
tempest_creds = clients.get_auth_provider(
|
||||||
'--os-project-name': os.environ.get('OS_PROJECT_NAME', 'admin'),
|
creds_factory.get_configured_admin_credentials())
|
||||||
|
creds = tempest_creds.credentials
|
||||||
|
creds_dict = {
|
||||||
|
'--os-username': os.environ.get('OS_USERNAME', creds.username),
|
||||||
|
'--os-password': os.environ.get('OS_PASSWORD', creds.password),
|
||||||
|
'--os-project-name': os.environ.get('OS_PROJECT_NAME',
|
||||||
|
creds.project_name),
|
||||||
'--os-auth-url': os.environ.get('OS_AUTH_URL',
|
'--os-auth-url': os.environ.get('OS_AUTH_URL',
|
||||||
'http://10.0.1.94/identity'),
|
tempest_creds.auth_url),
|
||||||
'--os-project-domain-id': os.environ.get('OS_PROJECT_DOMAIN_ID',
|
'--os-project-domain-name': os.environ.get('OS_PROJECT_DOMAIN_ID',
|
||||||
'default'),
|
creds.project_domain_name),
|
||||||
'--os-user-domain-id': os.environ.get('OS_USER_DOMAIN_ID', 'default'),
|
'--os-user-domain-name': os.environ.get('OS_USER_DOMAIN_ID',
|
||||||
|
creds.user_domain_name),
|
||||||
}
|
}
|
||||||
return [x for sub in creds.items() for x in sub]
|
return [x for sub in creds_dict.items() for x in sub]
|
||||||
|
|
||||||
|
|
||||||
def execute(cmd, fail_ok=False, merge_stderr=False):
|
def execute(cmd, fail_ok=False, merge_stderr=False):
|
||||||
@ -123,3 +132,13 @@ class TestCase(testtools.TestCase):
|
|||||||
def parse_listing(self, raw_output):
|
def parse_listing(self, raw_output):
|
||||||
"""Return list of dicts with basic item parsed from cli output."""
|
"""Return list of dicts with basic item parsed from cli output."""
|
||||||
return output_parser.listing(raw_output)
|
return output_parser.listing(raw_output)
|
||||||
|
|
||||||
|
def has_actionplan_succeeded(self, ap_uuid):
|
||||||
|
return self.parse_show_as_object(
|
||||||
|
self.watcher('actionplan show %s' % ap_uuid)
|
||||||
|
)['State'] == 'SUCCEEDED'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def has_audit_created(cls, audit_uuid):
|
||||||
|
return cls.parse_show_as_object(
|
||||||
|
cls.watcher('audit show %s' % audit_uuid))['State'] == 'SUCCEEDED'
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
||||||
|
import functools
|
||||||
|
|
||||||
|
from tempest.lib.common.utils import test_utils
|
||||||
|
|
||||||
from watcherclient.tests.functional.v1 import base
|
from watcherclient.tests.functional.v1 import base
|
||||||
|
|
||||||
|
|
||||||
@ -33,17 +37,22 @@ class ActionTests(base.TestCase):
|
|||||||
template_raw_output = cls.watcher(
|
template_raw_output = cls.watcher(
|
||||||
'audittemplate create %s dummy -s dummy' % cls.audit_template_name)
|
'audittemplate create %s dummy -s dummy' % cls.audit_template_name)
|
||||||
template_output = cls.parse_show_as_object(template_raw_output)
|
template_output = cls.parse_show_as_object(template_raw_output)
|
||||||
audit_raw_output = cls.watcher(
|
audit_output = cls.parse_show_as_object(cls.watcher(
|
||||||
'audit create -a %s' % template_output['Name'])
|
'audit create -a %s' % template_output['Name']))
|
||||||
audit_output = cls.parse_show_as_object(audit_raw_output)
|
|
||||||
cls.audit_uuid = audit_output['UUID']
|
cls.audit_uuid = audit_output['UUID']
|
||||||
|
audit_created = test_utils.call_until_true(
|
||||||
|
func=functools.partial(cls.has_audit_created, cls.audit_uuid),
|
||||||
|
duration=600,
|
||||||
|
sleep_for=2)
|
||||||
|
if not audit_created:
|
||||||
|
raise Exception('Audit has not been succeeded')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
# Delete Action Plan and all related actions.
|
# Delete Action Plan and all related actions.
|
||||||
output = cls.parse_show(
|
output = cls.parse_show(
|
||||||
cls.watcher('actionplan list --audit %s' % cls.audit_uuid))
|
cls.watcher('actionplan list --audit %s' % cls.audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
raw_output = cls.watcher('actionplan delete %s' % action_plan_uuid)
|
raw_output = cls.watcher('actionplan delete %s' % action_plan_uuid)
|
||||||
cls.assertOutput('', raw_output)
|
cls.assertOutput('', raw_output)
|
||||||
# Delete audit
|
# Delete audit
|
||||||
@ -63,9 +72,10 @@ class ActionTests(base.TestCase):
|
|||||||
self.assert_table_structure([raw_output], self.detailed_list_fields)
|
self.assert_table_structure([raw_output], self.detailed_list_fields)
|
||||||
|
|
||||||
def test_action_show(self):
|
def test_action_show(self):
|
||||||
action_list = self.parse_show(self.watcher('action list'))
|
action_list = self.parse_show(self.watcher('action list --audit %s'
|
||||||
action_uuid = action_list[0].keys()[0]
|
% self.audit_uuid))
|
||||||
action = self.watcher('action show ' + action_uuid)
|
action_uuid = list(action_list[0])[0]
|
||||||
|
action = self.watcher('action show %s' % action_uuid)
|
||||||
self.assertIn(action_uuid, action)
|
self.assertIn(action_uuid, action)
|
||||||
self.assert_table_structure([action],
|
self.assert_table_structure([action],
|
||||||
self.detailed_list_fields)
|
self.detailed_list_fields)
|
||||||
|
@ -13,10 +13,12 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import time
|
|
||||||
|
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
||||||
|
import functools
|
||||||
|
|
||||||
|
from tempest.lib.common.utils import test_utils
|
||||||
|
|
||||||
from watcherclient.tests.functional.v1 import base
|
from watcherclient.tests.functional.v1 import base
|
||||||
|
|
||||||
|
|
||||||
@ -39,22 +41,19 @@ class ActionPlanTests(base.TestCase):
|
|||||||
% template_output['Name'])
|
% template_output['Name'])
|
||||||
audit_output = cls.parse_show_as_object(audit_raw_output)
|
audit_output = cls.parse_show_as_object(audit_raw_output)
|
||||||
cls.audit_uuid = audit_output['UUID']
|
cls.audit_uuid = audit_output['UUID']
|
||||||
|
audit_created = test_utils.call_until_true(
|
||||||
|
func=functools.partial(cls.has_audit_created, cls.audit_uuid),
|
||||||
|
duration=600,
|
||||||
|
sleep_for=2)
|
||||||
|
if not audit_created:
|
||||||
|
raise Exception('Audit has not been succeeded')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
# Delete action plan
|
# Delete action plan
|
||||||
output = cls.parse_show(
|
output = cls.parse_show(
|
||||||
cls.watcher('actionplan list --audit %s' % cls.audit_uuid))
|
cls.watcher('actionplan list --audit %s' % cls.audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
retry = 10
|
|
||||||
while retry > 0:
|
|
||||||
output = cls.parse_show(
|
|
||||||
cls.watcher('actionplan show %s' % action_plan_uuid))
|
|
||||||
state = [x for x in output if x.keys()[0] == 'State'][0]['State']
|
|
||||||
if state == 'SUCCEEDED':
|
|
||||||
break
|
|
||||||
time.sleep(1)
|
|
||||||
retry -= 1
|
|
||||||
raw_output = cls.watcher('actionplan delete %s' % action_plan_uuid)
|
raw_output = cls.watcher('actionplan delete %s' % action_plan_uuid)
|
||||||
cls.assertOutput('', raw_output)
|
cls.assertOutput('', raw_output)
|
||||||
# Delete audit
|
# Delete audit
|
||||||
@ -75,7 +74,7 @@ class ActionPlanTests(base.TestCase):
|
|||||||
|
|
||||||
def test_action_plan_show(self):
|
def test_action_plan_show(self):
|
||||||
action_plan_list = self.parse_show(self.watcher('actionplan list'))
|
action_plan_list = self.parse_show(self.watcher('actionplan list'))
|
||||||
action_plan_uuid = action_plan_list[0].keys()[0]
|
action_plan_uuid = list(action_plan_list[0])[0]
|
||||||
actionplan = self.watcher('actionplan show %s' % action_plan_uuid)
|
actionplan = self.watcher('actionplan show %s' % action_plan_uuid)
|
||||||
self.assertIn(action_plan_uuid, actionplan)
|
self.assertIn(action_plan_uuid, actionplan)
|
||||||
self.assert_table_structure([actionplan],
|
self.assert_table_structure([actionplan],
|
||||||
@ -84,11 +83,18 @@ class ActionPlanTests(base.TestCase):
|
|||||||
def test_action_plan_start(self):
|
def test_action_plan_start(self):
|
||||||
output = self.parse_show(self.watcher('actionplan list --audit %s'
|
output = self.parse_show(self.watcher('actionplan list --audit %s'
|
||||||
% self.audit_uuid))
|
% self.audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
self.watcher('actionplan start %s' % action_plan_uuid)
|
self.watcher('actionplan start %s' % action_plan_uuid)
|
||||||
raw_output = self.watcher('actionplan show %s' % action_plan_uuid)
|
raw_output = self.watcher('actionplan show %s' % action_plan_uuid)
|
||||||
self.assert_table_structure([raw_output], self.detailed_list_fields)
|
self.assert_table_structure([raw_output], self.detailed_list_fields)
|
||||||
|
|
||||||
|
self.assertTrue(test_utils.call_until_true(
|
||||||
|
func=functools.partial(
|
||||||
|
self.has_actionplan_succeeded, action_plan_uuid),
|
||||||
|
duration=600,
|
||||||
|
sleep_for=2
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
class ActionPlanActiveTests(base.TestCase):
|
class ActionPlanActiveTests(base.TestCase):
|
||||||
|
|
||||||
@ -100,9 +106,15 @@ class ActionPlanActiveTests(base.TestCase):
|
|||||||
'Strategy', 'Efficacy indicators']
|
'Strategy', 'Efficacy indicators']
|
||||||
|
|
||||||
def _delete_action_plan(self):
|
def _delete_action_plan(self):
|
||||||
|
self.assertTrue(test_utils.call_until_true(
|
||||||
|
func=functools.partial(
|
||||||
|
self.has_audit_created, self.audit_uuid),
|
||||||
|
duration=600,
|
||||||
|
sleep_for=2
|
||||||
|
))
|
||||||
output = self.parse_show(
|
output = self.parse_show(
|
||||||
self.watcher('actionplan list --audit %s' % self.audit_uuid))
|
self.watcher('actionplan list --audit %s' % self.audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
raw_output = self.watcher('actionplan delete %s' % action_plan_uuid)
|
raw_output = self.watcher('actionplan delete %s' % action_plan_uuid)
|
||||||
self.assertOutput('', raw_output)
|
self.assertOutput('', raw_output)
|
||||||
|
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
||||||
|
import functools
|
||||||
|
|
||||||
|
from tempest.lib.common.utils import test_utils
|
||||||
|
|
||||||
from watcherclient.tests.functional.v1 import base
|
from watcherclient.tests.functional.v1 import base
|
||||||
|
|
||||||
|
|
||||||
@ -44,7 +48,7 @@ class AuditTests(base.TestCase):
|
|||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
output = cls.parse_show(
|
output = cls.parse_show(
|
||||||
cls.watcher('actionplan list --audit %s' % cls.audit_uuid))
|
cls.watcher('actionplan list --audit %s' % cls.audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
cls.watcher('actionplan delete %s' % action_plan_uuid)
|
cls.watcher('actionplan delete %s' % action_plan_uuid)
|
||||||
cls.watcher('audit delete %s' % cls.audit_uuid)
|
cls.watcher('audit delete %s' % cls.audit_uuid)
|
||||||
cls.watcher('audittemplate delete %s' % cls.audit_template_name)
|
cls.watcher('audittemplate delete %s' % cls.audit_template_name)
|
||||||
@ -76,39 +80,51 @@ class AuditActiveTests(base.TestCase):
|
|||||||
'Deleted At', 'Parameters',
|
'Deleted At', 'Parameters',
|
||||||
'Interval', 'Audit Scope']
|
'Interval', 'Audit Scope']
|
||||||
audit_template_name = 'a' + uuidutils.generate_uuid()
|
audit_template_name = 'a' + uuidutils.generate_uuid()
|
||||||
audit_uuid = None
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
cls.watcher('audittemplate create %s dummy -s dummy'
|
||||||
|
% cls.audit_template_name)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
cls.watcher('audittemplate delete %s' % cls.audit_template_name)
|
||||||
|
|
||||||
def _create_audit(self):
|
def _create_audit(self):
|
||||||
raw_output = self.watcher('audittemplate create %s dummy -s dummy'
|
return self.parse_show_as_object(
|
||||||
% self.audit_template_name)
|
|
||||||
template_output = self.parse_show_as_object(raw_output)
|
|
||||||
self.audit_uuid = self.parse_show_as_object(
|
|
||||||
self.watcher('audit create -a %s'
|
self.watcher('audit create -a %s'
|
||||||
% template_output['Name']))['UUID']
|
% self.audit_template_name))['UUID']
|
||||||
|
|
||||||
def _delete_audit(self):
|
def _delete_audit(self, audit_uuid):
|
||||||
|
self.assertTrue(test_utils.call_until_true(
|
||||||
|
func=functools.partial(
|
||||||
|
self.has_audit_created, audit_uuid),
|
||||||
|
duration=600,
|
||||||
|
sleep_for=2
|
||||||
|
))
|
||||||
output = self.parse_show(
|
output = self.parse_show(
|
||||||
self.watcher('actionplan list --audit %s' % self.audit_uuid))
|
self.watcher('actionplan list --audit %s' % audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
self.watcher('actionplan delete %s' % action_plan_uuid)
|
self.watcher('actionplan delete %s' % action_plan_uuid)
|
||||||
self.watcher('audit delete %s' % self.audit_uuid)
|
self.watcher('audit delete %s' % audit_uuid)
|
||||||
self.watcher('audittemplate delete %s' % self.audit_template_name)
|
|
||||||
|
|
||||||
def test_create_audit(self):
|
def test_create_audit(self):
|
||||||
raw_output = self.watcher('audittemplate create %s dummy -s dummy'
|
audit = self.watcher('audit create -a %s' % self.audit_template_name)
|
||||||
% self.audit_template_name)
|
audit_uuid = self.parse_show_as_object(audit)['UUID']
|
||||||
template_output = self.parse_show_as_object(raw_output)
|
|
||||||
audit = self.watcher('audit create -a %s' % template_output['Name'])
|
|
||||||
self.audit_uuid = self.parse_show_as_object(audit)['UUID']
|
|
||||||
self.assert_table_structure([audit], self.detailed_list_fields)
|
self.assert_table_structure([audit], self.detailed_list_fields)
|
||||||
self._delete_audit()
|
self._delete_audit(audit_uuid)
|
||||||
|
|
||||||
def test_delete_audit(self):
|
def test_delete_audit(self):
|
||||||
self._create_audit()
|
audit_uuid = self._create_audit()
|
||||||
raw_output = self.watcher('audit delete %s' % self.audit_uuid)
|
self.assertTrue(test_utils.call_until_true(
|
||||||
|
func=functools.partial(
|
||||||
|
self.has_audit_created, audit_uuid),
|
||||||
|
duration=600,
|
||||||
|
sleep_for=2
|
||||||
|
))
|
||||||
|
raw_output = self.watcher('audit delete %s' % audit_uuid)
|
||||||
self.assertOutput('', raw_output)
|
self.assertOutput('', raw_output)
|
||||||
output = self.parse_show(
|
output = self.parse_show(
|
||||||
self.watcher('actionplan list --audit %s' % self.audit_uuid))
|
self.watcher('actionplan list --audit %s' % audit_uuid))
|
||||||
action_plan_uuid = output[0].keys()[0]
|
action_plan_uuid = list(output[0])[0]
|
||||||
self.watcher('actionplan delete %s' % action_plan_uuid)
|
self.watcher('actionplan delete %s' % action_plan_uuid)
|
||||||
self.watcher('audittemplate delete %s' % self.audit_template_name)
|
|
||||||
|
@ -37,6 +37,8 @@ class ServiceTests(base.TestCase):
|
|||||||
self.list_fields + ['Last seen up'])
|
self.list_fields + ['Last seen up'])
|
||||||
|
|
||||||
def test_service_show(self):
|
def test_service_show(self):
|
||||||
|
# TODO(alexchadin): this method should be refactored since Watcher will
|
||||||
|
# get HA support soon.
|
||||||
raw_output = self.watcher('service show %s'
|
raw_output = self.watcher('service show %s'
|
||||||
% self.decision_engine_name)
|
% self.decision_engine_name)
|
||||||
self.assertIn(self.decision_engine_name, raw_output)
|
self.assertIn(self.decision_engine_name, raw_output)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user