Skip to content

Commit 650410b

Browse files
Move tests to test_evaluation_plane_handler.
1 parent cb2acec commit 650410b

File tree

2 files changed

+64
-18
lines changed

2 files changed

+64
-18
lines changed

tests/integration/test_max_request_size.py

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ def _get_config_file_name(self) -> str:
6060
return config_file.name
6161

6262
def create_large_payload(self):
63-
size_mb = 2
64-
num_chars = size_mb * 1024 * 1024
63+
num_chars = 2 * 1024 * 1024 # 2MB Size
6564
large_string = string.printable * (num_chars // len(string.printable))
6665
large_string += string.printable[:num_chars % len(string.printable)]
6766
payload = {
@@ -70,26 +69,10 @@ def create_large_payload(self):
7069
}
7170
return json.dumps(payload).encode('utf-8')
7271

73-
def test_payload_exceeds_max_request_size_evaluate(self):
74-
headers = { "Content-Type": "application/json" }
75-
url = self._get_url() + "/evaluate"
76-
response = requests.post(url, data=self.create_large_payload(), headers=headers)
77-
self.assertEqual(413, response.status_code)
78-
7972
def test_payload_exceeds_max_request_size_query(self):
8073
headers = { "Content-Type": "application/json" }
8174
url = self._get_url() + "/query/model_name"
8275
response = requests.post(url, data=self.create_large_payload(), headers=headers)
8376
self.assertEqual(413, response.status_code)
8477
response = requests.get(url, data=self.create_large_payload(), headers=headers)
8578
self.assertEqual(413, response.status_code)
86-
87-
def test_no_content_length_header_present(self):
88-
headers = { "Content-Type": "application/json" }
89-
url = self._get_url() + "/evaluate"
90-
response = requests.post(url, headers=headers)
91-
message = json.loads(response.text)["message"]
92-
# Ensure it reaches script processing stage in EvaluationPlaneHandler.post
93-
self.assertEqual("Error processing script", message)
94-
self.assertEqual(500, response.status_code)
95-

tests/unit/server_tests/test_evaluation_plane_handler.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import base64
2+
import json
23
import os
34
import tempfile
5+
import string
46

57
from tornado.testing import AsyncHTTPTestCase
68

@@ -458,6 +460,67 @@ def test_evaluation_enabled(self):
458460
)
459461
self.assertEqual(200, response.code)
460462

463+
class TestEvaluationPlaneHandlerMaxRequestSize(AsyncHTTPTestCase):
464+
@classmethod
465+
def setUpClass(cls):
466+
prefix = "__TestEvaluationPlaneHandlerMaxRequestSize_"
467+
468+
# create config file
469+
cls.config_file = tempfile.NamedTemporaryFile(
470+
mode="w+t", prefix=prefix, suffix=".conf", delete=False
471+
)
472+
cls.config_file.write(
473+
"[TabPy]\n"
474+
"TABPY_MAX_REQUEST_SIZE_MB = 1"
475+
)
476+
cls.config_file.close()
477+
478+
@classmethod
479+
def tearDownClass(cls):
480+
os.remove(cls.config_file.name)
481+
482+
def get_app(self):
483+
self.app = TabPyApp(self.config_file.name)
484+
return self.app._create_tornado_web_app()
485+
486+
def create_large_payload(self):
487+
num_chars = 2 * 1024 * 1024 # 2MB Size
488+
large_string = string.printable * (num_chars // len(string.printable))
489+
large_string += string.printable[:num_chars % len(string.printable)]
490+
payload = {
491+
"data": { "_arg1": [1, large_string] },
492+
"script": "return _arg1"
493+
}
494+
return json.dumps(payload).encode('utf-8')
495+
496+
def test_evaluation_payload_exceeds_max_request_size(self):
497+
response = self.fetch(
498+
"/evaluate",
499+
method="POST",
500+
body=self.create_large_payload()
501+
)
502+
self.assertEqual(413, response.code)
503+
504+
def test_evaluation_max_request_size_not_applied(self):
505+
self.app.max_request_size = None
506+
response = self.fetch(
507+
"/evaluate",
508+
method="POST",
509+
body=self.create_large_payload()
510+
)
511+
self.assertEqual(200, response.code)
512+
self.assertEqual(1, json.loads(response.body)[0])
513+
514+
def test_no_content_length_header_present(self):
515+
response = self.fetch(
516+
"/evaluate",
517+
method="POST",
518+
allow_nonstandard_methods=True
519+
)
520+
message = json.loads(response.body)["message"]
521+
# Ensure it reaches script processing stage in EvaluationPlaneHandler.post
522+
self.assertEqual("Error processing script", message)
523+
461524

462525
class TestEvaluationPlaneHandlerDefault(AsyncHTTPTestCase):
463526
@classmethod

0 commit comments

Comments
 (0)