vitrage/vitrage/tests/unit/datasources/zabbix/test_zabbix_configuration.py

95 lines
3.6 KiB
Python

# Copyright 2016 - Nokia
#
# 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.
from oslo_config import cfg
from vitrage.common.constants import DatasourceOpts as DSOpts
from vitrage.datasources.nova.host import NOVA_HOST_DATASOURCE
from vitrage.datasources.zabbix.driver import ZabbixDriver
from vitrage.datasources.zabbix.properties import ZabbixProperties \
as ZabbixProps
from vitrage.datasources.zabbix import ZABBIX_DATASOURCE
from vitrage.tests import base
from vitrage.tests.mocks import utils
class TestZabbixConfig(base.BaseTest):
OPTS = [
cfg.StrOpt(DSOpts.TRANSFORMER,
default='vitrage.datasources.zabbix.transformer.'
'ZabbixTransformer',
help='Zabbix data source transformer class path',
required=True),
cfg.StrOpt(DSOpts.DRIVER,
default='vitrage.datasources.zabbix.driver.ZabbixDriver',
help='Zabbix driver class path',
required=True),
cfg.IntOpt(DSOpts.CHANGES_INTERVAL,
default=30,
min=30,
help='interval between checking changes in zabbix plugin',
required=True),
cfg.StrOpt('user', default='admin',
help='Zabbix user name'),
cfg.StrOpt('password', default='zabbix',
help='Zabbix user password'),
cfg.StrOpt('url', default='', help='Zabbix url'),
cfg.StrOpt(DSOpts.CONFIG_FILE,
help='Zabbix configuration file',
default=utils.get_resources_dir()
+ '/zabbix/zabbix_conf.yaml'),
]
# the mappings match the ones in zabbix_conf.yaml
MAPPINGS = {
'compute-1': {ZabbixProps.RESOURCE_TYPE: NOVA_HOST_DATASOURCE,
ZabbixProps.RESOURCE_NAME: 'compute-1'},
'compute-2': {ZabbixProps.RESOURCE_TYPE: NOVA_HOST_DATASOURCE,
ZabbixProps.RESOURCE_NAME: 'host2'},
}
NON_EXISTING_MAPPINGS = {
'X': {ZabbixProps.RESOURCE_TYPE: NOVA_HOST_DATASOURCE,
ZabbixProps.RESOURCE_NAME: 'compute-1'},
'compute-1': {ZabbixProps.RESOURCE_TYPE: 'X',
ZabbixProps.RESOURCE_NAME: 'compute-1'},
}
# noinspection PyPep8Naming
@classmethod
def setUpClass(cls):
super(TestZabbixConfig, cls).setUpClass()
cls.conf = cfg.ConfigOpts()
cls.conf.register_opts(cls.OPTS, group=ZABBIX_DATASOURCE)
def test_zabbix_configuration_loading(self):
# Action
mappings = ZabbixDriver._configuration_mapping(self.conf)
# Test assertions
self.assertEqual(len(self.MAPPINGS), len(mappings))
for expected_mapping in self.MAPPINGS.items():
self.assertTrue(self._check_contains(expected_mapping, mappings))
for expected_mapping in self.NON_EXISTING_MAPPINGS.items():
self.assertFalse(self._check_contains(expected_mapping, mappings))
@staticmethod
def _check_contains(expected_mapping, mappings):
for mapping in mappings.items():
if expected_mapping == mapping:
return True
return False