def test_login_not_required_with_authorization_header_dashes_in_token(self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get('/', HTTP_AUTHORIZATION='WATCHMAN-TOKEN Token="123-456-ABCD"') response = views.status(request) self.assertEqual(response.status_code, 200)
def test_response_version_header(self): # Have to manually reload settings here because override_settings # happens after self.setUp() reload_settings() request = RequestFactory().get('/') response = views.status(request) self.assertTrue(response.has_header('X-Watchman-Version'))
def test_login_fails_with_invalid_authorization_header(self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get('/', HTTP_AUTHORIZATION='WATCHMAN-TOKEN Token="12345"') response = views.status(request) self.assertEqual(response.status_code, 403)
def health_check_status(request): """Modify django-watchman view to remove error / stacktrace output. Available django-watchman views: watchman.views.status watchman.views.bare_status """ # if health endpoint not enabled, return 404 response if not settings.ENABLE_HEALTHZ_ENDPOINT: raise Http404("Healthz endpoint not enabled.") # set anonymous user for requests to health endpoint # caluma expects user to be set on requests request.user = AnonymousUser() # Get view response from django-watchman response = watchman_views.status(request) json_data = json.loads(response.content.decode("utf-8")) # Remove unwanted keys e.g. 'error', 'stacktrace' if response.status_code == watchman_settings.WATCHMAN_ERROR_CODE: _remove_keys(json_data, ["error", "stacktrace"]) return JsonResponse(json_data, status=response.status_code) return response
def test_login_fails_with_invalid_authorization_header(self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get( '/', HTTP_AUTHORIZATION='WATCHMAN-TOKEN Token="12345"') response = views.status(request) self.assertEqual(response.status_code, 403)
def test_login_not_required_with_authorization_header_dashes_in_token( self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get( '/', HTTP_AUTHORIZATION='WATCHMAN-TOKEN Token="123-456-ABCD"') response = views.status(request) self.assertEqual(response.status_code, 200)
def test_version_header_not_included_when_token_auth_fails(self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get('/') response = views.status(request) self.assertEqual(response.status_code, 403) self.assertFalse(response.has_header('X-Watchman-Version'))
def test_response_when_login_required(self): # Have to manually reload settings here because override_settings # happens after self.setUp() reload_settings() request = RequestFactory().get('/') request.user = AuthenticatedUser() response = views.status(request) self.assertEqual(response.status_code, 200)
def test_response_is_404_for_checked_and_skipped_check(self): # This is a bit of a weird one, basically if you explicitly include and # skip the same check, you should get back a 404 as they cancel each # other out request = RequestFactory().get('/', data={ 'check': 'watchman.checks.email', 'skip': 'watchman.checks.email', }) response = views.status(request) self.assertEqual(response.status_code, 404)
def test_response_contains_expected_checks(self): expected_checks = ['caches', 'databases', 'storage', ] request = RequestFactory().get('/') response = views.status(request) if PYTHON_VERSION == 2: content = json.loads(response.content) self.assertItemsEqual(expected_checks, content.keys()) else: content = json.loads(response.content.decode('utf-8')) self.assertCountEqual(expected_checks, content.keys())
def test_response_contains_expected_checks(self): expected_checks = [ 'caches', 'databases', 'storage', ] request = RequestFactory().get('/') response = views.status(request) content = json.loads(response.content.decode('utf-8')) self.assertCountEqual(expected_checks, content.keys())
def test_login_fails_with_invalid_get_param(self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get('/', data={ 'watchman-token': '12345', }) response = views.status(request) self.assertEqual(response.status_code, 403)
def test_login_not_required(self): # Have to manually reload settings here because override_settings # happens after self.setUp(), but before self.tearDown() reload_settings() request = RequestFactory().get('/', data={ 'watchman-token': 'ABCDE', }) response = views.status(request) self.assertEqual(response.status_code, 200)
def test_response_only_single_check(self, patched_check_databases): patched_check_databases.return_value = [] request = RequestFactory().get('/', data={ 'check': 'watchman.checks.databases', }) response = views.status(request) self.assertEqual(response.status_code, 200) content = json.loads(response.content.decode('utf-8')) self.assertCountEqual({'databases': []}, content)
def test_response_404_when_none_specified(self): request = RequestFactory().get('/', data={ 'check': '', }) response = views.status(request) self.assertEqual(response.status_code, 404) content = json.loads(response.content.decode('utf-8')) self.assertCountEqual({ 'message': 'No checks found', 'error': 404 }, content)
def test_response_skipped_checks(self): expected_checks = [ 'caches', 'storage', ] request = RequestFactory().get('/', data={ 'skip': 'watchman.checks.databases', }) response = views.status(request) content = json.loads(response.content.decode('utf-8')) self.assertCountEqual(expected_checks, content.keys())
def test_response_skipped_checks(self): expected_checks = ['caches', 'storage', 'elastics', ] request = RequestFactory().get('/', data={ 'skip': 'watchman.checks.databases', }) response = views.status(request) if PYTHON_VERSION == 2: content = json.loads(response.content) self.assertItemsEqual(expected_checks, content.keys()) else: content = json.loads(response.content.decode('utf-8')) self.assertCountEqual(expected_checks, content.keys())
def test_response_404_when_none_specified(self): request = RequestFactory().get('/', data={ 'check': '', }) response = views.status(request) self.assertEqual(response.status_code, 404) if PYTHON_VERSION == 2: content = json.loads(response.content) self.assertItemsEqual({'message': 'No checks found', 'error': 404}, content) else: content = json.loads(response.content.decode('utf-8')) self.assertCountEqual({'message': 'No checks found', 'error': 404}, content)
def test_response_only_single_check(self, patched_check_databases): patched_check_databases.return_value = [] request = RequestFactory().get('/', data={ 'check': 'watchman.checks.databases', }) response = views.status(request) self.assertEqual(response.status_code, 200) if PYTHON_VERSION == 2: content = json.loads(response.content) self.assertItemsEqual({'databases': []}, content) else: content = json.loads(response.content.decode('utf-8')) self.assertCountEqual({'databases': []}, content)
def test_default_error_code(self, patched_check_databases): reload_settings() # Fake a DB error, ensure we get our error code patched_check_databases.return_value = [{ "foo": { "ok": False, "error": "Fake DB Error", "stacktrace": "Fake DB Stack Trace", }, }] request = RequestFactory().get('/', data={ 'check': 'watchman.checks.databases', }) response = views.status(request) self.assertEqual(response.status_code, 500)
def test_response_contains_expected_checks(self): expected_checks = [ 'caches', 'databases', 'storage', 'elastics', ] request = RequestFactory().get('/') response = views.status(request) if PYTHON_VERSION == 2: content = json.loads(response.content) self.assertItemsEqual(expected_checks, content.keys()) else: content = json.loads(response.content.decode('utf-8')) self.assertCountEqual(expected_checks, content.keys())
def test_response_content_type_json(self, patched_check_databases): patched_check_databases.return_value = [] response = views.status("") self.assertEqual(response["Content-Type"], "application/json")
def test_response_version_header(self): request = RequestFactory().get('/') response = views.status(request) self.assertTrue(response.has_header('X-Watchman-Version'))
def test_response_version_header_missing_by_default(self): request = RequestFactory().get('/') response = views.status(request) self.assertFalse(response.has_header('X-Watchman-Version'))
def test_response_content_type_json(self): request = RequestFactory().get('/') response = views.status(request) self.assertEqual(response['Content-Type'], 'application/json')
def test_response_contains_expected_checks(self, patched_check_databases): expected_checks = ["caches", "databases"] patched_check_databases.return_value = [] response = views.status("") content = json.loads(response.content) self.assertItemsEqual(expected_checks, content.keys())