|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +"""Tests for `iib_metrics_client`.""" |
| 3 | +import os |
| 4 | +import sys |
| 5 | +import unittest |
| 6 | +try: |
| 7 | + from unittest.mock import patch |
| 8 | +except ImportError: |
| 9 | + from mock import patch |
| 10 | +from iib_metrics_client import ( |
| 11 | + main, |
| 12 | + put_metric_to_gateway, |
| 13 | + static_content, |
| 14 | + PrometheusBadResponse) |
| 15 | +sys.path.append(os.getcwd()) |
| 16 | + |
| 17 | + |
| 18 | +class MockFunction(): |
| 19 | + @staticmethod |
| 20 | + def mock_logging_info(msg): |
| 21 | + """Mock for `logger.info` function.""" |
| 22 | + pass |
| 23 | + |
| 24 | + @staticmethod |
| 25 | + def mock_run_iib_command(**kwargs): |
| 26 | + """Mock for `run_iib_command` function.""" |
| 27 | + return 'OK' |
| 28 | + |
| 29 | + @staticmethod |
| 30 | + def mock_put_metric_to_gateway(metric_data, job): |
| 31 | + """Mock for `put_metric_to_gateway` function.""" |
| 32 | + pass |
| 33 | + |
| 34 | + |
| 35 | +class TestMain(unittest.TestCase): |
| 36 | + Mocked = MockFunction() |
| 37 | + @patch('iib_metrics_client.logger.info', side_effect=Mocked.mock_logging_info) |
| 38 | + @patch('iib_metrics_client.run_iib_command', side_effect=Mocked.mock_run_iib_command) |
| 39 | + @patch('iib_metrics_client.put_metric_to_gateway', side_efgect=Mocked.mock_put_metric_to_gateway) |
| 40 | + def test_main(self, |
| 41 | + mock_logging_info, |
| 42 | + mock_run_iib_command, |
| 43 | + mock_put_metric_to_gateway): |
| 44 | + """Tests for `main` function.""" |
| 45 | + with patch('iib_metrics_client.get_brokers_status') as mock_get_brokers_status: |
| 46 | + mock_get_brokers_status.return_value = [['TEST', 'running.', 'TEST']] |
| 47 | + self.assertEqual(main(), None) |
| 48 | + mock_get_brokers_status.return_value = [['TEST', 'stopped.', 'TEST']] |
| 49 | + self.assertEqual(main(), None) |
| 50 | + |
| 51 | + @patch('iib_metrics_client.logger.info', side_effect=Mocked.mock_logging_info) |
| 52 | + @patch('iib_metrics_client.logger.error', side_effect=Exception()) |
| 53 | + def test_main_exception(self, mock_logging_info, mock_logging_error): |
| 54 | + """Test for `main` function for exceptions.""" |
| 55 | + with patch('iib_metrics_client.run_iib_command') as mock_iib_command: |
| 56 | + mock_iib_command.side_effect = PrometheusBadResponse |
| 57 | + self.assertRaises(Exception, main) |
| 58 | + mock_iib_command.side_effect = Exception() |
| 59 | + self.assertRaises(Exception, main) |
| 60 | + |
| 61 | + |
| 62 | +class TestPutMetricToGateway(unittest.TestCase): |
| 63 | + Mocked = MockFunction() |
| 64 | + @patch('iib_metrics_client.logger.info', side_effect=Mocked.mock_logging_info) |
| 65 | + def test_put_metric_to_gateway(self, mock_logging_info): |
| 66 | + """Tests for `put_metric_to_gateway` function.""" |
| 67 | + with patch('iib_metrics_client.requests.put') as mock_request: |
| 68 | + mock_request.return_value.ok = True |
| 69 | + self.assertEqual(put_metric_to_gateway(metric_data='', job='TEST'), None) |
| 70 | + mock_request.return_value.ok = False |
| 71 | + self.assertRaises(PrometheusBadResponse, put_metric_to_gateway, metric_data='', job='TEST') |
| 72 | + |
| 73 | + @patch('iib_metrics_client.logger.info', side_effect=Mocked.mock_logging_info) |
| 74 | + def test_put_metric_to_gateway_except(self, mock_logging_info): |
| 75 | + """Test for `put_metric_to_gateway` function for `ConnectionError` exceptions.""" |
| 76 | + self.assertRaises(PrometheusBadResponse, put_metric_to_gateway, metric_data='', job='TEST') |
| 77 | + |
| 78 | + |
| 79 | +class TestStaticContent(unittest.TestCase): |
| 80 | + def test_static_content(self): |
| 81 | + """Test for `static_content` function.""" |
| 82 | + self.assertIsInstance(static_content(), str) |
| 83 | + |
| 84 | + |
| 85 | +if __name__ == '__main__': |
| 86 | + unittest.main() |
0 commit comments