Skip to content

Commit 287b737

Browse files
authored
Ensure that preview, thumbnail lambdas handle Glacier-style 403s (#1789)
1 parent 0335462 commit 287b737

File tree

6 files changed

+58
-9
lines changed

6 files changed

+58
-9
lines changed

lambdas/preview/index.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,13 @@ def lambda_handler(request):
153153
'info': info,
154154
'html': html,
155155
}
156-
157156
else:
158157
ret_val = {
159-
'error': resp.reason
158+
'error': resp.reason,
159+
'text': resp.text,
160160
}
161-
return make_json_response(200, ret_val)
161+
162+
return make_json_response(resp.status_code, ret_val)
162163

163164

164165
def extract_csv(head, separator):

lambdas/preview/test/test_index.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
import os
66
from pathlib import Path
77
import re
8+
from unittest.mock import ANY, patch
89

910
import pyarrow.parquet as pq
1011
import responses
11-
from unittest.mock import ANY, patch
12-
1312

1413
from t4_lambda_shared.utils import read_body
1514
from .. import index
@@ -41,6 +40,22 @@ def _make_event(cls, query, headers=None):
4140
'isBase64Encoded': False,
4241
}
4342

43+
@responses.activate
44+
def test_403(self):
45+
"""test 403 cases, such as Glacier"""
46+
url = self.FILE_URL
47+
responses.add(
48+
responses.GET,
49+
url=url,
50+
status=403,
51+
)
52+
event = self._make_event({'url': url, 'input': 'txt'})
53+
response = index.lambda_handler(event, None)
54+
assert response["statusCode"] == 403
55+
body = json.loads(response["body"])
56+
assert "text" in body
57+
assert "error" in body
58+
4459
@responses.activate
4560
def test_fcs(self):
4661
"""test fcs extraction

lambdas/thumbnail/index.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ def lambda_handler(request):
342342

343343
# Errored, return error code
344344
ret_val = {
345-
'error': resp.reason
345+
'error': resp.reason,
346+
'text': resp.text,
346347
}
347348
return make_json_response(resp.status_code, ret_val)

lambdas/thumbnail/requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ pdf2image==1.13.1
1010
Pillow==6.2.2
1111
psutil==5.7.0
1212
pyrsistent==0.14.11
13-
requests==2.21.0
13+
requests==2.24.0
1414
scipy==1.3.0
1515
tifffile==0.15.1
1616
six==1.12.0
17-
urllib3==1.24.2
17+
urllib3==1.25.10

lambdas/thumbnail/test-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ py==1.8.0
55
pytest==4.3.0
66
pytest-cov==2.6.1
77
pytest-raises==0.10
8-
responses==0.10.5
8+
responses==0.12.0

lambdas/thumbnail/tests/test_thumbnail.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@
1616
from ..index import lambda_handler, set_pdf_env
1717

1818

19+
HEADER_403 = {
20+
'x-amz-request-id': 'guid123',
21+
'x-amz-id-2': 'some/dat/here/+xxxxx+=',
22+
'Content-Type': 'application/xml',
23+
'Transfer-Encoding': 'chunked',
24+
'Date': 'Tue, 08 Sep 2020 00:01:06 GMT',
25+
'Server': 'AmazonS3'
26+
}
27+
28+
1929
@pytest.fixture
2030
def data_dir():
2131
return Path(__file__).parent / 'data'
@@ -33,6 +43,28 @@ def _make_event(query, headers=None):
3343
}
3444

3545

46+
@responses.activate
47+
def test_403():
48+
"""test 403 cases, such as Glacier"""
49+
url = "https://example.com/folder/file.ext"
50+
responses.add(
51+
responses.GET,
52+
url=url,
53+
status=403,
54+
headers=HEADER_403,
55+
)
56+
params = {
57+
"size": "w32h32"
58+
}
59+
event = _make_event({"url": url, **params})
60+
# Get the response
61+
response = lambda_handler(event, None)
62+
assert response["statusCode"] == 403
63+
body = json.loads(response["body"])
64+
assert "text" in body
65+
assert "error" in body
66+
67+
3668
@patch.dict(os.environ, {
3769
'LAMBDA_TASK_ROOT': str(Path('/var/task')),
3870
# need the real OS path so that we can find pdftoppm, but patch to avoid side-effects

0 commit comments

Comments
 (0)