From 39abfbb82795face37af054d1cd8bdae5aec34b9 Mon Sep 17 00:00:00 2001 From: Antoine MAZEAS Date: Fri, 26 Jun 2026 11:23:10 +0200 Subject: [PATCH 1/3] renamed "signatures" into "expectation_signatures" Signed-off-by: Antoine MAZEAS --- pyoaev/apis/signature.py | 6 +++--- pyoaev/signatures/models.py | 6 +++--- pyoaev/signatures/signature_manager.py | 2 +- .../test_signature_manager_transmission.py | 18 +++++++++--------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/pyoaev/apis/signature.py b/pyoaev/apis/signature.py index 2450c2c..0fe1971 100644 --- a/pyoaev/apis/signature.py +++ b/pyoaev/apis/signature.py @@ -107,7 +107,7 @@ def send_signatures( return sig_data = json.loads(payload["execution_output_structured"]) - targets = sig_data["signatures"]["targets"] + targets = sig_data["expectation_signatures"]["targets"] envelopes = self._split_into_envelopes( payload, sig_data, @@ -199,8 +199,8 @@ def _build_envelope( targets_subset: list[dict[str, Any]], ) -> dict[str, Any]: subset_sig = dict(sig_data) - subset_sig["signatures"] = dict(sig_data["signatures"]) - subset_sig["signatures"]["targets"] = targets_subset + subset_sig["expectation_signatures"] = dict(sig_data["expectation_signatures"]) + subset_sig["expectation_signatures"]["targets"] = targets_subset envelope = dict(base_payload) envelope["execution_output_structured"] = json.dumps(subset_sig) diff --git a/pyoaev/signatures/models.py b/pyoaev/signatures/models.py index b8a2c25..29bab66 100644 --- a/pyoaev/signatures/models.py +++ b/pyoaev/signatures/models.py @@ -122,7 +122,7 @@ class SignatureOutputStructure(BaseModel): model_config = ConfigDict(populate_by_name=True, extra="forbid") - signatures: SignaturePayload + expectation_signatures: SignaturePayload def normalize_signature_payload(self) -> None: """ @@ -130,7 +130,7 @@ def normalize_signature_payload(self) -> None: """ normalized_targets: list[TargetSignatures] = [] - for target in self.signatures.targets: + for target in self.expectation_signatures.targets: if not target.signature_values: normalized_targets.append(target) continue @@ -156,7 +156,7 @@ def normalize_signature_payload(self) -> None: normalized_targets.append(normalized_target) - self.signatures.targets = normalized_targets + self.expectation_signatures.targets = normalized_targets class ExecutionDetails(BaseModel): diff --git a/pyoaev/signatures/signature_manager.py b/pyoaev/signatures/signature_manager.py index 81db6ef..30cacbc 100644 --- a/pyoaev/signatures/signature_manager.py +++ b/pyoaev/signatures/signature_manager.py @@ -221,7 +221,7 @@ def send_signatures( Raises: SignatureTransmissionError: Validation failed, 4xx hit, or retries exhausted. """ - sig_output = SignatureOutputStructure(signatures=SignaturePayload(**signatures)) + sig_output = SignatureOutputStructure(expectation_signatures=SignaturePayload(**signatures)) self.client.signature.send_signatures( inject_id, diff --git a/test/signatures/test_signature_manager_transmission.py b/test/signatures/test_signature_manager_transmission.py index e414983..4798ba9 100644 --- a/test/signatures/test_signature_manager_transmission.py +++ b/test/signatures/test_signature_manager_transmission.py @@ -92,7 +92,7 @@ def context(): def _extract_targets(body: dict) -> list[dict]: """Parse targets from the SignatureCallbackPayload wire format.""" sig_data = json.loads(body["execution_output_structured"]) - return sig_data["signatures"]["targets"] + return sig_data["expectation_signatures"]["targets"] def _build_signature_payload( @@ -172,14 +172,14 @@ def _http_post(*args, **kwargs): context["status_plan"] = [200] context["error_body"] = "" context["inject_id"] = "inject-abc-001" - context["signatures"] = _build_signature_payload() + context["expectation_signatures"] = _build_signature_payload() context["signature_manager"] = SignatureManager(mock_client, logger=logger) @given(parsers.parse('a compiled post-execution payload for inject_id "{inject_id}"')) def compiled_post_execution_payload(context, inject_id): context["inject_id"] = inject_id - context["signatures"] = _build_signature_payload() + context["expectation_signatures"] = _build_signature_payload() @given(parsers.parse("an updated post-execution execution details object")) @@ -203,7 +203,7 @@ def compiled_payload_single_target( signature_type, signature_value, ): - context["signatures"] = { + context["expectation_signatures"] = { "targets": [ { "signature_target": dict(_CANONICAL_SIGNATURE_TARGET), @@ -230,9 +230,9 @@ def compiled_large_payload(context): context["signature_manager"] = SignatureManager( context["mock_client"], logger=context["logger"], - max_payload_size=700, + max_payload_size=800, ) - context["signatures"] = { + context["expectation_signatures"] = { "targets": [ { "signature_target": { @@ -335,7 +335,7 @@ def compiled_payload_grouped_by_expectation( expectation_a, expectation_b, ): - context["signatures"] = { + context["expectation_signatures"] = { "targets": [ { "signature_target": dict(_CANONICAL_SIGNATURE_TARGET), @@ -376,7 +376,7 @@ def call_send_signatures(context, inject_id): context["signature_manager"].send_signatures( inject_id, context["execution_details"], - context["signatures"], + context["expectation_signatures"], ) except Exception as exc: context["send_exception"] = exc @@ -498,7 +498,7 @@ def assert_no_chunk_metadata(context): @then("the union of targets across all POST requests equals the original target set") def assert_targets_union_matches_original(context): - original_targets = context["signatures"]["targets"] + original_targets = context["expectation_signatures"]["targets"] sent_targets = [ target for call_item in context["captured_calls"] From 0fa74781d91c570fd3fc2e7c28b99849f6979f78 Mon Sep 17 00:00:00 2001 From: Antoine MAZEAS Date: Fri, 26 Jun 2026 11:38:13 +0200 Subject: [PATCH 2/3] rename status and action Signed-off-by: Antoine MAZEAS --- pyoaev/signatures/models.py | 10 +++++----- ...ignature_manager_post_execution_constraints.feature | 6 +++--- .../features/signature_manager_post_execution.feature | 4 ++-- .../test_signature_manager_post_execution.py | 2 +- test/signatures/test_signature_manager_transmission.py | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pyoaev/signatures/models.py b/pyoaev/signatures/models.py index 29bab66..c1e5a27 100644 --- a/pyoaev/signatures/models.py +++ b/pyoaev/signatures/models.py @@ -191,19 +191,19 @@ def post_execution_update(self, tool_output: ToolOutput, now: datetime) -> None: self.end_time = now if tool_output.error_info and tool_output.error_info.exit_code != 0: - self.execution_status = "failed" + self.execution_status = "ERROR" if tool_output.error_info.crash_timestamp: self.end_time = datetime.strptime( tool_output.error_info.crash_timestamp, "%Y-%m-%dT%H:%M:%SZ" ) elif tool_output.timeout_info: - self.execution_status = "timeout" + self.execution_status = "TIMEOUT" elif tool_output.status == "partial": - self.execution_status = "partial" + self.execution_status = "ERROR" else: - self.execution_status = "success" + self.execution_status = "EXECUTED" - self.execution_action = InjectExecutionActions("complete") + self.execution_action = InjectExecutionActions("command_execution") class SignatureCallbackPayload(BaseModel): diff --git a/test/signatures/constraints/signature_manager_post_execution_constraints.feature b/test/signatures/constraints/signature_manager_post_execution_constraints.feature index 16d7b47..17914e7 100644 --- a/test/signatures/constraints/signature_manager_post_execution_constraints.feature +++ b/test/signatures/constraints/signature_manager_post_execution_constraints.feature @@ -18,7 +18,7 @@ Feature: SignatureManager post-execution constraints Scenario: Tool crash sets execution_status to failed and uses crash timestamp as end_time Given a tool_output containing error_info with exit_code=1 and crash_timestamp="2024-06-26T06:05:00Z" When I call post_execution_updates with the execution_details, execution_signatures and tool_output - Then execution_status equals "failed" + Then execution_status equals "ERROR" And end_time equals "2024-06-26T06:05:00Z" And the execution signature model contains every previous parameter unchanged And the execution details model contain every previous parameter pair unchanged @@ -26,7 +26,7 @@ Feature: SignatureManager post-execution constraints Scenario: Timeout sets execution_status to timeout and includes available partial results Given a tool_output containing timeout_info with partial_results=["result-A", "result-B"] When I call post_execution_updates with the execution_details, execution_signatures and tool_output - Then execution_status equals "timeout" + Then execution_status equals "TIMEOUT" And the returned dict contains the partial results ["result-A", "result-B"] from timeout_info And the execution signature model contains every previous parameter unchanged And the execution details model contain every previous parameter pair unchanged @@ -34,6 +34,6 @@ Feature: SignatureManager post-execution constraints Scenario: Timeout with no partial results still sets execution_status to timeout Given a tool_output containing timeout_info with no partial results available When I call post_execution_updates with the execution_details, execution_signatures and tool_output - Then execution_status equals "timeout" + Then execution_status equals "TIMEOUT" And the execution signature model contains every previous parameter unchanged And the execution details model contain every previous parameter pair unchanged diff --git a/test/signatures/features/signature_manager_post_execution.feature b/test/signatures/features/signature_manager_post_execution.feature index ffa78a4..4673429 100644 --- a/test/signatures/features/signature_manager_post_execution.feature +++ b/test/signatures/features/signature_manager_post_execution.feature @@ -24,5 +24,5 @@ Feature: SignatureManager post-execution execution elements update And the execution details model contain every previous parameter pair unchanged And the end_time parameter in the execution details model is a datetime object And this end_time is chronologically greater than or equal to start_time "2024-06-26T06:00:00Z" - And the execution_status parameter in the execution details model is equal to "success" - And the execution_action parameter in the execution details model is equal to "complete" + And the execution_status parameter in the execution details model is equal to "EXECUTED" + And the execution_action parameter in the execution details model is equal to "command_execution" diff --git a/test/signatures/test_signature_manager_post_execution.py b/test/signatures/test_signature_manager_post_execution.py index 356959b..cfa82f6 100644 --- a/test/signatures/test_signature_manager_post_execution.py +++ b/test/signatures/test_signature_manager_post_execution.py @@ -85,7 +85,7 @@ def execution_details(): target_fixture="tool_output", ) def successful_tool_output(): - return {"status": "success"} + return {"status": "EXECUTED"} @given( diff --git a/test/signatures/test_signature_manager_transmission.py b/test/signatures/test_signature_manager_transmission.py index 4798ba9..61570bb 100644 --- a/test/signatures/test_signature_manager_transmission.py +++ b/test/signatures/test_signature_manager_transmission.py @@ -185,7 +185,7 @@ def compiled_post_execution_payload(context, inject_id): @given(parsers.parse("an updated post-execution execution details object")) def updated_post_execution_execution_details(context): execution_details = ExecutionDetails( - execution_status="success", + execution_status="SUCCESS", execution_action="complete", ) execution_details.end_time = execution_details.start_time + timedelta(0.1) From 67aba4f17ea277f00ddcbd3376fab6e68735f937 Mon Sep 17 00:00:00 2001 From: Antoine MAZEAS Date: Fri, 26 Jun 2026 11:39:35 +0200 Subject: [PATCH 3/3] black Signed-off-by: Antoine MAZEAS --- pyoaev/signatures/signature_manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyoaev/signatures/signature_manager.py b/pyoaev/signatures/signature_manager.py index 30cacbc..2845234 100644 --- a/pyoaev/signatures/signature_manager.py +++ b/pyoaev/signatures/signature_manager.py @@ -221,7 +221,9 @@ def send_signatures( Raises: SignatureTransmissionError: Validation failed, 4xx hit, or retries exhausted. """ - sig_output = SignatureOutputStructure(expectation_signatures=SignaturePayload(**signatures)) + sig_output = SignatureOutputStructure( + expectation_signatures=SignaturePayload(**signatures) + ) self.client.signature.send_signatures( inject_id,