From c1ff41fa4572af7871d73c3e3d9499300cc3b55d Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Wed, 28 Jun 2017 14:17:46 -0400 Subject: [PATCH] get logging test endpoint to work again The handler and formatter classes are expecting an object and the previous method passed a dict, so this change converts the data into a mock settings object. --- awx/conf/views.py | 7 +++++- .../tests/functional/api/test_settings.py | 23 ++++++------------- awx/main/utils/formatters.py | 2 +- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/awx/conf/views.py b/awx/conf/views.py index fccb910774..c9440617c2 100644 --- a/awx/conf/views.py +++ b/awx/conf/views.py @@ -152,7 +152,12 @@ class SettingLoggingTest(GenericAPIView): serializer = self.get_serializer(obj, data=request.data) serializer.is_valid(raise_exception=True) try: - BaseHTTPSHandler.perform_test(serializer.validated_data) + class MockSettings: + pass + mock_settings = MockSettings() + for k, v in serializer.validated_data.items(): + setattr(mock_settings, k, v) + BaseHTTPSHandler.perform_test(mock_settings) except LoggingConnectivityException as e: return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_200_OK) diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index b483c5223b..7eb993c57c 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -2,7 +2,6 @@ # All Rights Reserved. # Python -from collections import OrderedDict import pytest import os @@ -209,26 +208,18 @@ def test_logging_aggregrator_connection_test_bad_request(get, post, admin, key): def test_logging_aggregrator_connection_test_valid(mocker, get, post, admin): with mock.patch.object(BaseHTTPSHandler, 'perform_test') as perform_test: url = reverse('api:setting_logging_test') - post(url, { + user_data = { 'LOG_AGGREGATOR_TYPE': 'logstash', 'LOG_AGGREGATOR_HOST': 'localhost', 'LOG_AGGREGATOR_PORT': 8080, 'LOG_AGGREGATOR_USERNAME': 'logger', 'LOG_AGGREGATOR_PASSWORD': 'mcstash' - }, user=admin, expect=200) - perform_test.assert_called_with(OrderedDict([ - ('LOG_AGGREGATOR_HOST', u'localhost'), - ('LOG_AGGREGATOR_PORT', 8080), - ('LOG_AGGREGATOR_TYPE', 'logstash'), - ('LOG_AGGREGATOR_USERNAME', 'logger'), - ('LOG_AGGREGATOR_PASSWORD', 'mcstash'), - ('LOG_AGGREGATOR_LOGGERS', ['awx', 'activity_stream', 'job_events', 'system_tracking']), - ('LOG_AGGREGATOR_INDIVIDUAL_FACTS', False), - ('LOG_AGGREGATOR_ENABLED', False), - ('LOG_AGGREGATOR_TOWER_UUID', ''), - ('LOG_AGGREGATOR_PROTOCOL', 'https'), - ('LOG_AGGREGATOR_TCP_TIMEOUT', 5), - ])) + } + post(url, user_data, user=admin, expect=200) + create_settings = perform_test.call_args[0][0] + for k, v in user_data.items(): + assert hasattr(create_settings, k) + assert getattr(create_settings, k) == v @pytest.mark.django_db diff --git a/awx/main/utils/formatters.py b/awx/main/utils/formatters.py index 8e34e77818..579f1e2ba1 100644 --- a/awx/main/utils/formatters.py +++ b/awx/main/utils/formatters.py @@ -22,7 +22,7 @@ class LogstashFormatter(LogstashFormatterVersion1): settings_module = kwargs.pop('settings_module', None) ret = super(LogstashFormatter, self).__init__(**kwargs) if settings_module: - self.host_id = settings_module.CLUSTER_HOST_ID + self.host_id = getattr(settings_module, 'CLUSTER_HOST_ID', None) if hasattr(settings_module, 'LOG_AGGREGATOR_TOWER_UUID'): self.tower_uuid = settings_module.LOG_AGGREGATOR_TOWER_UUID self.message_type = getattr(settings_module, 'LOG_AGGREGATOR_TYPE', 'other')