123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- # -*- coding: utf-8 -*-
- '''
- :codeauthor: :email:`Jakub Sliva <jakub.sliva@ultimum.io>`
- '''
- # Import Python Libs
- from __future__ import absolute_import
- from __future__ import unicode_literals
- # Import Salt Testing Libs
- from tests.support.mixins import LoaderModuleMockMixin
- from tests.support.unit import TestCase
- from tests.support.mock import (
- MagicMock,
- patch,
- )
- import salt.states.zabbix_template as zabbix_template
- INPUT_PARAMS = {"applications": [{"name": "Ceph OSD"}]}
- DEFINED_OBJ = {"macros": [{"macro": "{$CEPH_CLUSTER_NAME}", "value": "ceph"}], "host": "A Testing Template",
- "hosts": [{"hostid": "10112"}, {"hostid": "10113"}], "description": "Template for Ceph nodes",
- "groups": [{"groupid": "1"}]}
- DEFINED_C_LIST_SUBS = {"applications": [{"name": "Ceph OSD"}], 'graphs': [], 'triggers': [], 'items': [],
- 'httpTests': [], 'screens': [], 'gitems': [], 'discoveries': []}
- SUBSTITUTE_PARAMS_CREATE = [DEFINED_OBJ, [], DEFINED_C_LIST_SUBS['applications'], [], [], [], [], [], [], [], []]
- EXISTING_OBJ = [{"available": "0", "tls_connect": "1", "maintenance_type": "0", "groups": [{"groupid": "1"}],
- "macros": [{"macro": "{$CEPH_CLUSTER_NAME}", "hostmacroid": "60", "hostid": "10206", "value": "ceph"}],
- "hosts": [{"hostid": "10112"}, {"hostid": "10113"}], "status": "3",
- "description": "Template for Ceph nodes", "host": "A Testing Template", "disable_until": "0",
- "templateid": "10206", "name": "A Testing Template"}]
- SUBSTITUTE_PARAMS_EXISTS = [DEFINED_OBJ, EXISTING_OBJ[0], [], [], [], [], [], [], [], []]
- EXISTING_OBJ_DIFF = [{"groups": [{"groupid": "1"}], "macros": [{"macro": "{$CEPH_CLUSTER_NAME}", "hostmacroid": "60",
- "hostid": "10206", "value": "ceph"}],
- "hosts": [{"hostid": "10112"}, {"hostid": "10113"}], "status": "3", "templateid": "10206",
- "name": "A Testing Template"}]
- SUBSTITUTE_PARAMS_UPDATE = [DEFINED_OBJ, EXISTING_OBJ_DIFF[0], [], [], [], [], [], [], [], []]
- DIFF_PARAMS = {'old': {}, 'new': {'macros': [], 'templateid': '10206'}}
- class ZabbixTemplateTestCase(TestCase, LoaderModuleMockMixin):
- '''
- Test cases for salt.modules.zabbix
- '''
- def setup_loader_modules(self):
- return {zabbix_template: {}}
- @patch('salt.states.zabbix_template.CHANGE_STACK', [])
- def test_present_create(self):
- '''
- Test to ensure that named template is created
- '''
- name = 'A Testing Template'
- ret = {'name': name, 'result': False, 'comment': '', 'changes': {}}
- def side_effect_run_query(*args):
- '''
- Differentiate between __salt__ exec module function calls with different parameters.
- '''
- if args[0] == 'template.get':
- return []
- elif args[0] == 'template.create':
- return {'templateids': ['10206']}
- elif args[0] == 'application.get':
- return []
- elif args[0] == 'application.create':
- return {"applicationids": ["701"]}
- with patch.dict(zabbix_template.__opts__, {'test': False}):
- with patch.dict(zabbix_template.__salt__,
- {'zabbix.get_zabbix_id_mapper': MagicMock(return_value={'template': 'templateid'}),
- 'zabbix.substitute_params': MagicMock(side_effect=SUBSTITUTE_PARAMS_CREATE),
- 'zabbix.run_query': MagicMock(side_effect=side_effect_run_query),
- 'zabbix.compare_params': MagicMock(return_value={})}):
- ret['result'] = True
- ret['comment'] = 'Zabbix Template "{0}" created.'.format(name)
- ret['changes'] = {name: {'old': 'Zabbix Template "{0}" did not exist.'.format(name),
- 'new': 'Zabbix Template "{0}" created according definition.'.format(name)}}
- self.assertDictEqual(zabbix_template.present(name, {}), ret)
- @patch('salt.states.zabbix_template.CHANGE_STACK', [])
- def test_present_exists(self):
- '''
- Test to ensure that named template is present and not changed
- '''
- name = 'A Testing Template'
- ret = {'name': name, 'result': False, 'comment': '', 'changes': {}}
- def side_effect_run_query(*args):
- '''
- Differentiate between __salt__ exec module function calls with different parameters.
- '''
- if args[0] == 'template.get':
- return EXISTING_OBJ
- elif args[0] == 'application.get':
- return ['non-empty']
- with patch.dict(zabbix_template.__opts__, {'test': False}):
- with patch.dict(zabbix_template.__salt__,
- {'zabbix.get_zabbix_id_mapper': MagicMock(return_value={'template': 'templateid'}),
- 'zabbix.substitute_params': MagicMock(side_effect=SUBSTITUTE_PARAMS_EXISTS),
- 'zabbix.run_query': MagicMock(side_effect=side_effect_run_query),
- 'zabbix.compare_params': MagicMock(return_value={'new': {}, 'old': {}})}):
- ret['result'] = True
- ret['comment'] = 'Zabbix Template "{0}" already exists and corresponds to a definition.'.format(name)
- self.assertDictEqual(zabbix_template.present(name, {}), ret)
- @patch('salt.states.zabbix_template.CHANGE_STACK', [])
- def test_present_update(self):
- '''
- Test to ensure that named template is present but must be updated
- '''
- name = 'A Testing Template'
- ret = {'name': name, 'result': False, 'comment': '', 'changes': {}}
- def side_effect_run_query(*args):
- '''
- Differentiate between __salt__ exec module function calls with different parameters.
- '''
- if args[0] == 'template.get':
- return ['length of result is 1 = template exists']
- elif args[0] == 'template.update':
- return DIFF_PARAMS
- with patch.dict(zabbix_template.__opts__, {'test': False}):
- with patch.dict(zabbix_template.__salt__,
- {'zabbix.get_zabbix_id_mapper': MagicMock(return_value={'template': 'templateid'}),
- 'zabbix.substitute_params': MagicMock(side_effect=SUBSTITUTE_PARAMS_UPDATE),
- 'zabbix.run_query': MagicMock(side_effect=side_effect_run_query),
- 'zabbix.compare_params': MagicMock(return_value=DIFF_PARAMS)}):
- ret['result'] = True
- ret['comment'] = 'Zabbix Template "{0}" updated.'.format(name)
- ret['changes'] = {name: {'old': 'Zabbix Template "{0}" differed.'.format(name),
- 'new': 'Zabbix Template "{0}" updated according definition.'.format(name)}}
- self.assertDictEqual(zabbix_template.present(name, {}), ret)
- def test_absent_test_mode(self):
- '''
- Test to ensure that named template is absent in test mode
- '''
- name = 'A Testing Template'
- ret = {'name': name, 'result': False, 'comment': '', 'changes': {}}
- with patch.dict(zabbix_template.__opts__, {'test': True}):
- with patch.dict(zabbix_template.__salt__, {'zabbix.get_object_id_by_params': MagicMock(return_value=11)}):
- ret['result'] = True
- ret['comment'] = 'Zabbix Template "{0}" would be deleted.'.format(name)
- ret['changes'] = {name: {'old': 'Zabbix Template "{0}" exists.'.format(name),
- 'new': 'Zabbix Template "{0}" would be deleted.'.format(name)}}
- self.assertDictEqual(zabbix_template.absent(name), ret)
- def test_absent(self):
- '''
- Test to ensure that named template is absent
- '''
- name = 'A Testing Template'
- ret = {'name': name, 'result': False, 'comment': '', 'changes': {}}
- with patch.dict(zabbix_template.__opts__, {'test': False}):
- with patch.dict(zabbix_template.__salt__,
- {'zabbix.get_object_id_by_params': MagicMock(return_value=False)}):
- ret['result'] = True
- ret['comment'] = 'Zabbix Template "{0}" does not exist.'.format(name)
- self.assertDictEqual(zabbix_template.absent(name), ret)
- with patch.dict(zabbix_template.__salt__, {'zabbix.get_object_id_by_params': MagicMock(return_value=11)}):
- with patch.dict(zabbix_template.__salt__, {'zabbix.run_query': MagicMock(return_value=True)}):
- ret['result'] = True
- ret['comment'] = 'Zabbix Template "{0}" deleted.'.format(name)
- ret['changes'] = {name: {'old': 'Zabbix Template "{0}" existed.'.format(name),
- 'new': 'Zabbix Template "{0}" deleted.'.format(name)}}
- self.assertDictEqual(zabbix_template.absent(name), ret)
|