From 1c066d478bde9025ebd64c9640922564b83b45ca Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Mon, 3 Jul 2017 12:13:18 -0400 Subject: [PATCH] substitute "$encrypted$" for actual password on logging config test see: #6780 --- awx/conf/views.py | 6 ++++++ .../tests/functional/api/test_settings.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/awx/conf/views.py b/awx/conf/views.py index ecb465e69b..b1b6699e8f 100644 --- a/awx/conf/views.py +++ b/awx/conf/views.py @@ -161,6 +161,12 @@ class SettingLoggingTest(GenericAPIView): obj = type('Settings', (object,), defaults)() serializer = self.get_serializer(obj, data=request.data) serializer.is_valid(raise_exception=True) + + if request.data.get('LOG_AGGREGATOR_PASSWORD', '').startswith('$encrypted$'): + serializer.validated_data['LOG_AGGREGATOR_PASSWORD'] = getattr( + settings, 'LOG_AGGREGATOR_PASSWORD', '' + ) + try: class MockSettings: pass diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index 7eb993c57c..0eb21711fc 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -222,6 +222,25 @@ def test_logging_aggregrator_connection_test_valid(mocker, get, post, admin): assert getattr(create_settings, k) == v +@pytest.mark.django_db +def test_logging_aggregrator_connection_test_with_masked_password(mocker, patch, post, admin): + url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'logging'}) + patch(url, user=admin, data={'LOG_AGGREGATOR_PASSWORD': 'password123'}, expect=200) + + with mock.patch.object(BaseHTTPSHandler, 'perform_test') as perform_test: + url = reverse('api:setting_logging_test') + user_data = { + 'LOG_AGGREGATOR_TYPE': 'logstash', + 'LOG_AGGREGATOR_HOST': 'localhost', + 'LOG_AGGREGATOR_PORT': 8080, + 'LOG_AGGREGATOR_USERNAME': 'logger', + 'LOG_AGGREGATOR_PASSWORD': '$encrypted$' + } + post(url, user_data, user=admin, expect=200) + create_settings = perform_test.call_args[0][0] + assert getattr(create_settings, 'LOG_AGGREGATOR_PASSWORD') == 'password123' + + @pytest.mark.django_db def test_logging_aggregrator_connection_test_invalid(mocker, get, post, admin): with mock.patch.object(BaseHTTPSHandler, 'perform_test') as perform_test: