Improve exceptions and logging in ds manager
MetricNotAvailable and NoDatasourceAvailable allow to differentiate between having no datasources configured and a required metric being unavailable from the datasource. Both exceptions have comments so that the use case is clear. The input validation of the get_backend method in the datasource manager is improved. Additional logging information allows to identify which metric caused the available datasource to be discarded. Tests are updated to validate the correct functionality of the new exceptions. Change-Id: I512976cce2401dbcd249d42686b78843e111a0e7
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
import mock
|
||||
import six
|
||||
|
||||
from mock import MagicMock
|
||||
|
||||
@@ -38,30 +39,6 @@ class TestDataSourceManager(base.BaseTestCase):
|
||||
opts.update(kwargs)
|
||||
return ds_manager.DataSourceManager(**opts)
|
||||
|
||||
def test_get_backend(self):
|
||||
manager = self._dsm()
|
||||
backend = manager.get_backend(['host_cpu_usage', 'instance_cpu_usage'])
|
||||
self.assertEqual(backend, manager.gnocchi)
|
||||
|
||||
def test_get_backend_order(self):
|
||||
dss = ['monasca', 'ceilometer', 'gnocchi']
|
||||
dsmcfg = self._dsm_config(datasources=dss)
|
||||
manager = self._dsm(config=dsmcfg)
|
||||
backend = manager.get_backend(['host_cpu_usage', 'instance_cpu_usage'])
|
||||
self.assertEqual(backend, manager.monasca)
|
||||
|
||||
def test_get_backend_wrong_metric(self):
|
||||
manager = self._dsm()
|
||||
self.assertRaises(exception.NoSuchMetric, manager.get_backend,
|
||||
['host_cpu', 'instance_cpu_usage'])
|
||||
|
||||
@mock.patch.object(gnocchi, 'GnocchiHelper')
|
||||
def test_get_backend_error_datasource(self, m_gnocchi):
|
||||
m_gnocchi.side_effect = exception.DataSourceNotAvailable
|
||||
manager = self._dsm()
|
||||
backend = manager.get_backend(['host_cpu_usage', 'instance_cpu_usage'])
|
||||
self.assertEqual(backend, manager.ceilometer)
|
||||
|
||||
def test_metric_file_path_not_exists(self):
|
||||
manager = self._dsm()
|
||||
expected = ds_manager.DataSourceManager.metric_map
|
||||
@@ -85,3 +62,45 @@ class TestDataSourceManager(base.BaseTestCase):
|
||||
mo.return_value = {"newds": {"metric_one": "i_am_metric_one"}}
|
||||
mgr = self._dsm()
|
||||
self.assertNotIn('newds', mgr.metric_map.keys())
|
||||
|
||||
def test_get_backend(self):
|
||||
manager = self._dsm()
|
||||
backend = manager.get_backend(['host_cpu_usage', 'instance_cpu_usage'])
|
||||
self.assertEqual(backend, manager.gnocchi)
|
||||
|
||||
def test_get_backend_order(self):
|
||||
dss = ['monasca', 'ceilometer', 'gnocchi']
|
||||
dsmcfg = self._dsm_config(datasources=dss)
|
||||
manager = self._dsm(config=dsmcfg)
|
||||
backend = manager.get_backend(['host_cpu_usage', 'instance_cpu_usage'])
|
||||
self.assertEqual(backend, manager.monasca)
|
||||
|
||||
def test_get_backend_wrong_metric(self):
|
||||
manager = self._dsm()
|
||||
ex = self.assertRaises(
|
||||
exception.MetricNotAvailable, manager.get_backend,
|
||||
['host_cpu', 'instance_cpu_usage'])
|
||||
self.assertIn('Metric: host_cpu not available', six.text_type(ex))
|
||||
|
||||
@mock.patch.object(gnocchi, 'GnocchiHelper')
|
||||
def test_get_backend_error_datasource(self, m_gnocchi):
|
||||
m_gnocchi.side_effect = exception.DataSourceNotAvailable
|
||||
manager = self._dsm()
|
||||
backend = manager.get_backend(['host_cpu_usage', 'instance_cpu_usage'])
|
||||
self.assertEqual(backend, manager.ceilometer)
|
||||
|
||||
def test_get_backend_no_datasources(self):
|
||||
dsmcfg = self._dsm_config(datasources=[])
|
||||
manager = self._dsm(config=dsmcfg)
|
||||
self.assertRaises(exception.NoDatasourceAvailable, manager.get_backend,
|
||||
['host_cpu_usage', 'instance_cpu_usage'])
|
||||
dsmcfg = self._dsm_config(datasources=None)
|
||||
manager = self._dsm(config=dsmcfg)
|
||||
self.assertRaises(exception.NoDatasourceAvailable, manager.get_backend,
|
||||
['host_cpu_usage', 'instance_cpu_usage'])
|
||||
|
||||
def test_get_backend_no_metrics(self):
|
||||
manager = self._dsm()
|
||||
self.assertRaises(exception.InvalidParameter, manager.get_backend, [])
|
||||
self.assertRaises(exception.InvalidParameter, manager.get_backend,
|
||||
None)
|
||||
|
||||
Reference in New Issue
Block a user