diff options
-rw-r--r-- | doctor_tests/config.py | 4 | ||||
-rw-r--r-- | doctor_tests/main.py | 74 | ||||
-rw-r--r-- | doctor_tests/scenario/__init__.py | 9 | ||||
-rw-r--r-- | requirements.txt | 2 |
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 |