summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doctor_tests/config.py4
-rw-r--r--doctor_tests/main.py74
-rw-r--r--doctor_tests/scenario/__init__.py9
-rw-r--r--requirements.txt2
4 files changed, 72 insertions, 17 deletions
diff --git a/doctor_tests/config.py b/doctor_tests/config.py
index 273e84d5..dc05c0d8 100644
--- a/doctor_tests/config.py
+++ b/doctor_tests/config.py
@@ -21,6 +21,7 @@ from doctor_tests import monitor
from doctor_tests import os_clients
from doctor_tests import profiler_poc
from doctor_tests import user
+from doctor_tests import scenario
def list_opts():
@@ -36,7 +37,8 @@ def list_opts():
network.OPTS,
instance.OPTS,
alarm.OPTS,
- profiler_poc.OPTS))
+ profiler_poc.OPTS,
+ scenario.OPTS))
]
diff --git a/doctor_tests/main.py b/doctor_tests/main.py
index 3f346356..f54b6403 100644
--- a/doctor_tests/main.py
+++ b/doctor_tests/main.py
@@ -68,6 +68,9 @@ class DoctorTest(object):
# creating test user...
self.user.create()
+
+ def setup_fault_management(self):
+ # user settings...
self.user.update_quota()
# creating VM...
@@ -79,20 +82,21 @@ class DoctorTest(object):
self.alarm.create()
# starting doctor sample components...
- self.inspector.start()
+ # tbd tojuvone: move inspector and consumer to common setup
+ # when they support updating VMs via instance.create and
+ # instance.delete alarm
+ self.inspector.start()
+ self.consumer.start()
self.down_host = self.get_host_info_for_random_vm()
self.monitor.start(self.down_host)
- self.consumer.start()
-
- def run(self):
- """run doctor test"""
+ def test_fault_management(self):
try:
- LOG.info('doctor test starting.......')
+ LOG.info('doctor fault management test starting.......')
# prepare test env
- self.setup()
+ self.setup_fault_management()
# wait for aodh alarms are updated in caches for event evaluator,
# sleep time should be larger than event_alarm_cache_ttl
@@ -111,18 +115,56 @@ class DoctorTest(object):
notification_time = calculate_notification_time(LogFile)
if notification_time < 1 and notification_time > 0:
- LOG.info('doctor test successfully, notification_time=%s'
- % notification_time)
+ LOG.info('doctor fault management test successfully, '
+ 'notification_time=%s' % notification_time)
else:
- LOG.error('doctor test failed, notification_time=%s'
- % notification_time)
+ LOG.error('doctor fault management test failed, '
+ 'notification_time=%s' % notification_time)
sys.exit(1)
if self.conf.profiler_type:
- LOG.info('doctor test begin to run profile.......')
+ LOG.info('doctor fault management test begin to run '
+ 'profile.......')
self.collect_logs()
self.run_profiler()
except Exception as e:
+ LOG.error('doctor fault management test failed, '
+ 'Exception=%s' % e)
+ sys.exit(1)
+ finally:
+ self.cleanup_fault_management()
+
+ def _amount_compute_nodes(self):
+ services = self.nova.services.list(binary='nova-compute')
+ return len(services)
+
+ def test_maintenance(self):
+ cnodes = self._amount_compute_nodes()
+ if cnodes < 3:
+ # need 2 compute for redundancy and one spare to migrate
+ LOG.info('not enough compute nodes, skipping doctor '
+ 'maintenance test')
+ return
+ try:
+ LOG.info('doctor maintenance test starting.......')
+ # TODO (tojuvone) test setup and actual test
+ except Exception as e:
+ LOG.error('doctor maintenance test failed, Exception=%s' % e)
+ sys.exit(1)
+ # TODO (tojuvone) finally: test case specific cleanup
+
+ def run(self):
+ """run doctor tests"""
+ try:
+ LOG.info('doctor test starting.......')
+ # prepare common test env
+ self.setup()
+ if self.conf.test_case == 'all':
+ self.test_fault_management()
+ self.test_maintenance()
+ else:
+ getattr(self, self.conf.test_case)()
+ except Exception as e:
LOG.error('doctor test failed, Exception=%s' % e)
sys.exit(1)
finally:
@@ -196,17 +238,19 @@ class DoctorTest(object):
profiler_main(log=LOG)
- def cleanup(self):
+ def cleanup_fault_management(self):
self.unset_forced_down_hosts()
self.inspector.stop()
self.monitor.stop()
self.consumer.stop()
- self.installer.cleanup()
self.alarm.delete()
self.instance.delete()
self.network.delete()
- self.image.delete()
self.fault.cleanup()
+
+ def cleanup(self):
+ self.installer.cleanup()
+ self.image.delete()
self.user.delete()
diff --git a/doctor_tests/scenario/__init__.py b/doctor_tests/scenario/__init__.py
index 48893ae6..9e7cd11d 100644
--- a/doctor_tests/scenario/__init__.py
+++ b/doctor_tests/scenario/__init__.py
@@ -6,3 +6,12 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+from oslo_config import cfg
+
+
+OPTS = [
+ cfg.StrOpt('test_case',
+ default='all',
+ help='the name of test case',
+ required=False),
+]
diff --git a/requirements.txt b/requirements.txt
index 9a355184..ac29d795 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -14,6 +14,6 @@ python-neutronclient>=6.3.0 # Apache-2.0
python-novaclient>=9.0.0 # Apache-2.0
python-congressclient<2000,>=1.3.0 # Apache-2.0
python-glanceclient>=2.8.0 # Apache-2.0
-python-vitrageclient>=1.2.0 # Apache-2.0
+python-vitrageclient>=1.3.0 # Apache-2.0
virtualenv>=13.1.0 # MIT
flake8<2.6.0,>=2.5.4 # MIT