summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test-requirements.txt1
-rw-r--r--tests/alarm.py95
-rw-r--r--tests/config.py6
-rw-r--r--tests/consumer/__init__.py26
-rw-r--r--tests/main.py6
-rw-r--r--tests/os_clients.py6
6 files changed, 139 insertions, 1 deletions
diff --git a/test-requirements.txt b/test-requirements.txt
index 2928e0f7..070caa44 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -5,6 +5,7 @@ requests>=2.8.0
oslo.config==3.22.0 # Apache-2.0
python-openstackclient==2.3.0
python-ceilometerclient==2.6.2
+aodhclient==0.7.0
python-keystoneclient==3.5.0
python-neutronclient==6.0.0
python-novaclient==6.0.0
diff --git a/tests/alarm.py b/tests/alarm.py
new file mode 100644
index 00000000..0582085e
--- /dev/null
+++ b/tests/alarm.py
@@ -0,0 +1,95 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corporation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+from oslo_config import cfg
+
+from identity_auth import get_identity_auth
+from identity_auth import get_session
+from os_clients import aodh_client
+from os_clients import nova_client
+
+OPTS = [
+ cfg.StrOpt('alarm_basename',
+ default='doctor_alarm',
+ help='the base name of alarm',
+ required=True),
+]
+
+
+class Alarm(object):
+
+ def __init__(self, conf, log):
+ self.conf = conf
+ self.log = log
+ self.auth = get_identity_auth(username=self.conf.doctor_user,
+ password=self.conf.doctor_passwd,
+ project=self.conf.doctor_project)
+ self.aodh = \
+ aodh_client(conf.aodh_version,
+ get_session(auth=self.auth))
+ self.nova = \
+ nova_client(conf.nova_version,
+ get_session(auth=self.auth))
+ self._init_alarm_name()
+
+ def _init_alarm_name(self):
+ self.alarm_names = []
+ for i in range(0, self.conf.instance_count):
+ alarm_name = '%s%d' % (self.conf.alarm_basename, i)
+ self.alarm_names.append(alarm_name)
+
+ def create(self):
+ self.log.info('alarm create start......')
+
+ alarms = {alarm['name']: alarm for alarm in self.aodh.alarm.list()}
+ servers = \
+ {getattr(server, 'name'): server
+ for server in self.nova.servers.list()}
+
+ for i in range(0, self.conf.instance_count):
+ alarm_name = self.alarm_names[i]
+ if alarm_name in alarms:
+ continue;
+ vm_name = '%s%d' % (self.conf.instance_basename, i)
+ vm_id = getattr(servers[vm_name], 'id')
+ alarm_request = dict(
+ name=alarm_name,
+ description=u'VM failure',
+ enabled=True,
+ alarm_actions=[u'http://%s:%d/failure'
+ % (self.conf.consumer.ip,
+ self.conf.consumer.port)],
+ repeat_actions=False,
+ severity=u'moderate',
+ type=u'event',
+ event_rule=dict(
+ event_type=u'compute.instance.update',
+ query=[
+ dict(field=u'traits.instance_id',
+ type='',
+ op=u'eq',
+ value=vm_id),
+ dict(field=u'traits.state',
+ type='',
+ op=u'eq',
+ value=u'error')]))
+ self.aodh.alarm.create(alarm_request)
+
+ self.log.info('alarm create end......')
+
+ def delete(self):
+ self.log.info('alarm delete start.......')
+
+ alarms = {alarm['name']: alarm for alarm in self.aodh.alarm.list()}
+ for alarm_name in self.alarm_names:
+ if alarm_name in alarms:
+ self.aodh.alarm.delete(alarms[alarm_name]['alarm_id'])
+
+ del self.alarm_names[:]
+
+ self.log.info('alarm delete end.......')
diff --git a/tests/config.py b/tests/config.py
index 99f335f2..94b85f7f 100644
--- a/tests/config.py
+++ b/tests/config.py
@@ -10,6 +10,8 @@ import itertools
from oslo_config import cfg
+import alarm
+import consumer
import image
import instance
import network
@@ -19,12 +21,14 @@ import user
def list_opts():
return [
+ ('consumer', consumer.OPTS),
('DEFAULT', itertools.chain(
os_clients.OPTS,
image.OPTS,
user.OPTS,
network.OPTS,
- instance.OPTS))
+ instance.OPTS,
+ alarm.OPTS))
]
diff --git a/tests/consumer/__init__.py b/tests/consumer/__init__.py
new file mode 100644
index 00000000..68cc5dc9
--- /dev/null
+++ b/tests/consumer/__init__.py
@@ -0,0 +1,26 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corporation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+from oslo_config import cfg
+
+
+OPTS = [
+ cfg.StrOpt('type',
+ default='sample',
+ choices=['sample'],
+ help='the component of doctor consumer',
+ required=True),
+ cfg.StrOpt('ip',
+ default='127.0.0.1',
+ help='the ip of consumer',
+ required=True),
+ cfg.IntOpt('port',
+ default='12346',
+ help='the port of doctor consumer',
+ required=True),
+]
diff --git a/tests/main.py b/tests/main.py
index 540a9244..45683d1e 100644
--- a/tests/main.py
+++ b/tests/main.py
@@ -10,6 +10,7 @@ import os
from os.path import isfile, join
import sys
+from alarm import Alarm
import config
from image import Image
from instance import Instance
@@ -28,6 +29,7 @@ class DoctorTest(object):
self.user = User(self.conf, LOG)
self.network = Network(self.conf, LOG)
self.instance = Instance(self.conf, LOG)
+ self.alarm = Alarm(self.conf, LOG)
def setup(self):
# prepare the cloud env
@@ -44,6 +46,9 @@ class DoctorTest(object):
self.instance.create()
self.instance.wait_for_vm_launch()
+ # creating alarm...
+ self.alarm.create()
+
def run(self):
"""run doctor test"""
try:
@@ -62,6 +67,7 @@ class DoctorTest(object):
self.cleanup()
def cleanup(self):
+ self.alarm.delete()
self.instance.delete()
self.network.delete()
self.image.delete()
diff --git a/tests/os_clients.py b/tests/os_clients.py
index 5f6d452e..2699930f 100644
--- a/tests/os_clients.py
+++ b/tests/os_clients.py
@@ -8,6 +8,7 @@
##############################################################################
from oslo_config import cfg
+import aodhclient.client as aodhclient
import glanceclient.client as glanceclient
from keystoneclient.v2_0 import client as ks_client
from neutronclient.v2_0 import client as neutronclient
@@ -17,6 +18,7 @@ import novaclient.client as novaclient
OPTS = [
cfg.StrOpt('glance_version', default='2', help='glance version'),
cfg.StrOpt('nova_version', default='2.34', help='Nova version'),
+ cfg.StrOpt('aodh_version', default='2', help='aodh version'),
]
@@ -36,3 +38,7 @@ def nova_client(version, session):
def neutron_client(session):
return neutronclient.Client(session=session)
+
+
+def aodh_client(version, session):
+ return aodhclient.Client(version, session=session)