224c56bbcf
http check is not detecting changes when search_pattern was changed but url keeps the same. Add unit test for modify_config Change-Id: I0762e963429ec9e5c7df0d9aef7e9ef1b9b57626
262 lines
12 KiB
Python
262 lines
12 KiB
Python
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP
|
|
|
|
import collections
|
|
import mock
|
|
import unittest
|
|
|
|
import monasca_setup
|
|
import monasca_setup.agent_config
|
|
|
|
DEFAULT_HTTP_CHECK_CONFIG = {
|
|
'init_config': None,
|
|
'instances': [{'built_by': 'HttpCheck',
|
|
'match_pattern': '.*VERSION.*',
|
|
'url': 'http://127.0.0.1:9200',
|
|
'name': 'logging',
|
|
'timeout': '10',
|
|
'collect_response_time': True,
|
|
'use_keystone': False,
|
|
'dimensions': {'service': 'logging'}}]
|
|
}
|
|
|
|
DEFAULT_PROCESS_CHECK_CONFIG = {
|
|
'init_config': None,
|
|
'instances': [{'built_by': 'MonNotification',
|
|
'detailed': True,
|
|
'dimensions': {'component': 'monasca-notification'},
|
|
'exact_match': False,
|
|
'name': 'monasca-notification',
|
|
'search_string': ['monasca-notification']
|
|
}]
|
|
}
|
|
|
|
INPUT_ARGS = collections.namedtuple(
|
|
"InputArgs", ["overwrite", "user", "config_dir", "detection_args",
|
|
"detection_plugins", "dry_run"])
|
|
|
|
|
|
class TestModifyConfig(unittest.TestCase):
|
|
""" Unit tests for modify_config function in monasca_setup/main.py
|
|
More details are documented in:
|
|
monasca-agent/docs/DeveloperDocs/agent_internals.md
|
|
"""
|
|
def setUp(self):
|
|
self._config_data = {}
|
|
|
|
def save_config(self, config_dir, plugin_name, user, data):
|
|
self._config_data = data
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_no_modify_process_check_config(self, mock_read_config,
|
|
mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_PROCESS_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# Add a new process check instance
|
|
same_built_by = DEFAULT_PROCESS_CHECK_CONFIG['instances'][0][
|
|
'built_by']
|
|
same_name = DEFAULT_PROCESS_CHECK_CONFIG['instances'][0][
|
|
'name']
|
|
args, detected_config = self._get_mon_api_check_args_and_config(
|
|
same_built_by, same_name)
|
|
self._check_no_change(args, detected_config)
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_modify_process_check_config(self, mock_read_config,
|
|
mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_PROCESS_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# Add a new process check instance
|
|
built_by = 'MonAPI'
|
|
name = 'monasca-api'
|
|
args, detected_config = self._get_mon_api_check_args_and_config(
|
|
built_by, name)
|
|
expected_value = \
|
|
{'init_config': None,
|
|
'instances': [{'built_by': built_by,
|
|
'detailed': True,
|
|
'dimensions': {'component': 'monasca-api'},
|
|
'exact_match': False,
|
|
'name': name,
|
|
'search_string': ['monasca-api']
|
|
},
|
|
DEFAULT_PROCESS_CHECK_CONFIG['instances'][0]]
|
|
}
|
|
self._check_changes(args, detected_config, expected_value)
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_no_modify_http_check_config(self, mock_read_config,
|
|
mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_HTTP_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# keep url and match_pattern are the same
|
|
same_url = DEFAULT_HTTP_CHECK_CONFIG['instances'][0]['url']
|
|
same_match_pattern = DEFAULT_HTTP_CHECK_CONFIG['instances'][0][
|
|
'match_pattern']
|
|
same_name = DEFAULT_HTTP_CHECK_CONFIG['instances'][0]['name']
|
|
|
|
args, detected_config = self. _get_http_check_args_and_config(
|
|
same_url, same_match_pattern, same_name)
|
|
self._check_no_change(args, detected_config)
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_modify_http_check_config(self, mock_read_config,
|
|
mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_HTTP_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# Change protocol and match_pattern
|
|
url = 'https://127.0.0.1:9200'
|
|
match_pattern = '.*OK.*'
|
|
|
|
args, detected_config = self. _get_http_check_args_and_config(
|
|
url, match_pattern, 'logging')
|
|
expected_value = {'init_config': None,
|
|
'instances':
|
|
[{'built_by': 'HttpCheck',
|
|
'collect_response_time': True,
|
|
'url': url,
|
|
'match_pattern': match_pattern,
|
|
'name': 'logging',
|
|
'timeout': '10',
|
|
'use_keystone': False,
|
|
'dimensions': {'service': 'logging'}}]
|
|
}
|
|
self._check_changes(args, detected_config, expected_value)
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_http_check_endpoint_change(self, mock_read_config,
|
|
mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_HTTP_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# Change only protocol
|
|
new_url = 'https://127.0.0.1:9200'
|
|
same_match_pattern = DEFAULT_HTTP_CHECK_CONFIG['instances'][0][
|
|
'match_pattern']
|
|
same_name = DEFAULT_HTTP_CHECK_CONFIG['instances'][0]['name']
|
|
args, detected_config = self. _get_http_check_args_and_config(
|
|
new_url, same_match_pattern, same_name)
|
|
expected_value = {'init_config': None,
|
|
'instances':
|
|
[{'built_by': 'HttpCheck',
|
|
'collect_response_time': True,
|
|
'url': new_url,
|
|
'match_pattern': same_match_pattern,
|
|
'name': same_name,
|
|
'timeout': '10',
|
|
'use_keystone': False,
|
|
'dimensions': {'service': 'logging'}}]
|
|
}
|
|
self._check_changes(args, detected_config, expected_value)
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_http_check_only_match_pattern(self, mock_read_config,
|
|
mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_HTTP_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# Change only match_pattern
|
|
same_url = DEFAULT_HTTP_CHECK_CONFIG['instances'][0]['url']
|
|
new_match_pattern = '.*TEST.*'
|
|
same_name = DEFAULT_HTTP_CHECK_CONFIG['instances'][0]['name']
|
|
args, detected_config = self. _get_http_check_args_and_config(
|
|
same_url, new_match_pattern, same_name)
|
|
expected_value = {'init_config': None,
|
|
'instances':
|
|
[{'built_by': 'HttpCheck',
|
|
'collect_response_time': True,
|
|
'url': same_url,
|
|
'match_pattern': new_match_pattern,
|
|
'name': same_name,
|
|
'timeout': '10',
|
|
'use_keystone': False,
|
|
'dimensions': {'service': 'logging'}}]
|
|
}
|
|
self._check_changes(args, detected_config, expected_value)
|
|
|
|
@mock.patch('monasca_setup.main.agent_config.save_plugin_config')
|
|
@mock.patch('monasca_setup.main.agent_config.read_plugin_config_from_disk')
|
|
def test_http_check_new_url(self, mock_read_config, mock_save_config):
|
|
mock_read_config.return_value = DEFAULT_HTTP_CHECK_CONFIG
|
|
mock_save_config.side_effect = self.save_config
|
|
|
|
# Pass in a new url
|
|
new_url = 'http://192.168.10.6:8070'
|
|
new_match_pattern = '.*TEST.*'
|
|
new_name = new_url
|
|
args, detected_config = self. _get_http_check_args_and_config(
|
|
new_url, new_match_pattern, new_name)
|
|
expected_value = {'init_config': None,
|
|
'instances':
|
|
[{'built_by': 'HttpCheck',
|
|
'collect_response_time': True,
|
|
'url': new_url,
|
|
'match_pattern': new_match_pattern,
|
|
'name': new_name,
|
|
'timeout': '10',
|
|
'use_keystone': False,
|
|
'dimensions': {'service': 'logging'}},
|
|
DEFAULT_HTTP_CHECK_CONFIG['instances'][0]
|
|
]
|
|
}
|
|
self._check_changes(args, detected_config, expected_value)
|
|
|
|
def _check_no_change(self, args, detected_config):
|
|
changes = monasca_setup.main.modify_config(args, detected_config)
|
|
self.assertEqual(changes, False)
|
|
self.assertEqual(self._config_data, {})
|
|
|
|
def _check_changes(self, args, detected_config, expected_value):
|
|
changes = monasca_setup.main.modify_config(args, detected_config)
|
|
self.assertEqual(changes, True)
|
|
self.assertEqual(expected_value, self._config_data)
|
|
|
|
def _get_mon_api_check_args_and_config(self, built_by, name):
|
|
args = INPUT_ARGS(False, 'mon-agent', '/etc/monasca/agent', None,
|
|
['MonAPI'], False)
|
|
detected_config = {
|
|
'process':
|
|
{'instances': [{'built_by': built_by,
|
|
'detailed': True,
|
|
'dimensions': {
|
|
'component': name},
|
|
'exact_match': False,
|
|
'name': name,
|
|
'search_string': [name]
|
|
}],
|
|
'init_config': None
|
|
}
|
|
}
|
|
return args, detected_config
|
|
|
|
def _get_http_check_args_and_config(self, url, match_pattern, name):
|
|
args = INPUT_ARGS(False, 'mon-agent', '/etc/monasca/agent',
|
|
'url={0} match_pattern={1} name={2} timeout=10 '
|
|
'use_keystone=False'.format(
|
|
url, match_pattern, name),
|
|
['HttpCheck'], False)
|
|
detected_config = {
|
|
'http_check':
|
|
{'instances': [{'name': name,
|
|
'url': url,
|
|
'built_by': 'HttpCheck',
|
|
'use_keystone': False,
|
|
'match_pattern': match_pattern,
|
|
'collect_response_time': True,
|
|
'timeout': '10',
|
|
'dimensions': {'service': 'logging'}
|
|
}],
|
|
'init_config': None
|
|
}
|
|
}
|
|
return args, detected_config
|