Harden recording renderer CLI bounds
This commit is contained in:
@@ -290,7 +290,8 @@ Known local toolchain state:
|
|||||||
context.
|
context.
|
||||||
- `pano_cli record-render` exposes the recording renderer through JSON
|
- `pano_cli record-render` exposes the recording renderer through JSON
|
||||||
automation, including readback command/byte totals, and is covered by
|
automation, including readback command/byte totals, and is covered by
|
||||||
`pano_cli_record_render_smoke`.
|
`pano_cli_record_render_smoke` plus
|
||||||
|
`pano_cli_record_render_rejects_oversized_target`.
|
||||||
- `pano_cli simulate-document-history` exposes `pp_document::DocumentHistory`
|
- `pano_cli simulate-document-history` exposes `pp_document::DocumentHistory`
|
||||||
apply/undo/redo state through JSON automation and is covered by
|
apply/undo/redo state through JSON automation and is covered by
|
||||||
`pano_cli_simulate_document_history_smoke`.
|
`pano_cli_simulate_document_history_smoke`.
|
||||||
|
|||||||
@@ -818,7 +818,8 @@ Results:
|
|||||||
context.
|
context.
|
||||||
- `pano_cli record-render` exercises that headless recording renderer and emits
|
- `pano_cli record-render` exercises that headless recording renderer and emits
|
||||||
JSON command counts, target dimensions, backend name, trace/draw summary, and
|
JSON command counts, target dimensions, backend name, trace/draw summary, and
|
||||||
readback command/byte totals for agent automation.
|
readback command/byte totals for agent automation, with an expected-failure
|
||||||
|
smoke for oversized render/readback targets.
|
||||||
- `pano_cli simulate-document-history` exercises pure document history
|
- `pano_cli simulate-document-history` exercises pure document history
|
||||||
apply/undo/redo behavior and emits JSON layer/frame/history state for agent
|
apply/undo/redo behavior and emits JSON layer/frame/history state for agent
|
||||||
automation.
|
automation.
|
||||||
|
|||||||
@@ -367,6 +367,14 @@ if(TARGET pano_cli)
|
|||||||
LABELS "renderer;integration;desktop-fast"
|
LABELS "renderer;integration;desktop-fast"
|
||||||
PASS_REGULAR_EXPRESSION "\"backend\":\"recording\".*\"width\":32.*\"height\":16.*\"commands\":8.*\"drawCommands\":1.*\"readbackCommands\":1.*\"readbackBytes\":2048")
|
PASS_REGULAR_EXPRESSION "\"backend\":\"recording\".*\"width\":32.*\"height\":16.*\"commands\":8.*\"drawCommands\":1.*\"readbackCommands\":1.*\"readbackBytes\":2048")
|
||||||
|
|
||||||
|
add_test(NAME pano_cli_record_render_rejects_oversized_target
|
||||||
|
COMMAND "${CMAKE_COMMAND}"
|
||||||
|
-DPANO_CLI=$<TARGET_FILE:pano_cli>
|
||||||
|
"-DEXPECTED_OUTPUT=texture byte size exceeds the configured limit"
|
||||||
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/expect_pano_cli_record_render_failure.cmake")
|
||||||
|
set_tests_properties(pano_cli_record_render_rejects_oversized_target PROPERTIES
|
||||||
|
LABELS "renderer;integration;desktop-fast")
|
||||||
|
|
||||||
add_test(NAME pano_cli_simulate_document_edits_smoke
|
add_test(NAME pano_cli_simulate_document_edits_smoke
|
||||||
COMMAND pano_cli simulate-document-edits --width 128 --height 64)
|
COMMAND pano_cli simulate-document-edits --width 128 --height 64)
|
||||||
set_tests_properties(pano_cli_simulate_document_edits_smoke PROPERTIES
|
set_tests_properties(pano_cli_simulate_document_edits_smoke PROPERTIES
|
||||||
|
|||||||
24
tests/cmake/expect_pano_cli_record_render_failure.cmake
Normal file
24
tests/cmake/expect_pano_cli_record_render_failure.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if(NOT DEFINED PANO_CLI)
|
||||||
|
message(FATAL_ERROR "PANO_CLI must be set")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT DEFINED EXPECTED_OUTPUT)
|
||||||
|
message(FATAL_ERROR "EXPECTED_OUTPUT must be set")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${PANO_CLI}" record-render --width 32768 --height 32768
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE output
|
||||||
|
ERROR_VARIABLE error)
|
||||||
|
|
||||||
|
if(result EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Expected pano_cli record-render to fail, but it exited 0")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(combined_output "${output}${error}")
|
||||||
|
string(FIND "${combined_output}" "${EXPECTED_OUTPUT}" expected_index)
|
||||||
|
if(expected_index LESS 0)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Expected output to contain '${EXPECTED_OUTPUT}', got: ${combined_output}")
|
||||||
|
endif()
|
||||||
@@ -1639,6 +1639,15 @@ pp::foundation::Status parse_simulate_document_edits_args(
|
|||||||
return pp::foundation::Status::invalid_argument("width and height must be greater than zero");
|
return pp::foundation::Status::invalid_argument("width and height must be greater than zero");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto render_target_size = pp::renderer::texture_byte_size(pp::renderer::TextureDesc {
|
||||||
|
.extent = pp::renderer::Extent2D { .width = args.width, .height = args.height },
|
||||||
|
.format = pp::renderer::TextureFormat::rgba8,
|
||||||
|
.render_target = true,
|
||||||
|
});
|
||||||
|
if (!render_target_size) {
|
||||||
|
return render_target_size.status();
|
||||||
|
}
|
||||||
|
|
||||||
return pp::foundation::Status::success();
|
return pp::foundation::Status::success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user