From b017133cc6bc10cb39cdb287820bd1b67d1dfa04 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Fri, 24 Mar 2017 17:28:16 -0400 Subject: [PATCH] Make QSS validation errors more descriptive --- .../validators/test/test_validate_secscan.py | 11 +++++------ util/secscan/api.py | 15 +++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/util/config/validators/test/test_validate_secscan.py b/util/config/validators/test/test_validate_secscan.py index e47aa9bf5..0c484c250 100644 --- a/util/config/validators/test/test_validate_secscan.py +++ b/util/config/validators/test/test_validate_secscan.py @@ -11,26 +11,25 @@ def test_validate_noop(unvalidated_config, app): SecurityScannerValidator.validate(unvalidated_config, None, None) -@pytest.mark.parametrize('unvalidated_config, expected_error, error_message', [ +@pytest.mark.parametrize('unvalidated_config, expected_error', [ ({ 'TESTING': True, 'DISTRIBUTED_STORAGE_PREFERENCE': [], 'FEATURE_SECURITY_SCANNER': True, 'SECURITY_SCANNER_ENDPOINT': 'http://invalidhost', - }, Exception, 'Connection error when trying to connect to security scanner endpoint'), + }, Exception), ({ 'TESTING': True, 'DISTRIBUTED_STORAGE_PREFERENCE': [], 'FEATURE_SECURITY_SCANNER': True, 'SECURITY_SCANNER_ENDPOINT': 'http://fakesecurityscanner', - }, None, None), + }, None), ]) -def test_validate(unvalidated_config, expected_error, error_message, app): +def test_validate(unvalidated_config, expected_error, app): with fake_security_scanner(hostname='fakesecurityscanner'): if expected_error is not None: - with pytest.raises(expected_error) as ipe: + with pytest.raises(expected_error): SecurityScannerValidator.validate(unvalidated_config, None, None) - assert ipe.value.message == error_message else: SecurityScannerValidator.validate(unvalidated_config, None, None) diff --git a/util/secscan/api.py b/util/secscan/api.py index f90b3ba37..e53c61646 100644 --- a/util/secscan/api.py +++ b/util/secscan/api.py @@ -166,15 +166,18 @@ class SecurityScannerAPI(object): """ try: return self._call('GET', _API_METHOD_PING) - except requests.exceptions.Timeout: + except requests.exceptions.Timeout as tie: logger.exception('Timeout when trying to connect to security scanner endpoint') - raise Exception('Timeout when trying to connect to security scanner endpoint') - except requests.exceptions.ConnectionError: + msg = 'Timeout when trying to connect to security scanner endpoint: %s' % tie.message + raise Exception(msg) + except requests.exceptions.ConnectionError as ce: logger.exception('Connection error when trying to connect to security scanner endpoint') - raise Exception('Connection error when trying to connect to security scanner endpoint') - except (requests.exceptions.RequestException, ValueError): + msg = 'Connection error when trying to connect to security scanner endpoint: %s' % ce.message + raise Exception(msg) + except (requests.exceptions.RequestException, ValueError) as ve: logger.exception('Exception when trying to connect to security scanner endpoint') - raise Exception('Exception when trying to connect to security scanner endpoint') + msg = 'Exception when trying to connect to security scanner endpoint: %s' % ve + raise Exception(msg) def delete_layer(self, layer): """ Calls DELETE on the given layer in the security scanner, removing it from