Skip to content

Commit 7ee1664

Browse files
committed
add load test for run endpoint
1 parent 5c3bf0e commit 7ee1664

File tree

1 file changed

+30
-10
lines changed

1 file changed

+30
-10
lines changed

tests/performance/locust_files/functions/workflow.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import json
22
import random
3+
from datetime import timedelta
34
from pathlib import Path
45
from tempfile import TemporaryDirectory
6+
from urllib.parse import quote
57
from uuid import UUID
68

79
from locust import HttpUser, task
810
from pydantic import BaseModel, Field
911
from pydantic_settings import BaseSettings, SettingsConfigDict
1012
from requests.auth import HTTPBasicAuth
13+
from tenacity import retry, retry_if_exception_type, stop_after_delay, wait_exponential
1114
from urllib3 import PoolManager, Retry
1215

1316
# Perform the following setup in order to run this load test:
@@ -93,6 +96,7 @@ def __init__(self, *args, **kwargs):
9396
self._input_json_uuid = None
9497
self._script_uuid = None
9598
self._run_uid = None
99+
self._solver_job_uid = None
96100

97101
super().__init__(*args, **kwargs)
98102

@@ -156,17 +160,33 @@ def run_function(self):
156160
response.raise_for_status()
157161
self._run_uid = response.json().get("uid")
158162
assert self._run_uid is not None
163+
self._solver_job_uid = response.json().get("solver_job_id")
164+
assert self._solver_job_uid is not None
159165

160-
is_done = False
161-
while not is_done:
162-
response = self.client.get(
163-
f"/v0/function_jobs/{self._run_uid}/status",
164-
auth=self._auth,
165-
name="/v0/function_jobs/[function_run_uid]/status",
166-
)
167-
response.raise_for_status()
168-
status = response.json().get("status")
169-
is_done = status in ["DONE", "FAILED"]
166+
self.wait_until_done()
167+
168+
response = self.client.get(
169+
f"/v0/solvers/{quote(_SOLVER_KEY, safe='')}/releases/{_SOLVER_VERSION}/jobs/{self._solver_job_uid}/outputs",
170+
auth=self._auth,
171+
name="/v0/solvers/[solver_key]/releases/[solver_version]/jobs/[solver_job_id]/outputs",
172+
)
173+
response.raise_for_status()
174+
175+
@retry(
176+
stop=stop_after_delay(timedelta(minutes=10)),
177+
wait=wait_exponential(multiplier=1, min=1, max=10),
178+
retry=retry_if_exception_type(AssertionError),
179+
reraise=False,
180+
)
181+
def wait_until_done(self):
182+
response = self.client.get(
183+
f"/v0/function_jobs/{self._run_uid}/status",
184+
auth=self._auth,
185+
name="/v0/function_jobs/[function_run_uid]/status",
186+
)
187+
response.raise_for_status()
188+
status = response.json().get("status")
189+
assert status in ["DONE", "FAILED"]
170190

171191
def upload_file(self, file: Path) -> UUID:
172192
assert file.is_file()

0 commit comments

Comments
 (0)