Skip to content

Commit 04042d5

Browse files
authored
Add large blob end to end tests (#706)
1 parent b7bcd98 commit 04042d5

File tree

1 file changed

+76
-3
lines changed

1 file changed

+76
-3
lines changed

tests/endtoend/test_blob_functions.py

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33
import time
4+
from datetime import datetime
45

56
from azure_functions_worker import testutils
67

@@ -25,6 +26,23 @@ def test_blob_io_str(self):
2526
self.assertEqual(r.status_code, 200)
2627
self.assertEqual(r.text, 'test-data')
2728

29+
@testutils.retryable_test(3, 5)
30+
def test_blob_io_large_str(self):
31+
datetime_iso = datetime.utcnow().isoformat()
32+
large_string = datetime_iso * 1024 * 1024 # 26 MB
33+
34+
r = self.webhost.request('POST', 'put_blob_str', data=large_string)
35+
self.assertEqual(r.status_code, 200)
36+
self.assertEqual(r.text, 'OK')
37+
38+
r = self.webhost.request('GET', 'get_blob_str')
39+
self.assertEqual(r.status_code, 200)
40+
self.assertEqual(r.text, large_string)
41+
42+
r = self.webhost.request('GET', 'get_blob_as_str')
43+
self.assertEqual(r.status_code, 200)
44+
self.assertEqual(r.text, large_string)
45+
2846
@testutils.retryable_test(3, 5)
2947
def test_blob_io_bytes(self):
3048
r = self.webhost.request('POST', 'put_blob_bytes',
@@ -40,6 +58,24 @@ def test_blob_io_bytes(self):
4058
self.assertEqual(r.status_code, 200)
4159
self.assertEqual(r.text, 'test-dată')
4260

61+
@testutils.retryable_test(3, 5)
62+
def test_blob_io_large_bytes(self):
63+
datetime_iso = datetime.utcnow().isoformat()
64+
large_string = datetime_iso * 1024 * 1024 # 26 MB
65+
66+
r = self.webhost.request('POST', 'put_blob_bytes',
67+
data=large_string.encode('utf-8'))
68+
self.assertEqual(r.status_code, 200)
69+
self.assertEqual(r.text, 'OK')
70+
71+
r = self.webhost.request('POST', 'get_blob_bytes')
72+
self.assertEqual(r.status_code, 200)
73+
self.assertEqual(r.text, large_string)
74+
75+
r = self.webhost.request('POST', 'get_blob_as_bytes')
76+
self.assertEqual(r.status_code, 200)
77+
self.assertEqual(r.text, large_string)
78+
4379
@testutils.retryable_test(3, 5)
4480
def test_blob_io_filelike(self):
4581
r = self.webhost.request('POST', 'put_blob_filelike')
@@ -61,17 +97,53 @@ def test_blob_io_return(self):
6197

6298
@testutils.retryable_test(3, 5)
6399
def test_blob_trigger(self):
64-
data = str(round(time.time()))
100+
datetime_iso = datetime.utcnow().isoformat()
101+
data = datetime_iso
65102

66103
r = self.webhost.request('POST', 'put_blob_trigger',
67104
data=data.encode('utf-8'))
68105
self.assertEqual(r.status_code, 200)
69106
self.assertEqual(r.text, 'OK')
70107

108+
# Blob trigger may be processed after some delay
109+
# We check it every 2 seconds to allow the trigger to be fired
71110
max_retries = 10
111+
for try_no in range(max_retries):
112+
time.sleep(2)
72113

114+
try:
115+
# Check that the trigger has fired
116+
r = self.webhost.request('GET', 'get_blob_triggered')
117+
self.assertEqual(r.status_code, 200)
118+
response = r.json()
119+
120+
self.assertEqual(
121+
response,
122+
{
123+
'name': 'python-worker-tests/test-blob-trigger.txt',
124+
'length': len(data),
125+
'content': data
126+
}
127+
)
128+
break
129+
except AssertionError:
130+
if try_no == max_retries - 1:
131+
raise
132+
133+
@testutils.retryable_test(3, 5)
134+
def test_blob_trigger_with_large_content(self):
135+
datetime_iso = datetime.utcnow().isoformat()
136+
data = datetime_iso * 1024 * 1024 # 26 MB
137+
138+
r = self.webhost.request('POST', 'put_blob_trigger',
139+
data=data.encode('utf-8'))
140+
self.assertEqual(r.status_code, 200)
141+
self.assertEqual(r.text, 'OK')
142+
143+
# Blob trigger may be processed after some delay
144+
# We check it every 2 seconds to allow the trigger to be fired
145+
max_retries = 10
73146
for try_no in range(max_retries):
74-
# Allow trigger to fire
75147
time.sleep(2)
76148

77149
try:
@@ -84,10 +156,11 @@ def test_blob_trigger(self):
84156
response,
85157
{
86158
'name': 'python-worker-tests/test-blob-trigger.txt',
87-
'length': 10,
159+
'length': len(data),
88160
'content': data
89161
}
90162
)
163+
break
91164
except AssertionError:
92165
if try_no == max_retries - 1:
93166
raise

0 commit comments

Comments
 (0)