Commit 820787ce authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

return 503 on health endpoint in case of database error

parent 8330f5dd
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ from tempfile import TemporaryDirectory
from unittest.mock import patch

from django.contrib.auth.models import User
from django.db import connection
from django.db import DatabaseError, connection
from django.http import Http404
from django.test import (
    Client,
@@ -24,6 +24,7 @@ from jama.admin_services import cache as cache_services
from jama.admin_services import config as config_services
from jama.admin_services import tasks as task_services
from jama import settings as jama_settings
from jama import views as jama_views
from annotations.models import Annotation
from jama.iiif import serialize_jama_collection
from jama.views import (
@@ -751,6 +752,28 @@ class ApiKeyCsrfMiddlewareTestCase(TestCase):
        self.assertEqual(response.status_code, 403)


class HealthStatusViewTestCase(TestCase):
    def test_status_returns_ok_when_database_is_available(self):
        response = self.client.get("/status")

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content, b"ok")

    def test_status_returns_service_unavailable_on_database_error(self):
        with patch("jama.views.User.objects.first", side_effect=DatabaseError):
            response = self.client.get("/status")

        self.assertEqual(response.status_code, 503)
        self.assertEqual(response.content, b"ko")

    def test_status_does_not_hide_unexpected_errors(self):
        with (
            patch("jama.views.User.objects.first", side_effect=RuntimeError),
            self.assertRaises(RuntimeError),
        ):
            jama_views.status(RequestFactory().get("/status"))


class IiifSerializationTestCase(TestCase):
    def setUp(self):
        self.factory = RequestFactory()
+3 −3
Original line number Diff line number Diff line
from django.http import HttpResponse, HttpRequest
from django.shortcuts import render, get_object_or_404, redirect, Http404
from django.db import DatabaseError
from jama import settings
from django.contrib.auth.models import User
from resources.models import Resource, Collection, File, Project
@@ -55,11 +56,10 @@ def homepage(request: HttpRequest) -> HttpResponse:


def status(request: HttpRequest) -> HttpResponse:
    # testing database connection
    try:
        User.objects.first()
    except:  # noqa: E722
        return HttpResponse("ko")
    except DatabaseError:
        return HttpResponse("ko", status=503)
    return HttpResponse("ok")