|
18 | 18 | from beartype import BeartypeConf, beartype |
19 | 19 | from requests.models import PreparedRequest |
20 | 20 |
|
21 | | -from mock_vws._constants import ResultCodes, TargetStatuses |
| 21 | +from mock_vws._constants import VUMARK_PNG, ResultCodes, TargetStatuses |
22 | 22 | from mock_vws._database_matchers import get_database_matching_server_keys |
23 | 23 | from mock_vws._mock_common import Route, json_dump |
24 | 24 | from mock_vws._services_validators import run_services_validators |
|
38 | 38 |
|
39 | 39 | _ROUTES: set[Route] = set() |
40 | 40 |
|
41 | | -_ResponseType = tuple[int, Mapping[str, str], str] |
| 41 | +_ResponseType = tuple[int, Mapping[str, str], str | bytes] |
42 | 42 | _P = ParamSpec("_P") |
43 | 43 |
|
44 | 44 |
|
@@ -287,6 +287,39 @@ def delete_target(self, request: PreparedRequest) -> _ResponseType: |
287 | 287 | } |
288 | 288 | return HTTPStatus.OK, headers, body_json |
289 | 289 |
|
| 290 | + @route( |
| 291 | + path_pattern=f"/targets/{_TARGET_ID_PATTERN}/instances", |
| 292 | + http_methods={HTTPMethod.POST}, |
| 293 | + ) |
| 294 | + def generate_vumark_instance( |
| 295 | + self, request: PreparedRequest |
| 296 | + ) -> _ResponseType: |
| 297 | + """Generate a VuMark instance.""" |
| 298 | + run_services_validators( |
| 299 | + request_headers=request.headers, |
| 300 | + request_body=_body_bytes(request=request), |
| 301 | + request_method=request.method or "", |
| 302 | + request_path=request.path_url, |
| 303 | + databases=self._target_manager.databases, |
| 304 | + ) |
| 305 | + |
| 306 | + date = email.utils.formatdate( |
| 307 | + timeval=None, |
| 308 | + localtime=False, |
| 309 | + usegmt=True, |
| 310 | + ) |
| 311 | + headers = { |
| 312 | + "Connection": "keep-alive", |
| 313 | + "Content-Type": "image/png", |
| 314 | + "Date": date, |
| 315 | + "server": "envoy", |
| 316 | + "x-envoy-upstream-service-time": "5", |
| 317 | + "strict-transport-security": "max-age=31536000", |
| 318 | + "x-aws-region": "us-east-2, us-west-2", |
| 319 | + "x-content-type-options": "nosniff", |
| 320 | + } |
| 321 | + return HTTPStatus.OK, headers, VUMARK_PNG |
| 322 | + |
290 | 323 | @route(path_pattern="/summary", http_methods={HTTPMethod.GET}) |
291 | 324 | def database_summary(self, request: PreparedRequest) -> _ResponseType: |
292 | 325 | """Get a database summary report. |
|
0 commit comments