Skip to content

Commit

Permalink
Correctif pour étiquette "Non disponible" incorrecte sur le flux SIRI…
Browse files Browse the repository at this point in the history
… de Boulogne (#4284)

* Properly report Boulogne SIRI availability

Fixes #4283

* Add extra test

* Update doc
  • Loading branch information
thbar authored Nov 12, 2024
1 parent f24f1e5 commit 42eaded
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 2 deletions.
6 changes: 6 additions & 0 deletions apps/transport/lib/transport/availability_checker.ex
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ defmodule Transport.AvailabilityChecker do
{:ok, %Response{status_code: code}} when (code >= 200 and code < 300) or code in [401, 405] ->
true

# At least one SIRI server returns a 500 despite being reachable and returning proper SOAP.
# Accept it, until we implement the better `CheckStatus` SIRI availability check.
# https://github.com/etalab/transport-site/issues/4283
{:ok, %Response{status_code: 500, body: body}} ->
body |> String.downcase() |> String.contains?("soap:envelope")

# Bug affecting Hackney (dependency of HTTPoison)
# 303 status codes on `GET` requests should be fine but they're returned as errors
# https://github.com/edgurgel/httpoison/issues/171#issuecomment-244029927
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ msgstr ""

#, elixir-autogen, elixir-format
msgid "availability-test-explanations"
msgstr "We test this resource download availability every hour by making an HTTP <code class=\"inline\">HEAD</code> request with a timeout of 5 seconds. If we detect a downtime, we perform subsequent tests every 10 minutes, until the resource is back online.<br><br>For SIRI and SIRI Lite feeds, we perform a <code class=\"inline\">GET</code> request: a 401 or 405 status code is considered successful."
msgstr "We test this resource download availability every hour by making an HTTP <code class=\"inline\">HEAD</code> request with a timeout of 5 seconds. If we detect a downtime, we perform subsequent tests every 10 minutes, until the resource is back online.<br><br>For SIRI and SIRI Lite feeds, we perform a <code class=\"inline\">GET</code> request: a 401 or 405 status code is considered successful. In case of HTTP 500, the feed will be considered unavailable, unless the body appears to contain SOAP."

#, elixir-autogen, elixir-format
msgid "last content modification"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ msgstr "En savoir plus"

#, elixir-autogen, elixir-format
msgid "availability-test-explanations"
msgstr "Nous testons la disponibilité de cette ressource au téléchargement toutes les heures, en effectuant une requête HTTP de type <code class=\"inline\">HEAD</code> dont le temps de réponse doit être inférieur à 5 secondes. Si nous détectons une indisponibilité, nous effectuons un nouveau test toutes les 10 minutes, jusqu'à ce que la ressource soit à nouveau disponible.<br><br>Pour les flux SIRI et SIRI Lite, nous effectuons une requête HTTP de type <code class=\"inline\">GET</code> : nous considérons une réponse avec un code 401 ou 405 comme étant disponible."
msgstr "Nous testons la disponibilité de cette ressource au téléchargement toutes les heures, en effectuant une requête HTTP de type <code class=\"inline\">HEAD</code> dont le temps de réponse doit être inférieur à 5 secondes. Si nous détectons une indisponibilité, nous effectuons un nouveau test toutes les 10 minutes, jusqu'à ce que la ressource soit à nouveau disponible.<br><br>Pour les flux SIRI et SIRI Lite, nous effectuons une requête HTTP de type <code class=\"inline\">GET</code> : nous considérons une réponse avec un code 401 ou 405 comme étant disponible. En cas d'erreur 500, nous considèrerons que le flux est indisponible, sauf si il semble contenir du SOAP."

#, elixir-autogen, elixir-format
msgid "last content modification"
Expand Down
18 changes: 18 additions & 0 deletions apps/transport/test/transport/availability_checker_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,24 @@ defmodule Transport.AvailabilityCheckerTest do

assert AvailabilityChecker.available?("SIRI", "url303")
end

test "500 response (regular)" do
Transport.HTTPoison.Mock
|> expect(:get, fn "url500", [], [follow_redirect: true] ->
{:ok, %HTTPoison.Response{status_code: 500, body: "utter failure"}}
end)

refute AvailabilityChecker.available?("SIRI", "url500")
end

test "500 response (but with SOAP body)" do
Transport.HTTPoison.Mock
|> expect(:get, fn "url500soap", [], [follow_redirect: true] ->
{:ok, %HTTPoison.Response{status_code: 500, body: "<soap:Envelope></soap:Envelope>"}}
end)

assert AvailabilityChecker.available?("SIRI", "url500soap")
end
end

test "HEAD NOT supported, fallback on stream method" do
Expand Down

0 comments on commit 42eaded

Please sign in to comment.