greco: raise api error if token are not availables (#51629)

This commit is contained in:
Nicolas Roche 2021-04-13 13:21:12 +02:00
parent 8b80662854
commit 019ed6a61d
2 changed files with 26 additions and 8 deletions

View File

@ -94,7 +94,13 @@ class Greco(BaseResource):
data={'grant_type': 'client_credentials'},
verify=self.verify_cert,
timeout=60,
).json()
)
if resp.status_code >= 400:
raise APIError(
'HTTP Transport Error %s' % resp.status_code,
err_code='transport-error-%s' % resp.status_code,
)
resp = resp.json()
token = '%s %s' % (resp.get('token_type'), resp.get('access_token'))
timeout = int(resp.get('expires_in'))
cache.set(cache_key, token, timeout)

View File

@ -58,6 +58,7 @@ TOKEN = utils.FakedResponse(
status_code=200,
headers={'Content-Type': 'application/json'},
)
RESP_503 = utils.FakedResponse(content='Service Unavailable', status_code=503)
PING = fake_xml_response('ping')
CREATE_OK = fake_xml_response('create_ok')
CREATE_KO = fake_xml_response('create_ko')
@ -125,20 +126,31 @@ def conn():
return connector
@mock.patch('passerelle.utils.Request.post', side_effect=(RESP_503,))
def test_greco_no_api_key(mocked_post, app, conn):
url = reverse('generic-endpoint', kwargs={'connector': 'greco', 'endpoint': 'ping', 'slug': conn.slug})
app.get(url, status=403)
assert mocked_post.call_count == 0
@mock.patch('passerelle.utils.Request.post', side_effect=(RESP_503,))
def test_greco_no_token(mocked_post, app, conn):
url = reverse('generic-endpoint', kwargs={'connector': 'greco', 'endpoint': 'ping', 'slug': conn.slug})
url += '?apikey=grecokey'
resp = app.get(url).json
assert mocked_post.call_count == 1 # token (-> 503)
assert resp['err'] == 'transport-error-503'
def post_effect_503(url, *args, **kwargs):
if url == 'http://greco.example.net/token':
return utils.FakedResponse(
content='{"token_type": "tt", "access_token": "at", "expires_in": "600"}', status_code=200
)
return utils.FakedResponse(content='Service Unavailable', status_code=503)
return TOKEN
return RESP_503
@mock.patch('passerelle.utils.Request.post', side_effect=post_effect_503)
def test_greco_ping(mocked_post, app, conn):
url = reverse('generic-endpoint', kwargs={'connector': 'greco', 'endpoint': 'ping', 'slug': conn.slug})
app.get(url, status=403)
assert mocked_post.call_count == 0
url += '?apikey=grecokey'
resp = app.get(url).json
assert mocked_post.call_count == 2 # token + communcationTest (ping -> 503)