Verification

This section documents the test cases and their traceability to requirements. It is automatically generated from the source code.

Test Case: hierarchical_parent_drops_routing_across_multiple_peers TEST_AggregationClassification_hierarchical_parent_drops_routing_across_multiple_peers
status: verified
verifies: REQ_INTEROP_003

multi_ecu_aggregation demo case: primary + 2 peers all declare “robot” as parent; each peer brings its own ECU-leaf child. “robot” stays local, each ECU-leaf routes to the peer that contributed it.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L119 (Test: hierarchical_parent_drops_routing_across_multiple_peers)

Test Case: hierarchical_parent_drops_routing_when_local_subcomponents_exist TEST_AggregationClassification_hierarchical_parent_drops_routing_when_local_subcomponents_exist
status: verified
verifies: REQ_INTEROP_003

Primary declares “robot” as parent of its local “perception-ecu”. Peer also declares “robot” (collision). Because “perception-ecu” in the merged set references “robot” as parent, “robot” is a hierarchical parent -> removed from routing table (served locally with merged view).

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L76 (Test: hierarchical_parent_drops_routing_when_local_subcomponents_exist)

Test Case: hierarchical_parent_drops_routing_when_remote_subcomponents_exist TEST_AggregationClassification_hierarchical_parent_drops_routing_when_remote_subcomponents_exist
status: verified
verifies: REQ_INTEROP_003

Primary has only “robot” (no local children). Peer brings both “robot” (collision) and “planning-ecu” with parent_component_id=robot. After merge, “planning-ecu” in the set references “robot” -> still hierarchical parent -> no routing entry.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L96 (Test: hierarchical_parent_drops_routing_when_remote_subcomponents_exist)

Test Case: leaf_collision_across_multiple_peers_emits_warning TEST_AggregationClassification_leaf_collision_across_multiple_peers_emits_warning
status: verified
verifies: REQ_INTEROP_003

Two peers both claim the same leaf ECU “ecu-shared” (deployment anomaly - two peers exposing the same physical ECU). Routing uses last-writer; a structured warning lists all colliding peers.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L176 (Test: leaf_collision_across_multiple_peers_emits_warning)

Test Case: leaf_collision_keeps_routing_to_peer TEST_AggregationClassification_leaf_collision_keeps_routing_to_peer
status: verified
verifies: REQ_INTEROP_003

Two peers each with an ECU-level leaf “ecu-x” that collides with primary’s local one. No Component references “ecu-x” as its parent -> leaf -> stays in routing table (peer authoritative for runtime state).

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L53 (Test: leaf_collision_keeps_routing_to_peer)

Test Case: leaf_collision_routing_respects_input_order TEST_AggregationClassification_leaf_collision_routing_respects_input_order
status: verified
verifies: REQ_INTEROP_003

Flipped input: peer_b last -> routing must resolve to peer_b. Guards against regressions that sort peer_claims before classification and thus break the documented last-writer-wins contract.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L205 (Test: leaf_collision_routing_respects_input_order)

Test Case: parent_references_nonexistent_component_falls_back_to_leaf TEST_AggregationClassification_parent_references_nonexistent_component_falls_back_to_leaf
status: verified
verifies: REQ_INTEROP_003

Peer declares a Component whose parent_component_id points at an ID not present anywhere in the merged set. Prior behaviour silently excluded the ghost ID from routing while leaving the child as a routed leaf; that caused a dangling parent pointer in the serialised child response and no operator signal. The classifier now ignores the ghost edge and records a diagnostic so the misconfiguration surfaces via RCLCPP_WARN.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L230 (Test: parent_references_nonexistent_component_falls_back_to_leaf)

Test Case: self_parent_is_ignored_and_warned TEST_AggregationClassification_self_parent_is_ignored_and_warned
status: verified
verifies: REQ_INTEROP_003

A Component declaring itself as parent would otherwise be excluded from the routing table AND never render children (it has none), effectively disappearing into the local merged cache. Treat it as a leaf and warn.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L255 (Test: self_parent_is_ignored_and_warned)

Test Case: subcomponents_of_hierarchical_parent_still_route_to_peer TEST_AggregationClassification_subcomponents_of_hierarchical_parent_still_route_to_peer
status: verified
verifies: REQ_INTEROP_003

Confirms that removing routing for a hierarchical parent does NOT cascade to its sub-components - those remain peer-owned leaves.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L153 (Test: subcomponents_of_hierarchical_parent_still_route_to_peer)

Test Case: two_way_parent_cycle_falls_back_to_leaves_with_warning TEST_AggregationClassification_two_way_parent_cycle_falls_back_to_leaves_with_warning
status: verified
verifies: REQ_INTEROP_003

A<->B cycle: prior behaviour marked both A and B as hierarchical parents of each other, excluded both from the routing table, then served empty local stubs instead of forwarding to the owning peer. The classifier now detects the cycle, drops both edges, and emits a single diagnostic listing the cycle members.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_classification.cpp#L276 (Test: two_way_parent_cycle_falls_back_to_leaves_with_warning)

Test Case: fan_out_returns_partial_when_peers_unreachable TEST_AggregationManager_fan_out_returns_partial_when_peers_unreachable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_aggregation_manager.cpp#L248 (Test: fan_out_returns_partial_when_peers_unreachable)

Test Case: forward_returns_502_for_unknown_peer TEST_AggregationManager_forward_returns_502_for_unknown_peer
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_aggregation_manager.cpp#L280 (Test: forward_returns_502_for_unknown_peer)

Test Case: forward_strips_peer_prefix_from_path TEST_AggregationManager_forward_strips_peer_prefix_from_path
status: verified
verifies: REQ_INTEROP_003

This tests the path rewriting logic: when a collision-renamed entity (e.g., peer_0__camera_driver) is forwarded to the peer, the peer prefix must be stripped so the peer receives the original entity ID.

Implementation: src/ros2_medkit_gateway/test/test_aggregation_manager.cpp#L532 (Test: forward_strips_peer_prefix_from_path)

Test Case: routing_table_update_and_find TEST_AggregationManager_routing_table_update_and_find
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_aggregation_manager.cpp#L350 (Test: routing_table_update_and_find)

Test Case: ToJson_ContainsRequiredFields TEST_AppModelTest_ToJson_ContainsRequiredFields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L242 (Test: ToJson_ContainsRequiredFields)

Test Case: ToJson_ContainsRequiredFields TEST_AreaModelTest_ToJson_ContainsRequiredFields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L60 (Test: ToJson_ContainsRequiredFields)

status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_config.cpp#L33 (Test: AdminWildcardsCoverEveryMethod)

Test Case: ErrorCodeIsOAuth2Identifier TEST_AuthHandlersAuthorizeTest_ErrorCodeIsOAuth2Identifier
status: verified
verifies: REQ_INTEROP_086

OAuth2 wire shape is enforced by the per-route renderer; the handler carries the OAuth2 identifier in ErrorInfo::code so the renderer can emit {“error”: “<identifier>”} per RFC 6749 §5.2 without rewriting.

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L188 (Test: ErrorCodeIsOAuth2Identifier)

Test Case: ReturnsBadRequestForEmptyClientId TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForEmptyClientId
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L146 (Test: ReturnsBadRequestForEmptyClientId)

Test Case: ReturnsBadRequestForEmptyClientSecret TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForEmptyClientSecret
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L174 (Test: ReturnsBadRequestForEmptyClientSecret)

Test Case: ReturnsBadRequestForMissingClientId TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForMissingClientId
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L132 (Test: ReturnsBadRequestForMissingClientId)

Test Case: ReturnsBadRequestForMissingClientSecret TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForMissingClientSecret
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L160 (Test: ReturnsBadRequestForMissingClientSecret)

Test Case: ReturnsBadRequestForWrongGrantType TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForWrongGrantType
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L118 (Test: ReturnsBadRequestForWrongGrantType)

Test Case: AuthorizeReturns404WhenAuthDisabled TEST_AuthHandlersDisabledTest_AuthorizeReturns404WhenAuthDisabled
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L68 (Test: AuthorizeReturns404WhenAuthDisabled)

Test Case: RevokeReturns404WhenAuthDisabled TEST_AuthHandlersDisabledTest_RevokeReturns404WhenAuthDisabled
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L88 (Test: RevokeReturns404WhenAuthDisabled)

Test Case: TokenReturns404WhenAuthDisabled TEST_AuthHandlersDisabledTest_TokenReturns404WhenAuthDisabled
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L78 (Test: TokenReturns404WhenAuthDisabled)

Test Case: ReturnsBadRequestForInvalidJson TEST_AuthHandlersRevokeTest_ReturnsBadRequestForInvalidJson
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L278 (Test: ReturnsBadRequestForInvalidJson)

Test Case: ReturnsBadRequestForMissingTokenField TEST_AuthHandlersRevokeTest_ReturnsBadRequestForMissingTokenField
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L293 (Test: ReturnsBadRequestForMissingTokenField)

Test Case: ReturnsBadRequestForNonStringToken TEST_AuthHandlersRevokeTest_ReturnsBadRequestForNonStringToken
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L307 (Test: ReturnsBadRequestForNonStringToken)

Test Case: ReturnsBadRequestForEmptyRefreshToken TEST_AuthHandlersTokenTest_ReturnsBadRequestForEmptyRefreshToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L249 (Test: ReturnsBadRequestForEmptyRefreshToken)

Test Case: ReturnsBadRequestForMissingRefreshToken TEST_AuthHandlersTokenTest_ReturnsBadRequestForMissingRefreshToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L235 (Test: ReturnsBadRequestForMissingRefreshToken)

Test Case: ReturnsBadRequestForWrongGrantType TEST_AuthHandlersTokenTest_ReturnsBadRequestForWrongGrantType
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L221 (Test: ReturnsBadRequestForWrongGrantType)

Test Case: AuthorizeReturnsTokensForValidCredentials TEST_AuthHandlersWithManagerTest_AuthorizeReturnsTokensForValidCredentials
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L358 (Test: AuthorizeReturnsTokensForValidCredentials)

Test Case: AuthorizeReturnsUnauthorizedForInvalidCredentials TEST_AuthHandlersWithManagerTest_AuthorizeReturnsUnauthorizedForInvalidCredentials
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L368 (Test: AuthorizeReturnsUnauthorizedForInvalidCredentials)

Test Case: RevokeRevokesRefreshTokenForSubsequentTokenRequest TEST_AuthHandlersWithManagerTest_RevokeRevokesRefreshTokenForSubsequentTokenRequest
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L409 (Test: RevokeRevokesRefreshTokenForSubsequentTokenRequest)

Test Case: TokenReturnsNewAccessTokenForValidRefreshToken TEST_AuthHandlersWithManagerTest_TokenReturnsNewAccessTokenForValidRefreshToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L380 (Test: TokenReturnsNewAccessTokenForValidRefreshToken)

Test Case: TokenReturnsUnauthorizedForInvalidRefreshToken TEST_AuthHandlersWithManagerTest_TokenReturnsUnauthorizedForInvalidRefreshToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_handlers.cpp#L398 (Test: TokenReturnsUnauthorizedForInvalidRefreshToken)

Test Case: AManagerWithNoTableAuthorizesNothing TEST_AuthManagerPermissionTableTest_AManagerWithNoTableAuthorizesNothing
status: verified
verifies: REQ_INTEROP_086

The fail-closed property the whole derivation rests on. RESTServer feeds the table before the server listens; a manager that never got one must refuse rather than fall back to some built-in default, because a default would be a second source for every grant.

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L458 (Test: AManagerWithNoTableAuthorizesNothing)

Test Case: AddedPermissionsMergeRatherThanReplace TEST_AuthManagerPermissionTableTest_AddedPermissionsMergeRatherThanReplace
status: verified
verifies: REQ_INTEROP_086

RESTServer calls this twice - once with the registry’s derivation, once with the residual list - so the second call must not erase the first.

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L478 (Test: AddedPermissionsMergeRatherThanReplace)

Test Case: RS256WithMissingPrivateKeyThrows TEST_AuthManagerRS256Test_RS256WithMissingPrivateKeyThrows
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L561 (Test: RS256WithMissingPrivateKeyThrows)

Test Case: AuthenticateValidCredentials TEST_AuthManagerTest_AuthenticateValidCredentials
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L215 (Test: AuthenticateValidCredentials)

Test Case: AuthorizeViewerCanRead TEST_AuthManagerTest_AuthorizeViewerCanRead
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L388 (Test: AuthorizeViewerCanRead)

Test Case: DisabledClientTokenBecomesInvalid TEST_AuthManagerTest_DisabledClientTokenBecomesInvalid
status: verified
verifies: REQ_INTEROP_087

Authenticate first

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L607 (Test: DisabledClientTokenBecomesInvalid)

Test Case: RefreshAccessToken TEST_AuthManagerTest_RefreshAccessToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L325 (Test: RefreshAccessToken)

Test Case: RefreshRevocationPropagatestoAccessToken TEST_AuthManagerTest_RefreshRevocationPropagatestoAccessToken
status: verified
verifies: REQ_INTEROP_087

Get tokens

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L368 (Test: RefreshRevocationPropagatestoAccessToken)

Test Case: RefreshWithAccessTokenFails TEST_AuthManagerTest_RefreshWithAccessTokenFails
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L312 (Test: RefreshWithAccessTokenFails)

Test Case: ValidateTokenWithCorrectType TEST_AuthManagerTest_ValidateTokenWithCorrectType
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L278 (Test: ValidateTokenWithCorrectType)

Test Case: ValidateTokenWithWrongTypeRejectsToken TEST_AuthManagerTest_ValidateTokenWithWrongTypeRejectsToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L295 (Test: ValidateTokenWithWrongTypeRejectsToken)

Test Case: ValidateValidToken TEST_AuthManagerTest_ValidateValidToken
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L242 (Test: ValidateValidToken)

Test Case: AuthEndpointsNeverRequireAuth TEST_AuthMiddlewareTest_AuthEndpointsNeverRequireAuth
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1067 (Test: AuthEndpointsNeverRequireAuth)

Test Case: DisabledMiddlewareAllowsAll TEST_AuthMiddlewareTest_DisabledMiddlewareAllowsAll
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1078 (Test: DisabledMiddlewareAllowsAll)

Test Case: ExtractBearerToken_CaseInsensitive TEST_AuthMiddlewareTest_ExtractBearerToken_CaseInsensitive
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L973 (Test: ExtractBearerToken_CaseInsensitive)

Test Case: ExtractBearerToken_EmptyHeader TEST_AuthMiddlewareTest_ExtractBearerToken_EmptyHeader
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L980 (Test: ExtractBearerToken_EmptyHeader)

Test Case: ExtractBearerToken_EmptyToken TEST_AuthMiddlewareTest_ExtractBearerToken_EmptyToken
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L992 (Test: ExtractBearerToken_EmptyToken)

Test Case: ExtractBearerToken_InvalidPrefix TEST_AuthMiddlewareTest_ExtractBearerToken_InvalidPrefix
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L986 (Test: ExtractBearerToken_InvalidPrefix)

Test Case: ExtractBearerToken_ValidToken TEST_AuthMiddlewareTest_ExtractBearerToken_ValidToken
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L966 (Test: ExtractBearerToken_ValidToken)

Test Case: ProcessGetRequestWithoutAuth TEST_AuthMiddlewareTest_ProcessGetRequestWithoutAuth
status: verified
verifies: REQ_INTEROP_086

GET requests don’t require auth when require_auth_for=WRITE

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L998 (Test: ProcessGetRequestWithoutAuth)

Test Case: ProcessWriteRequestWithInsufficientPermissions TEST_AuthMiddlewareTest_ProcessWriteRequestWithInsufficientPermissions
status: verified
verifies: REQ_INTEROP_086

Authenticate as viewer

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1050 (Test: ProcessWriteRequestWithInsufficientPermissions)

Test Case: ProcessWriteRequestWithInvalidToken TEST_AuthMiddlewareTest_ProcessWriteRequestWithInvalidToken
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1037 (Test: ProcessWriteRequestWithInvalidToken)

Test Case: ProcessWriteRequestWithValidToken TEST_AuthMiddlewareTest_ProcessWriteRequestWithValidToken
status: verified

Authenticate first to get a valid token

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1021 (Test: ProcessWriteRequestWithValidToken)

Test Case: ProcessWriteRequestWithoutAuth TEST_AuthMiddlewareTest_ProcessWriteRequestWithoutAuth
status: verified
verifies: REQ_INTEROP_086

POST requests require auth when require_auth_for=WRITE

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1009 (Test: ProcessWriteRequestWithoutAuth)

Test Case: AllAuthPolicyAlwaysRequiresAuth TEST_AuthRequirementPolicyTest_AllAuthPolicyAlwaysRequiresAuth
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1124 (Test: AllAuthPolicyAlwaysRequiresAuth)

Test Case: ConfigurablePolicyExactMatch TEST_AuthRequirementPolicyTest_ConfigurablePolicyExactMatch
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1157 (Test: ConfigurablePolicyExactMatch)

Test Case: ConfigurablePolicyLongestMatchWins TEST_AuthRequirementPolicyTest_ConfigurablePolicyLongestMatchWins
status: verified
verifies: REQ_INTEROP_086

Create a policy where /api/v1/public is public, but /api/v1/public/secret/* requires auth

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1198 (Test: ConfigurablePolicyLongestMatchWins)

Test Case: ConfigurablePolicyMultipleWildcards TEST_AuthRequirementPolicyTest_ConfigurablePolicyMultipleWildcards
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1180 (Test: ConfigurablePolicyMultipleWildcards)

Test Case: ConfigurablePolicyUnknownPathsRequireAuth TEST_AuthRequirementPolicyTest_ConfigurablePolicyUnknownPathsRequireAuth
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1189 (Test: ConfigurablePolicyUnknownPathsRequireAuth)

Test Case: ConfigurablePolicyWildcardMatch TEST_AuthRequirementPolicyTest_ConfigurablePolicyWildcardMatch
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1167 (Test: ConfigurablePolicyWildcardMatch)

Test Case: FactoryCreatesAllAuthFromConfig TEST_AuthRequirementPolicyTest_FactoryCreatesAllAuthFromConfig
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1241 (Test: FactoryCreatesAllAuthFromConfig)

Test Case: FactoryCreatesNoAuthPolicy TEST_AuthRequirementPolicyTest_FactoryCreatesNoAuthPolicy
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1215 (Test: FactoryCreatesNoAuthPolicy)

Test Case: FactoryCreatesWriteOnlyFromConfig TEST_AuthRequirementPolicyTest_FactoryCreatesWriteOnlyFromConfig
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1227 (Test: FactoryCreatesWriteOnlyFromConfig)

Test Case: NoAuthPolicyNeverRequiresAuth TEST_AuthRequirementPolicyTest_NoAuthPolicyNeverRequiresAuth
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1114 (Test: NoAuthPolicyNeverRequiresAuth)

status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1255 (Test: PolicyDescriptions)

Test Case: WriteOnlyPolicyForGetRequests TEST_AuthRequirementPolicyTest_WriteOnlyPolicyForGetRequests
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1134 (Test: WriteOnlyPolicyForGetRequests)

Test Case: WriteOnlyPolicyForWriteRequests TEST_AuthRequirementPolicyTest_WriteOnlyPolicyForWriteRequests
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L1146 (Test: WriteOnlyPolicyForWriteRequests)

Test Case: ParseRequestFormUrlEncoded TEST_AuthorizeRequestTest_ParseRequestFormUrlEncoded
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L890 (Test: ParseRequestFormUrlEncoded)

Test Case: ParseRequestInvalidContentType TEST_AuthorizeRequestTest_ParseRequestInvalidContentType
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L902 (Test: ParseRequestInvalidContentType)

Test Case: ParseRequestInvalidJson TEST_AuthorizeRequestTest_ParseRequestInvalidJson
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L912 (Test: ParseRequestInvalidJson)

Test Case: ParseRequestJson TEST_AuthorizeRequestTest_ParseRequestJson
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L878 (Test: ParseRequestJson)

Test Case: ParseRequestJsonWithCharset TEST_AuthorizeRequestTest_ParseRequestJsonWithCharset
status: verified
verifies: REQ_INTEROP_086

Content-Type may include charset

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L922 (Test: ParseRequestJsonWithCharset)

Test Case: DescriptorToJsonConversion TEST_BulkDataHandlersTest_DescriptorToJsonConversion
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L287 (Test: DescriptorToJsonConversion)

Test Case: DescriptorToJsonWithMetadata TEST_BulkDataHandlersTest_DescriptorToJsonWithMetadata
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L314 (Test: DescriptorToJsonWithMetadata)

Test Case: DescriptorToJsonWithoutDescription TEST_BulkDataHandlersTest_DescriptorToJsonWithoutDescription
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L340 (Test: DescriptorToJsonWithoutDescription)

Test Case: FormatTimestampNsEpoch TEST_BulkDataHandlersTest_FormatTimestampNsEpoch
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L263 (Test: FormatTimestampNsEpoch)

Test Case: FormatTimestampNsNegativeFallback TEST_BulkDataHandlersTest_FormatTimestampNsNegativeFallback
status: verified
verifies: REQ_INTEROP_071

Negative timestamps should return fallback

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L277 (Test: FormatTimestampNsNegativeFallback)

Test Case: FormatTimestampNsValidTimestamp TEST_BulkDataHandlersTest_FormatTimestampNsValidTimestamp
status: verified
verifies: REQ_INTEROP_071

2026-02-08T00:00:00.000Z

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L253 (Test: FormatTimestampNsValidTimestamp)

Test Case: FormatTimestampNsWithMilliseconds TEST_BulkDataHandlersTest_FormatTimestampNsWithMilliseconds
status: verified
verifies: REQ_INTEROP_071

1 second + 123 ms

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L269 (Test: FormatTimestampNsWithMilliseconds)

Test Case: GetRosbagMimetypeCasesSensitive TEST_BulkDataHandlersTest_GetRosbagMimetypeCasesSensitive
status: verified
verifies: REQ_INTEROP_071

MCAP should not match mcap (case sensitive)

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L76 (Test: GetRosbagMimetypeCasesSensitive)

Test Case: GetRosbagMimetypeDb3 TEST_BulkDataHandlersTest_GetRosbagMimetypeDb3
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L61 (Test: GetRosbagMimetypeDb3)

Test Case: GetRosbagMimetypeEmpty TEST_BulkDataHandlersTest_GetRosbagMimetypeEmpty
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L71 (Test: GetRosbagMimetypeEmpty)

Test Case: GetRosbagMimetypeMcap TEST_BulkDataHandlersTest_GetRosbagMimetypeMcap
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L51 (Test: GetRosbagMimetypeMcap)

Test Case: GetRosbagMimetypeSqlite3 TEST_BulkDataHandlersTest_GetRosbagMimetypeSqlite3
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L56 (Test: GetRosbagMimetypeSqlite3)

Test Case: GetRosbagMimetypeUnknown TEST_BulkDataHandlersTest_GetRosbagMimetypeUnknown
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L66 (Test: GetRosbagMimetypeUnknown)

Test Case: PayloadTooLargeErrorCodeDefined TEST_BulkDataHandlersTest_PayloadTooLargeErrorCodeDefined
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulkdata_handlers.cpp#L370 (Test: PayloadTooLargeErrorCodeDefined)

Test Case: EmptyCategories TEST_BulkDataStoreTest_EmptyCategories
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L221 (Test: EmptyCategories)

Test Case: GenerateUniqueIds TEST_BulkDataStoreTest_GenerateUniqueIds
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L185 (Test: GenerateUniqueIds)

Test Case: GetFilePath TEST_BulkDataStoreTest_GetFilePath
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L168 (Test: GetFilePath)

Test Case: GetFilePathNonexistent TEST_BulkDataStoreTest_GetFilePathNonexistent
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L340 (Test: GetFilePathNonexistent)

Test Case: IdFormatIsReadable TEST_BulkDataStoreTest_IdFormatIsReadable
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L327 (Test: IdFormatIsReadable)

Test Case: ListCategories TEST_BulkDataStoreTest_ListCategories
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L123 (Test: ListCategories)

Test Case: ListItemsEmptyCategory TEST_BulkDataStoreTest_ListItemsEmptyCategory
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L271 (Test: ListItemsEmptyCategory)

Test Case: ListItemsInCategory TEST_BulkDataStoreTest_ListItemsInCategory
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L104 (Test: ListItemsInCategory)

Test Case: ListItemsWrongEntity TEST_BulkDataStoreTest_ListItemsWrongEntity
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L279 (Test: ListItemsWrongEntity)

Test Case: MaxUploadSizeEnforced TEST_BulkDataStoreTest_MaxUploadSizeEnforced
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L198 (Test: MaxUploadSizeEnforced)

Test Case: MaxUploadZeroMeansUnlimited TEST_BulkDataStoreTest_MaxUploadZeroMeansUnlimited
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L348 (Test: MaxUploadZeroMeansUnlimited)

Test Case: PathTraversalRejected TEST_BulkDataStoreTest_PathTraversalRejected
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L229 (Test: PathTraversalRejected)

Test Case: RemoveItem TEST_BulkDataStoreTest_RemoveItem
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L136 (Test: RemoveItem)

Test Case: RemoveNonexistent TEST_BulkDataStoreTest_RemoveNonexistent
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L159 (Test: RemoveNonexistent)

Test Case: RemoveThenListDoesNotInclude TEST_BulkDataStoreTest_RemoveThenListDoesNotInclude
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L311 (Test: RemoveThenListDoesNotInclude)

Test Case: StoreAndRetrieve TEST_BulkDataStoreTest_StoreAndRetrieve
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L48 (Test: StoreAndRetrieve)

Test Case: StoreAtomicWriteDescriptorExists TEST_BulkDataStoreTest_StoreAtomicWriteDescriptorExists
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L248 (Test: StoreAtomicWriteDescriptorExists)

Test Case: StoreCreatesDirectoryStructure TEST_BulkDataStoreTest_StoreCreatesDirectoryStructure
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L71 (Test: StoreCreatesDirectoryStructure)

Test Case: StoreEmptyFile TEST_BulkDataStoreTest_StoreEmptyFile
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L289 (Test: StoreEmptyFile)

Test Case: StoreEmptyFilename TEST_BulkDataStoreTest_StoreEmptyFilename
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L302 (Test: StoreEmptyFilename)

Test Case: StoreLargeFile TEST_BulkDataStoreTest_StoreLargeFile
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L356 (Test: StoreLargeFile)

Test Case: StoreUnknownCategoryRejected TEST_BulkDataStoreTest_StoreUnknownCategoryRejected
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L262 (Test: StoreUnknownCategoryRejected)

Test Case: StoreWithMetadata TEST_BulkDataStoreTest_StoreWithMetadata
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L84 (Test: StoreWithMetadata)

Test Case: UnknownCategory TEST_BulkDataStoreTest_UnknownCategory
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_gateway/test/test_bulk_data_store.cpp#L212 (Test: UnknownCategory)

Test Case: EntityCollectionDetailPathHasParameters TEST_CapabilityGeneratorTest_EntityCollectionDetailPathHasParameters
status: verified
verifies: REQ_INTEROP_002

Entity collection specs use template paths (/apps/{app_id}), so they should include path parameters for the entity ID

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L589 (Test: EntityCollectionDetailPathHasParameters)

Test Case: GenerateEntityCollectionReturnsSpec TEST_CapabilityGeneratorTest_GenerateEntityCollectionReturnsSpec
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L303 (Test: GenerateEntityCollectionReturnsSpec)

Test Case: GenerateInvalidPathReturnsNullopt TEST_CapabilityGeneratorTest_GenerateInvalidPathReturnsNullopt
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L283 (Test: GenerateInvalidPathReturnsNullopt)

Test Case: GenerateRootContainsEntityCollections TEST_CapabilityGeneratorTest_GenerateRootContainsEntityCollections
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L217 (Test: GenerateRootContainsEntityCollections)

Test Case: GenerateRootContainsEntityDetailPaths TEST_CapabilityGeneratorTest_GenerateRootContainsEntityDetailPaths
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L230 (Test: GenerateRootContainsEntityDetailPaths)

Test Case: GenerateRootContainsGlobalFaults TEST_CapabilityGeneratorTest_GenerateRootContainsGlobalFaults
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L243 (Test: GenerateRootContainsGlobalFaults)

Test Case: GenerateRootContainsHealthEndpoint TEST_CapabilityGeneratorTest_GenerateRootContainsHealthEndpoint
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L195 (Test: GenerateRootContainsHealthEndpoint)

Test Case: GenerateRootContainsVersionInfo TEST_CapabilityGeneratorTest_GenerateRootContainsVersionInfo
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L206 (Test: GenerateRootContainsVersionInfo)

Test Case: GenerateRootReturnsValidOpenApiSpec TEST_CapabilityGeneratorTest_GenerateRootReturnsValidOpenApiSpec
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_capability_generator.cpp#L167 (Test: GenerateRootReturnsValidOpenApiSpec)

Test Case: CgroupLimitHoldsValueOnlyWhenLimited TEST_CgroupReader_CgroupLimitHoldsValueOnlyWhenLimited
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L142 (Test: CgroupLimitHoldsValueOnlyWhenLimited)

Test Case: ExtractContainerdContainerId TEST_CgroupReader_ExtractContainerdContainerId
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L104 (Test: ExtractContainerdContainerId)

Test Case: ExtractDockerContainerId TEST_CgroupReader_ExtractDockerContainerId
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L86 (Test: ExtractDockerContainerId)

Test Case: ExtractDockerOldStyleContainerId TEST_CgroupReader_ExtractDockerOldStyleContainerId
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L119 (Test: ExtractDockerOldStyleContainerId)

Test Case: ExtractNoContainerId TEST_CgroupReader_ExtractNoContainerId
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L113 (Test: ExtractNoContainerId)

Test Case: ExtractPodmanContainerId TEST_CgroupReader_ExtractPodmanContainerId
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L95 (Test: ExtractPodmanContainerId)

Test Case: LimitStateStrings TEST_CgroupReader_LimitStateStrings
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L134 (Test: LimitStateStrings)

Test Case: AbsentLimitFilesAreUnavailable TEST_CgroupTree_AbsentLimitFilesAreUnavailable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L520 (Test: AbsentLimitFilesAreUnavailable)

Test Case: CgroupPathIdWinsOverMarker TEST_CgroupTree_CgroupPathIdWinsOverMarker
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L351 (Test: CgroupPathIdWinsOverMarker)

Test Case: ContainerIdIsFoundOnANonPreferredHierarchy TEST_CgroupTree_ContainerIdIsFoundOnANonPreferredHierarchy
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L722 (Test: ContainerIdIsFoundOnANonPreferredHierarchy)

Test Case: CpuMaxWithATrailingTokenIsUnreadable TEST_CgroupTree_CpuMaxWithATrailingTokenIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L696 (Test: CpuMaxWithATrailingTokenIsUnreadable)

Test Case: CpuMaxWithZeroPeriodIsUnreadable TEST_CgroupTree_CpuMaxWithZeroPeriodIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L580 (Test: CpuMaxWithZeroPeriodIsUnreadable)

Test Case: CpuMaxWithoutPeriodIsUnreadable TEST_CgroupTree_CpuMaxWithoutPeriodIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L569 (Test: CpuMaxWithoutPeriodIsUnreadable)

Test Case: EmptyLimitFilesAreUnreadable TEST_CgroupTree_EmptyLimitFilesAreUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L556 (Test: EmptyLimitFilesAreUnreadable)

Test Case: FirstLineLongerThanOneReadIsAccumulated TEST_CgroupTree_FirstLineLongerThanOneReadIsAccumulated
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L933 (Test: FirstLineLongerThanOneReadIsAccumulated)

Test Case: HostProcessIsNotContainerized TEST_CgroupTree_HostProcessIsNotContainerized
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L285 (Test: HostProcessIsNotContainerized)

Test Case: HybridUnifiedMountedBesideLegacyControllers TEST_CgroupTree_HybridUnifiedMountedBesideLegacyControllers
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L474 (Test: HybridUnifiedMountedBesideLegacyControllers)

Test Case: HybridUnifiedRootFallsBackToV1Path TEST_CgroupTree_HybridUnifiedRootFallsBackToV1Path
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L455 (Test: HybridUnifiedRootFallsBackToV1Path)

Test Case: LegacyOwnedControllerAnswersEvenWhenUnifiedIsReadable TEST_CgroupTree_LegacyOwnedControllerAnswersEvenWhenUnifiedIsReadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L892 (Test: LegacyOwnedControllerAnswersEvenWhenUnifiedIsReadable)

Test Case: LegacyOwnedControllerReportsUnlimitedOverAUnifiedNumber TEST_CgroupTree_LegacyOwnedControllerReportsUnlimitedOverAUnifiedNumber
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L904 (Test: LegacyOwnedControllerReportsUnlimitedOverAUnifiedNumber)

Test Case: LimitFileWithoutALineEndingWithinTheCapIsUnreadable TEST_CgroupTree_LimitFileWithoutALineEndingWithinTheCapIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L851 (Test: LimitFileWithoutALineEndingWithinTheCapIsUnreadable)

Test Case: LimitFileWithoutATrailingNewlineIsRead TEST_CgroupTree_LimitFileWithoutATrailingNewlineIsRead
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L862 (Test: LimitFileWithoutATrailingNewlineIsRead)

Test Case: LimitPathThatIsAFifoDoesNotBlock TEST_CgroupTree_LimitPathThatIsAFifoDoesNotBlock
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L919 (Test: LimitPathThatIsAFifoDoesNotBlock)

Test Case: MalformedProcCgroupLinesAreIgnored TEST_CgroupTree_MalformedProcCgroupLinesAreIgnored
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L671 (Test: MalformedProcCgroupLinesAreIgnored)

Test Case: MarkerAtTheReadersRootDoesNotContainerizeAHostProcess TEST_CgroupTree_MarkerAtTheReadersRootDoesNotContainerizeAHostProcess
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L313 (Test: MarkerAtTheReadersRootDoesNotContainerizeAHostProcess)

Test Case: MissingCgroupFileIsAnError TEST_CgroupTree_MissingCgroupFileIsAnError
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L945 (Test: MissingCgroupFileIsAnError)

Test Case: MountRootMatchesOnlyWholePathComponents TEST_CgroupTree_MountRootMatchesOnlyWholePathComponents
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L793 (Test: MountRootMatchesOnlyWholePathComponents)

Test Case: MountRootWithATrailingSlashStillMatches TEST_CgroupTree_MountRootWithATrailingSlashStillMatches
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L875 (Test: MountRootWithATrailingSlashStillMatches)

Test Case: NegativeMemoryLimitIsUnreadable TEST_CgroupTree_NegativeMemoryLimitIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L622 (Test: NegativeMemoryLimitIsUnreadable)

Test Case: OpenFailureOtherThanMissingIsUnreadable TEST_CgroupTree_OpenFailureOtherThanMissingIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L837 (Test: OpenFailureOtherThanMissingIsUnreadable)

Test Case: OverlayBelowRootIsNotAContainer TEST_CgroupTree_OverlayBelowRootIsNotAContainer
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L300 (Test: OverlayBelowRootIsNotAContainer)

Test Case: OverlayRootWithAHostCgroupPathIsNotAContainer TEST_CgroupTree_OverlayRootWithAHostCgroupPathIsNotAContainer
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L329 (Test: OverlayRootWithAHostCgroupPathIsNotAContainer)

Test Case: PresentButUnreadableLimitFileIsNotReportedAsAbsent TEST_CgroupTree_PresentButUnreadableLimitFileIsNotReportedAsAbsent
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L710 (Test: PresentButUnreadableLimitFileIsNotReportedAsAbsent)

Test Case: PrivateNamespaceDetectedByDockerMarker TEST_CgroupTree_PrivateNamespaceDetectedByDockerMarker
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L236 (Test: PrivateNamespaceDetectedByDockerMarker)

Test Case: PrivateNamespaceDetectedByOverlayRoot TEST_CgroupTree_PrivateNamespaceDetectedByOverlayRoot
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L270 (Test: PrivateNamespaceDetectedByOverlayRoot)

Test Case: PrivateNamespaceDetectedByPodmanMarker TEST_CgroupTree_PrivateNamespaceDetectedByPodmanMarker
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L257 (Test: PrivateNamespaceDetectedByPodmanMarker)

Test Case: StackedOverlayRootIsStillDetected TEST_CgroupTree_StackedOverlayRootIsStillDetected
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L339 (Test: StackedOverlayRootIsStillDetected)

Test Case: SystemdNspawnMarkerIsDetected TEST_CgroupTree_SystemdNspawnMarkerIsDetected
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L807 (Test: SystemdNspawnMarkerIsDetected)

Test Case: TrailingGarbageAfterNumberIsUnreadable TEST_CgroupTree_TrailingGarbageAfterNumberIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L632 (Test: TrailingGarbageAfterNumberIsUnreadable)

Test Case: UnifiedHierarchyAtACustomMountPointWithASubtreeRoot TEST_CgroupTree_UnifiedHierarchyAtACustomMountPointWithASubtreeRoot
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L820 (Test: UnifiedHierarchyAtACustomMountPointWithASubtreeRoot)

Test Case: UnlimitedUnifiedCpuDoesNotOutrankALimitedLegacyQuota TEST_CgroupTree_UnlimitedUnifiedCpuDoesNotOutrankALimitedLegacyQuota
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L778 (Test: UnlimitedUnifiedCpuDoesNotOutrankALimitedLegacyQuota)

Test Case: UnlimitedUnifiedDoesNotOutrankALimitedLegacyController TEST_CgroupTree_UnlimitedUnifiedDoesNotOutrankALimitedLegacyController
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L766 (Test: UnlimitedUnifiedDoesNotOutrankALimitedLegacyController)

Test Case: UnlimitedUnreadableAndAbsentAreThreeResults TEST_CgroupTree_UnlimitedUnreadableAndAbsentAreThreeResults
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L534 (Test: UnlimitedUnreadableAndAbsentAreThreeResults)

Test Case: UnreadableOwnCgroupIsNotMaskedByAnUnlimitedFallback TEST_CgroupTree_UnreadableOwnCgroupIsNotMaskedByAnUnlimitedFallback
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L684 (Test: UnreadableOwnCgroupIsNotMaskedByAnUnlimitedFallback)

Test Case: V1ControllerAtACustomMountPoint TEST_CgroupTree_V1ControllerAtACustomMountPoint
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L734 (Test: V1ControllerAtACustomMountPoint)

Test Case: V1CpuControllerMountedWithoutCpuacct TEST_CgroupTree_V1CpuControllerMountedWithoutCpuacct
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L429 (Test: V1CpuControllerMountedWithoutCpuacct)

Test Case: V1HostNamespaceJoinedPath TEST_CgroupTree_V1HostNamespaceJoinedPath
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L364 (Test: V1HostNamespaceJoinedPath)

Test Case: V1InsideContainerBareMountPoint TEST_CgroupTree_V1InsideContainerBareMountPoint
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L388 (Test: V1InsideContainerBareMountPoint)

Test Case: V1IsContainerized TEST_CgroupTree_V1IsContainerized
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L441 (Test: V1IsContainerized)

Test Case: V1MountExposingASubtreeStripsItFromThePath TEST_CgroupTree_V1MountExposingASubtreeStripsItFromThePath
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L750 (Test: V1MountExposingASubtreeStripsItFromThePath)

Test Case: V1QuotaMinusOneIsUnlimited TEST_CgroupTree_V1QuotaMinusOneIsUnlimited
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L658 (Test: V1QuotaMinusOneIsUnlimited)

Test Case: V1QuotaWithoutPeriodFileIsUnreadable TEST_CgroupTree_V1QuotaWithoutPeriodFileIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L601 (Test: V1QuotaWithoutPeriodFileIsUnreadable)

Test Case: V1RootFilesDoNotMaskContainerLimit TEST_CgroupTree_V1RootFilesDoNotMaskContainerLimit
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L407 (Test: V1RootFilesDoNotMaskContainerLimit)

Test Case: V1UnlimitedSentinelBoundary TEST_CgroupTree_V1UnlimitedSentinelBoundary
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L641 (Test: V1UnlimitedSentinelBoundary)

Test Case: V1ZeroPeriodIsUnreadable TEST_CgroupTree_V1ZeroPeriodIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L590 (Test: V1ZeroPeriodIsUnreadable)

Test Case: V2HostNamespaceJoinedPath TEST_CgroupTree_V2HostNamespaceJoinedPath
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L160 (Test: V2HostNamespaceJoinedPath)

Test Case: V2PrivateNamespaceNestedPathPrefersOwnCgroup TEST_CgroupTree_V2PrivateNamespaceNestedPathPrefersOwnCgroup
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L220 (Test: V2PrivateNamespaceNestedPathPrefersOwnCgroup)

Test Case: V2PrivateNamespaceNonRootPath TEST_CgroupTree_V2PrivateNamespaceNonRootPath
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L201 (Test: V2PrivateNamespaceNonRootPath)

Test Case: V2PrivateNamespaceRootPath TEST_CgroupTree_V2PrivateNamespaceRootPath
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L185 (Test: V2PrivateNamespaceRootPath)

Test Case: V2UnlimitedIsNotAbsent TEST_CgroupTree_V2UnlimitedIsNotAbsent
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L491 (Test: V2UnlimitedIsNotAbsent)

Test Case: V2UnreadableIsNotUnlimited TEST_CgroupTree_V2UnreadableIsNotUnlimited
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L507 (Test: V2UnreadableIsNotUnlimited)

Test Case: ValueBeyondTypeRangeIsUnreadable TEST_CgroupTree_ValueBeyondTypeRangeIsUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_cgroup_reader.cpp#L610 (Test: ValueBeyondTypeRangeIsUnreadable)

Test Case: ARefusalWordedAnyOtherWayIsStillAClientError TEST_ClassifyFaultFailureTest_ARefusalWordedAnyOtherWayIsStillAClientError
status: verified

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L690 (Test: ARefusalWordedAnyOtherWayIsStillAClientError)

Test Case: DeclinedIsAClientError TEST_ClassifyFaultFailureTest_DeclinedIsAClientError
status: verified

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L675 (Test: DeclinedIsAClientError)

Test Case: UnavailableIsAServerError TEST_ClassifyFaultFailureTest_UnavailableIsAServerError
status: verified

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L708 (Test: UnavailableIsAServerError)

Test Case: SortedContributors_EmptyStaysEmpty TEST_CommonTypesTest_SortedContributors_EmptyStaysEmpty
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L571 (Test: SortedContributors_EmptyStaysEmpty)

Test Case: SortedContributors_LocalFirstThenAlphabetical TEST_CommonTypesTest_SortedContributors_LocalFirstThenAlphabetical
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L559 (Test: SortedContributors_LocalFirstThenAlphabetical)

Test Case: SortedContributors_NoLocalIsAlphabetical TEST_CommonTypesTest_SortedContributors_NoLocalIsAlphabetical
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L565 (Test: SortedContributors_NoLocalIsAlphabetical)

Test Case: ToJson_ContainsRequiredFields TEST_ComponentModelTest_ToJson_ContainsRequiredFields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L139 (Test: ToJson_ContainsRequiredFields)

Test Case: EnterRange_NonNumericReturnsFalse TEST_ConditionEvaluator_EnterRange_NonNumericReturnsFalse
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_condition_evaluator.cpp#L239 (Test: EnterRange_NonNumericReturnsFalse)

Test Case: LeaveRange_NonNumericReturnsFalse TEST_ConditionEvaluator_LeaveRange_NonNumericReturnsFalse
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_condition_evaluator.cpp#L329 (Test: LeaveRange_NonNumericReturnsFalse)

Test Case: OnChangeTo_ValidateParams_MissingTarget TEST_ConditionEvaluator_OnChangeTo_ValidateParams_MissingTarget
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_condition_evaluator.cpp#L123 (Test: OnChangeTo_ValidateParams_MissingTarget)

Test Case: OnChangeTo_ValidateParams_Valid TEST_ConditionEvaluator_OnChangeTo_ValidateParams_Valid
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_condition_evaluator.cpp#L131 (Test: OnChangeTo_ValidateParams_Valid)

Test Case: OnChange_ValidateParams TEST_ConditionEvaluator_OnChange_ValidateParams
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_condition_evaluator.cpp#L64 (Test: OnChange_ValidateParams)

Test Case: CgroupInfoToJsonAllFields TEST_ContainerPlugin_CgroupInfoToJsonAllFields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_container_plugin.cpp#L21 (Test: CgroupInfoToJsonAllFields)

Test Case: CgroupInfoToJsonMissingOptionals TEST_ContainerPlugin_CgroupInfoToJsonMissingOptionals
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_container_plugin.cpp#L40 (Test: CgroupInfoToJsonMissingOptionals)

Test Case: CgroupInfoToJsonUnlimitedIsNotUnreadable TEST_ContainerPlugin_CgroupInfoToJsonUnlimitedIsNotUnreadable
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_container_plugin.cpp#L59 (Test: CgroupInfoToJsonUnlimitedIsNotUnreadable)

Test Case: NotContainerizedSkipped TEST_ContainerPlugin_NotContainerizedSkipped
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_container_plugin.cpp#L82 (Test: NotContainerizedSkipped)

Test Case: set_topic_data_provider_nullptr_detaches_provider TEST_DataAccessManagerWithPublisherTest_set_topic_data_provider_nullptr_detaches_provider
status: verified
verifies: REQ_INTEROP_019

Sanity: provider is attached after SetUp.

Implementation: src/ros2_medkit_gateway/test/test_data_access_manager.cpp#L246 (Test: set_topic_data_provider_nullptr_detaches_provider)

Test Case: DataCategoriesErrorBodyContainsFeatureParameter TEST_DataHandlersTest_DataCategoriesErrorBodyContainsFeatureParameter
status: verified
verifies: REQ_INTEROP_016

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L80 (Test: DataCategoriesErrorBodyContainsFeatureParameter)

Test Case: DataCategoriesErrorBodyContainsMessage TEST_DataHandlersTest_DataCategoriesErrorBodyContainsMessage
status: verified
verifies: REQ_INTEROP_016

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L71 (Test: DataCategoriesErrorBodyContainsMessage)

Test Case: DataCategoriesErrorCodeIsNotImplemented TEST_DataHandlersTest_DataCategoriesErrorCodeIsNotImplemented
status: verified
verifies: REQ_INTEROP_016

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L62 (Test: DataCategoriesErrorCodeIsNotImplemented)

Test Case: DataCategoriesReturns501 TEST_DataHandlersTest_DataCategoriesReturns501
status: verified
verifies: REQ_INTEROP_016

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L53 (Test: DataCategoriesReturns501)

Test Case: DataGroupsErrorBodyContainsFeatureParameter TEST_DataHandlersTest_DataGroupsErrorBodyContainsFeatureParameter
status: verified
verifies: REQ_INTEROP_017

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L121 (Test: DataGroupsErrorBodyContainsFeatureParameter)

Test Case: DataGroupsErrorBodyContainsMessage TEST_DataHandlersTest_DataGroupsErrorBodyContainsMessage
status: verified
verifies: REQ_INTEROP_017

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L112 (Test: DataGroupsErrorBodyContainsMessage)

Test Case: DataGroupsErrorCodeIsNotImplemented TEST_DataHandlersTest_DataGroupsErrorCodeIsNotImplemented
status: verified
verifies: REQ_INTEROP_017

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L103 (Test: DataGroupsErrorCodeIsNotImplemented)

Test Case: DataGroupsReturns501 TEST_DataHandlersTest_DataGroupsReturns501
status: verified
verifies: REQ_INTEROP_017

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L94 (Test: DataGroupsReturns501)

Test Case: GetDataItemBadRequestBodyContainsInvalidRequestErrorCode TEST_DataHandlersTest_GetDataItemBadRequestBodyContainsInvalidRequestErrorCode
status: verified
verifies: REQ_INTEROP_019

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L228 (Test: GetDataItemBadRequestBodyContainsInvalidRequestErrorCode)

Test Case: GetDataItemReturnsBadRequestWhenMatchesMissing TEST_DataHandlersTest_GetDataItemReturnsBadRequestWhenMatchesMissing
status: verified
verifies: REQ_INTEROP_019

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L219 (Test: GetDataItemReturnsBadRequestWhenMatchesMissing)

Test Case: ListDataBadRequestBodyContainsErrorCode TEST_DataHandlersTest_ListDataBadRequestBodyContainsErrorCode
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L144 (Test: ListDataBadRequestBodyContainsErrorCode)

Test Case: ListDataReturnsBadRequestWhenMatchesMissing TEST_DataHandlersTest_ListDataReturnsBadRequestWhenMatchesMissing
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L135 (Test: ListDataReturnsBadRequestWhenMatchesMissing)

Test Case: PutDataItemBadRequestBodyContainsInvalidRequestErrorCode TEST_DataHandlersTest_PutDataItemBadRequestBodyContainsInvalidRequestErrorCode
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L250 (Test: PutDataItemBadRequestBodyContainsInvalidRequestErrorCode)

Test Case: PutDataItemReturnsBadRequestWhenMatchesMissing TEST_DataHandlersTest_PutDataItemReturnsBadRequestWhenMatchesMissing
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_gateway/test/test_data_handlers.cpp#L241 (Test: PutDataItemReturnsBadRequestWhenMatchesMissing)

status: verified
verifies: REQ_INTEROP_044

Create a script that sleeps briefly

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L724 (Test: ConcurrencyLimit)

Test Case: ControlCompletedExecutionReturnsNotRunning TEST_DefaultScriptProviderTest_ControlCompletedExecutionReturnsNotRunning
status: verified
verifies: REQ_INTEROP_047

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L1014 (Test: ControlCompletedExecutionReturnsNotRunning)

status: verified
verifies: REQ_INTEROP_047

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L843 (Test: ControlStopExecution)

Test Case: CrossEntityExecutionAccessRejected TEST_DefaultScriptProviderTest_CrossEntityExecutionAccessRejected
status: verified
verifies: REQ_INTEROP_046

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L911 (Test: CrossEntityExecutionAccessRejected)

Test Case: DeleteManifestScriptFails TEST_DefaultScriptProviderTest_DeleteManifestScriptFails
status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L283 (Test: DeleteManifestScriptFails)

Test Case: DeleteNonexistentScriptFails TEST_DefaultScriptProviderTest_DeleteNonexistentScriptFails
status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L405 (Test: DeleteNonexistentScriptFails)

Test Case: DeleteScriptWithRunningExecutionBlocked TEST_DefaultScriptProviderTest_DeleteScriptWithRunningExecutionBlocked
status: verified
verifies: REQ_INTEROP_043

Create a long-running sleep script on the filesystem (uploaded, not manifest)

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L954 (Test: DeleteScriptWithRunningExecutionBlocked)

status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L256 (Test: DeleteUploadedScript)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L675 (Test: EnvVars)

status: verified
verifies: REQ_INTEROP_046

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L779 (Test: ExecutionNotFound)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L642 (Test: FlagArgs)

status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L222 (Test: GetManifestScript)

status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L295 (Test: GetNonexistentScript)

status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L237 (Test: GetUploadedScript)

Test Case: ListMergesManifestAndUploaded TEST_DefaultScriptProviderTest_ListMergesManifestAndUploaded
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L189 (Test: ListMergesManifestAndUploaded)

Test Case: ManifestScriptWithParametersSchema TEST_DefaultScriptProviderTest_ManifestScriptWithParametersSchema
status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L415 (Test: ManifestScriptWithParametersSchema)

status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L124 (Test: ManifestScriptsLoaded)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L609 (Test: NamedArgs)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L580 (Test: PositionalArgs)

Test Case: ScriptNotFoundExecution TEST_DefaultScriptProviderTest_ScriptNotFoundExecution
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L874 (Test: ScriptNotFoundExecution)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L699 (Test: StdinJsonFallback)

Test Case: SubprocessExecutionBash TEST_DefaultScriptProviderTest_SubprocessExecutionBash
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L483 (Test: SubprocessExecutionBash)

Test Case: SubprocessExecutionPython TEST_DefaultScriptProviderTest_SubprocessExecutionPython
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L459 (Test: SubprocessExecutionPython)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L500 (Test: SubprocessExecutionSh)

status: verified
verifies: REQ_INTEROP_044

Create a script that exits with code 1

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L517 (Test: SubprocessFailure)

status: verified
verifies: REQ_INTEROP_044

Create a script that sleeps for a long time

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L549 (Test: SubprocessTimeout)

Test Case: UnsupportedExecutionType TEST_DefaultScriptProviderTest_UnsupportedExecutionType
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L767 (Test: UnsupportedExecutionType)

Test Case: UploadDisabledReturnsError TEST_DefaultScriptProviderTest_UploadDisabledReturnsError
status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L1001 (Test: UploadDisabledReturnsError)

Test Case: UploadExceedingFileSizeRejected TEST_DefaultScriptProviderTest_UploadExceedingFileSizeRejected
status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L989 (Test: UploadExceedingFileSizeRejected)

status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L156 (Test: UploadToFilesystem)

Test Case: UploadWithParametersSchema TEST_DefaultScriptProviderTest_UploadWithParametersSchema
status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L337 (Test: UploadWithParametersSchema)

status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L354 (Test: UploadWithoutMetadata)

Test Case: UploadedScriptsIsolatedByEntity TEST_DefaultScriptProviderTest_UploadedScriptsIsolatedByEntity
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_default_script_provider.cpp#L429 (Test: UploadedScriptsIsolatedByEntity)

Test Case: AppBelongsToReturnsEmptyWhenAppHasNoComponent TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsEmptyWhenAppHasNoComponent
status: verified
verifies: REQ_INTEROP_106

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L898 (Test: AppBelongsToReturnsEmptyWhenAppHasNoComponent)

Test Case: AppBelongsToReturnsEmptyWhenComponentHasNoArea TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsEmptyWhenComponentHasNoArea
status: verified
verifies: REQ_INTEROP_106

Strip the parent component’s area assignment so the chain App->Component->Area breaks.

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L943 (Test: AppBelongsToReturnsEmptyWhenComponentHasNoArea)

Test Case: AppBelongsToReturnsMissingItemWhenAreaUnresolved TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsMissingItemWhenAreaUnresolved
status: verified
verifies: REQ_INTEROP_106

Reassign the parent component to an area id that does not exist in the catalogue.

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L968 (Test: AppBelongsToReturnsMissingItemWhenAreaUnresolved)

Test Case: AppBelongsToReturnsMissingItemWhenParentComponentUnresolved TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsMissingItemWhenParentComponentUnresolved
status: verified
verifies: REQ_INTEROP_106

Mirror of AppIsLocatedOnReturnsMissingItemWhenHostComponentUnresolved: surface a broken parent reference instead of silently returning items=[]. Lets HATEOAS clients tell ‘app has no parent area’ from ‘manifest broken, component gone’.

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L911 (Test: AppBelongsToReturnsMissingItemWhenParentComponentUnresolved)

Test Case: AppBelongsToReturnsParentArea TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsParentArea
status: verified
verifies: REQ_INTEROP_106

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L882 (Test: AppBelongsToReturnsParentArea)

Test Case: AppBelongsToUnknownAppReturns404 TEST_DiscoveryHandlersFixtureTest_AppBelongsToUnknownAppReturns404
status: verified
verifies: REQ_INTEROP_106

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1006 (Test: AppBelongsToUnknownAppReturns404)

Test Case: AppDependsOnReturnsResolvedAndMissingDependencies TEST_DiscoveryHandlersFixtureTest_AppDependsOnReturnsResolvedAndMissingDependencies
status: verified
verifies: REQ_INTEROP_009

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1016 (Test: AppDependsOnReturnsResolvedAndMissingDependencies)

Test Case: AppDependsOnUnknownAppReturns404 TEST_DiscoveryHandlersFixtureTest_AppDependsOnUnknownAppReturns404
status: verified
verifies: REQ_INTEROP_009

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1043 (Test: AppDependsOnUnknownAppReturns404)

Test Case: AppIsLocatedOnReturnsEmptyWhenAppHasNoComponent TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnReturnsEmptyWhenAppHasNoComponent
status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L817 (Test: AppIsLocatedOnReturnsEmptyWhenAppHasNoComponent)

Test Case: AppIsLocatedOnReturnsMissingItemWhenHostComponentUnresolved TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnReturnsMissingItemWhenHostComponentUnresolved
status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L831 (Test: AppIsLocatedOnReturnsMissingItemWhenHostComponentUnresolved)

Test Case: AppIsLocatedOnReturnsParentComponent TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnReturnsParentComponent
status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L800 (Test: AppIsLocatedOnReturnsParentComponent)

Test Case: AppIsLocatedOnUnknownAppReturns404 TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnUnknownAppReturns404
status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L871 (Test: AppIsLocatedOnUnknownAppReturns404)

Test Case: AreaComponentsReturnsMatchingComponentsOnly TEST_DiscoveryHandlersFixtureTest_AreaComponentsReturnsMatchingComponentsOnly
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L352 (Test: AreaComponentsReturnsMatchingComponentsOnly)

Test Case: AreaComponentsUnknownAreaReturns404 TEST_DiscoveryHandlersFixtureTest_AreaComponentsUnknownAreaReturns404
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L373 (Test: AreaComponentsUnknownAreaReturns404)

Test Case: ComponentDependsOnReturnsResolvedAndMissingDependencies TEST_DiscoveryHandlersFixtureTest_ComponentDependsOnReturnsResolvedAndMissingDependencies
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L699 (Test: ComponentDependsOnReturnsResolvedAndMissingDependencies)

Test Case: ComponentDependsOnUnknownComponentReturns404 TEST_DiscoveryHandlersFixtureTest_ComponentDependsOnUnknownComponentReturns404
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L724 (Test: ComponentDependsOnUnknownComponentReturns404)

Test Case: FunctionHostsReturnsHostingApps TEST_DiscoveryHandlersFixtureTest_FunctionHostsReturnsHostingApps
status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1128 (Test: FunctionHostsReturnsHostingApps)

Test Case: FunctionHostsUnknownFunctionReturns404 TEST_DiscoveryHandlersFixtureTest_FunctionHostsUnknownFunctionReturns404
status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1118 (Test: FunctionHostsUnknownFunctionReturns404)

Test Case: GetAppReturnsLinksAndCapabilities TEST_DiscoveryHandlersFixtureTest_GetAppReturnsLinksAndCapabilities
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L781 (Test: GetAppReturnsLinksAndCapabilities)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L759 (Test: GetAppUnknownIdReturns404)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L329 (Test: GetAreaUnknownIdReturns404)

Test Case: GetComponentReturnsRelationshipsAndCapabilities TEST_DiscoveryHandlersFixtureTest_GetComponentReturnsRelationshipsAndCapabilities
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L565 (Test: GetComponentReturnsRelationshipsAndCapabilities)

Test Case: GetContainsReturnsAreaComponents TEST_DiscoveryHandlersFixtureTest_GetContainsReturnsAreaComponents
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L415 (Test: GetContainsReturnsAreaComponents)

Test Case: GetContainsUnknownAreaReturns404 TEST_DiscoveryHandlersFixtureTest_GetContainsUnknownAreaReturns404
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L438 (Test: GetContainsUnknownAreaReturns404)

Test Case: GetFunctionOmitsGraphLinkWithoutAPlugin TEST_DiscoveryHandlersFixtureTest_GetFunctionOmitsGraphLinkWithoutAPlugin
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1095 (Test: GetFunctionOmitsGraphLinkWithoutAPlugin)

Test Case: GetFunctionUnknownIdReturns404 TEST_DiscoveryHandlersFixtureTest_GetFunctionUnknownIdReturns404
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1075 (Test: GetFunctionUnknownIdReturns404)

status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L665 (Test: GetHostsReturnsHostedApps)

Test Case: GetHostsUnknownComponentReturns404 TEST_DiscoveryHandlersFixtureTest_GetHostsUnknownComponentReturns404
status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L689 (Test: GetHostsUnknownComponentReturns404)

status: verified
verifies: REQ_INTEROP_004

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L383 (Test: GetSubareasReturnsChildAreas)

Test Case: GetSubareasUnknownAreaReturns404 TEST_DiscoveryHandlersFixtureTest_GetSubareasUnknownAreaReturns404
status: verified
verifies: REQ_INTEROP_004

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L405 (Test: GetSubareasUnknownAreaReturns404)

Test Case: GetSubcomponentsReturnsChildren TEST_DiscoveryHandlersFixtureTest_GetSubcomponentsReturnsChildren
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L579 (Test: GetSubcomponentsReturnsChildren)

Test Case: GetSubcomponentsUnknownComponentReturns404 TEST_DiscoveryHandlersFixtureTest_GetSubcomponentsUnknownComponentReturns404
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L654 (Test: GetSubcomponentsUnknownComponentReturns404)

Test Case: ListAppsReturnsSeededMetadata TEST_DiscoveryHandlersFixtureTest_ListAppsReturnsSeededMetadata
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L745 (Test: ListAppsReturnsSeededMetadata)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L307 (Test: ListAreasReturnsSeededItems)

Test Case: ListComponentsReturnsMetadata TEST_DiscoveryHandlersFixtureTest_ListComponentsReturnsMetadata
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L448 (Test: ListComponentsReturnsMetadata)

Test Case: ListFunctionsReturnsSeededFunctions TEST_DiscoveryHandlersFixtureTest_ListFunctionsReturnsSeededFunctions
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1063 (Test: ListFunctionsReturnsSeededFunctions)

status: verified
verifies: REQ_INTEROP_106

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L996 (Test: AppBelongsToInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_009

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1033 (Test: AppDependsOnInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L861 (Test: AppIsLocatedOnInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L363 (Test: AreaComponentsInvalidIdReturns400)

Test Case: ComponentDependsOnInvalidIdReturns400 TEST_DiscoveryHandlersValidationTest_ComponentDependsOnInvalidIdReturns400
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L713 (Test: ComponentDependsOnInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1108 (Test: FunctionHostsInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L735 (Test: GetAppInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L319 (Test: GetAreaInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_003

No path supplied -> regex_match runs over an empty path with no captures. path_param(“1”) yields ERR_INVALID_REQUEST/400 (the legacy req.matches.size() < 2 branch). The new typed handler signals that via tl::unexpected with status 400.

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L217 (Test: GetAreaMissingMatchesReturns400)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L555 (Test: GetComponentInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L428 (Test: GetContainsInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L1053 (Test: GetFunctionInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L679 (Test: GetHostsInvalidIdReturns400)

status: verified
verifies: REQ_INTEROP_004

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L395 (Test: GetSubareasInvalidIdReturns400)

Test Case: GetSubcomponentsInvalidIdReturns400 TEST_DiscoveryHandlersValidationTest_GetSubcomponentsInvalidIdReturns400
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_gateway/test/test_discovery_handlers.cpp#L643 (Test: GetSubcomponentsInvalidIdReturns400)

Test Case: SetTopicDataProviderNullptrIsAcceptedAfterAttach TEST_DiscoveryManagerTest_SetTopicDataProviderNullptrIsAcceptedAfterAttach
status: verified
verifies: REQ_INTEROP_018

The discovery manager has a provider attached in SetUp (line 57). The teardown sequence in main() (commit ab558e0d) calls GatewayNode::set_topic_data_provider(nullptr), which propagates through the discovery manager. Confirm that path does not throw and that subsequent discovery calls still work (no provider just means topic-map enrichment is skipped).

Implementation: src/ros2_medkit_gateway/test/test_discovery_manager.cpp#L86 (Test: SetTopicDataProviderNullptrIsAcceptedAfterAttach)

Test Case: DocsAnyPathReturns200ForEntityCollection TEST_DocsHandlersTest_DocsAnyPathReturns200ForEntityCollection
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_docs_handlers.cpp#L188 (Test: DocsAnyPathReturns200ForEntityCollection)

Test Case: DocsAnyPathReturns404ForInvalidPath TEST_DocsHandlersTest_DocsAnyPathReturns404ForInvalidPath
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_docs_handlers.cpp#L222 (Test: DocsAnyPathReturns404ForInvalidPath)

Test Case: DocsDisabledReturns501 TEST_DocsHandlersTest_DocsDisabledReturns501
status: verified
verifies: REQ_INTEROP_002

Override docs.enabled to false (GatewayNode already declares it as true by default)

Implementation: src/ros2_medkit_gateway/test/test_docs_handlers.cpp#L108 (Test: DocsDisabledReturns501)

Test Case: DocsRootReturnsValidJson TEST_DocsHandlersTest_DocsRootReturnsValidJson
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_docs_handlers.cpp#L127 (Test: DocsRootReturnsValidJson)

Test Case: BarePluginIdNeverMatchesSameNamedNode TEST_EntityDefaultCaptureTest_BarePluginIdNeverMatchesSameNamedNode
status: verified
verifies: REQ_INTEROP_088

A bare plugin entity id that happens to equal a live root-namespace node’s name (this test node) must not be parsed as (name, ns=”/”) and capture that unrelated node’s topics.

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L595 (Test: BarePluginIdNeverMatchesSameNamedNode)

Test Case: EntityDefaultCapturesSourceNodeTopics TEST_EntityDefaultCaptureTest_EntityDefaultCapturesSourceNodeTopics
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L456 (Test: EntityDefaultCapturesSourceNodeTopics)

Test Case: EntityDefaultDisabledWritesNoFreezeFrame TEST_EntityDefaultCaptureTest_EntityDefaultDisabledWritesNoFreezeFrame
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L492 (Test: EntityDefaultDisabledWritesNoFreezeFrame)

Test Case: ExplicitConfigWinsOverEntityDefault TEST_EntityDefaultCaptureTest_ExplicitConfigWinsOverEntityDefault
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L509 (Test: ExplicitConfigWinsOverEntityDefault)

Test Case: ExplicitEmptyConfigEntryOptsOutOfEntityDefault TEST_EntityDefaultCaptureTest_ExplicitEmptyConfigEntryOptsOutOfEntityDefault
status: verified
verifies: REQ_INTEROP_088

A present-but-empty fault_specific or pattern entry is an explicit “capture nothing for this code” and must not fall through to the entity-default capture of the node’s own topics.

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L544 (Test: ExplicitEmptyConfigEntryOptsOutOfEntityDefault)

Test Case: UnresolvableSourceWritesNoRow TEST_EntityDefaultCaptureTest_UnresolvableSourceWritesNoRow
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L579 (Test: UnresolvableSourceWritesNoRow)

Test Case: apps_collision_prefixed_gets_peer_contributor_only TEST_EntityMerger_apps_collision_prefixed_gets_peer_contributor_only
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L514 (Test: apps_collision_prefixed_gets_peer_contributor_only)

Test Case: apps_collision_sets_original_id TEST_EntityMerger_apps_collision_sets_original_id
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L305 (Test: apps_collision_sets_original_id)

Test Case: apps_prefix_on_collision TEST_EntityMerger_apps_prefix_on_collision
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L283 (Test: apps_prefix_on_collision)

Test Case: areas_merge_by_id TEST_EntityMerger_areas_merge_by_id
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L74 (Test: areas_merge_by_id)

Test Case: builds_routing_table_for_remote_entities TEST_EntityMerger_builds_routing_table_for_remote_entities
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L356 (Test: builds_routing_table_for_remote_entities)

Test Case: components_collision_appends_peer_contributor TEST_EntityMerger_components_collision_appends_peer_contributor
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L485 (Test: components_collision_appends_peer_contributor)

Test Case: components_merge_by_id TEST_EntityMerger_components_merge_by_id
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L177 (Test: components_merge_by_id)

Test Case: components_remote_only_gets_peer_contributor_only TEST_EntityMerger_components_remote_only_gets_peer_contributor_only
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L501 (Test: components_remote_only_gets_peer_contributor_only)

Test Case: contributors_no_duplicate_on_repeat_merge TEST_EntityMerger_contributors_no_duplicate_on_repeat_merge
status: verified
verifies: REQ_INTEROP_003

If the same peer is merged twice (defensive check), contributors must stay unique.

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L533 (Test: contributors_no_duplicate_on_repeat_merge)

Test Case: functions_merge_by_id_combining_hosts TEST_EntityMerger_functions_merge_by_id_combining_hosts
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L136 (Test: functions_merge_by_id_combining_hosts)

Test Case: merged_component_hybrid_synthetic_collision_routes_to_peer TEST_EntityMerger_merged_component_hybrid_synthetic_collision_routes_to_peer
status: verified
verifies: REQ_INTEROP_003

Scenario: primary in hybrid mode creates a synthetic component from its namespace (source “node”), and a peer announces a real component with the same ID. The peer is the authoritative owner of runtime state - all sub-resource requests (/logs, /hosts, /data, /operations) must forward to the peer instead of being handled locally.

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L407 (Test: merged_component_hybrid_synthetic_collision_routes_to_peer)

Test Case: multi_peer_overlapping_app_ids_no_data_loss TEST_EntityMerger_multi_peer_overlapping_app_ids_no_data_loss
status: verified
verifies: REQ_INTEROP_003

Scenario: local gateway has “camera_driver”, two different peers also have an app named “camera_driver”. After merging both peers sequentially (as AggregationManager does), all three apps must exist with correct routing.

Implementation: src/ros2_medkit_gateway/test/test_entity_merger.cpp#L652 (Test: multi_peer_overlapping_app_ids_no_data_loss)

Test Case: ListFaultsForEntityEmptyResult TEST_FaultEventPublishingTest_ListFaultsForEntityEmptyResult
status: verified
verifies: REQ_INTEROP_012

Report faults from a different entity

Implementation: src/ros2_medkit_fault_manager/test/test_fault_manager.cpp#L1481 (Test: ListFaultsForEntityEmptyResult)

Test Case: ListFaultsForEntitySuccess TEST_FaultEventPublishingTest_ListFaultsForEntitySuccess
status: verified
verifies: REQ_INTEROP_012

Report faults from different sources

Implementation: src/ros2_medkit_fault_manager/test/test_fault_manager.cpp#L1455 (Test: ListFaultsForEntitySuccess)

Test Case: ListFaultsForEntityWithEmptyId TEST_FaultEventPublishingTest_ListFaultsForEntityWithEmptyId
status: verified
verifies: REQ_INTEROP_012

Implementation: src/ros2_medkit_fault_manager/test/test_fault_manager.cpp#L1496 (Test: ListFaultsForEntityWithEmptyId)

Test Case: BuildSovdFaultResponseBasicFields TEST_FaultHandlersTest_BuildSovdFaultResponseBasicFields
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L58 (Test: BuildSovdFaultResponseBasicFields)

Test Case: BuildSovdFaultResponseExtendedDataRecords TEST_FaultHandlersTest_BuildSovdFaultResponseExtendedDataRecords
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L325 (Test: BuildSovdFaultResponseExtendedDataRecords)

Test Case: BuildSovdFaultResponseMixedSnapshots TEST_FaultHandlersTest_BuildSovdFaultResponseMixedSnapshots
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L403 (Test: BuildSovdFaultResponseMixedSnapshots)

Test Case: BuildSovdFaultResponseMultipleSources TEST_FaultHandlersTest_BuildSovdFaultResponseMultipleSources
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L385 (Test: BuildSovdFaultResponseMultipleSources)

Test Case: BuildSovdFaultResponseNestedEntityPath TEST_FaultHandlersTest_BuildSovdFaultResponseNestedEntityPath
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L203 (Test: BuildSovdFaultResponseNestedEntityPath)

Test Case: BuildSovdFaultResponsePrimaryValueExtraction TEST_FaultHandlersTest_BuildSovdFaultResponsePrimaryValueExtraction
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L348 (Test: BuildSovdFaultResponsePrimaryValueExtraction)

Test Case: BuildSovdFaultResponsePropagatesCaptureOrigin TEST_FaultHandlersTest_BuildSovdFaultResponsePropagatesCaptureOrigin
status: verified
verifies: REQ_INTEROP_088

Startup catch-up frames (entity freeze-frames taken for faults that were already confirmed at gateway start) carry capture_origin through to the wire x-medkit block, so consumers can tell them from confirm-time frames.

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L122 (Test: BuildSovdFaultResponsePropagatesCaptureOrigin)

Test Case: BuildSovdFaultResponseStatusCleared TEST_FaultHandlersTest_BuildSovdFaultResponseStatusCleared
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L221 (Test: BuildSovdFaultResponseStatusCleared)

Test Case: BuildSovdFaultResponseStatusPassive TEST_FaultHandlersTest_BuildSovdFaultResponseStatusPassive
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L239 (Test: BuildSovdFaultResponseStatusPassive)

Test Case: BuildSovdFaultResponseWithFreezeFrame TEST_FaultHandlersTest_BuildSovdFaultResponseWithFreezeFrame
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L94 (Test: BuildSovdFaultResponseWithFreezeFrame)

Test Case: BuildSovdFaultResponseWithInvalidJson TEST_FaultHandlersTest_BuildSovdFaultResponseWithInvalidJson
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L303 (Test: BuildSovdFaultResponseWithInvalidJson)

Test Case: BuildSovdFaultResponseWithRosbag TEST_FaultHandlersTest_BuildSovdFaultResponseWithRosbag
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_handlers.cpp#L176 (Test: BuildSovdFaultResponseWithRosbag)

Test Case: GetFaultRefusedByTheStoreReportsDeclined TEST_FaultManagerTest_GetFaultRefusedByTheStoreReportsDeclined
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L663 (Test: GetFaultRefusedByTheStoreReportsDeclined)

Test Case: GetFaultWithNoServiceReportsUnavailable TEST_FaultManagerTest_GetFaultWithNoServiceReportsUnavailable
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L647 (Test: GetFaultWithNoServiceReportsUnavailable)

Test Case: GetRosbagNotFound TEST_FaultManagerTest_GetRosbagNotFound
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L617 (Test: GetRosbagNotFound)

Test Case: GetRosbagServiceNotAvailable TEST_FaultManagerTest_GetRosbagServiceNotAvailable
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L352 (Test: GetRosbagServiceNotAvailable)

Test Case: GetRosbagSuccess TEST_FaultManagerTest_GetRosbagSuccess
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L366 (Test: GetRosbagSuccess)

Test Case: GetRosbagUsesConfiguredFaultManagerNamespace TEST_FaultManagerTest_GetRosbagUsesConfiguredFaultManagerNamespace
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L392 (Test: GetRosbagUsesConfiguredFaultManagerNamespace)

Test Case: GetSnapshotsEmptyResponse TEST_FaultManagerTest_GetSnapshotsEmptyResponse
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L330 (Test: GetSnapshotsEmptyResponse)

Test Case: GetSnapshotsErrorResponse TEST_FaultManagerTest_GetSnapshotsErrorResponse
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L290 (Test: GetSnapshotsErrorResponse)

Test Case: GetSnapshotsInvalidJsonFallback TEST_FaultManagerTest_GetSnapshotsInvalidJsonFallback
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L309 (Test: GetSnapshotsInvalidJsonFallback)

Test Case: GetSnapshotsServiceNotAvailable TEST_FaultManagerTest_GetSnapshotsServiceNotAvailable
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L131 (Test: GetSnapshotsServiceNotAvailable)

Test Case: GetSnapshotsSuccessWithTopicFilter TEST_FaultManagerTest_GetSnapshotsSuccessWithTopicFilter
status: verified
verifies: REQ_INTEROP_088

Create mock service that verifies topic filter is passed

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L269 (Test: GetSnapshotsSuccessWithTopicFilter)

Test Case: GetSnapshotsSuccessWithValidJson TEST_FaultManagerTest_GetSnapshotsSuccessWithValidJson
status: verified
verifies: REQ_INTEROP_088

Create mock service

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L145 (Test: GetSnapshotsSuccessWithValidJson)

Test Case: GetSnapshotsUsesConfiguredFaultManagerNamespace TEST_FaultManagerTest_GetSnapshotsUsesConfiguredFaultManagerNamespace
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_gateway/test/test_fault_manager.cpp#L209 (Test: GetSnapshotsUsesConfiguredFaultManagerNamespace)

Test Case: ToJson_ContainsRequiredFields TEST_FunctionModelTest_ToJson_ContainsRequiredFields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_discovery_models.cpp#L432 (Test: ToJson_ContainsRequiredFields)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_function_resource_collections.cpp#L173 (Test: AreaSupportsFaults)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_function_resource_collections.cpp#L215 (Test: FunctionChildAppIds)

Test Case: FunctionDataAggregatesFromHostedApps TEST_FunctionResourceCollections_FunctionDataAggregatesFromHostedApps
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_function_resource_collections.cpp#L304 (Test: FunctionDataAggregatesFromHostedApps)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_function_resource_collections.cpp#L126 (Test: FunctionSupportsFaults)

Test Case: DefaultAllowsAll TEST_GapFillConfigTest_DefaultAllowsAll
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L613 (Test: DefaultAllowsAll)

Test Case: NamespaceBlacklistFiltersAreas TEST_GapFillConfigTest_NamespaceBlacklistFiltersAreas
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L1089 (Test: NamespaceBlacklistFiltersAreas)

Test Case: NamespaceWhitelistFiltersAreas TEST_GapFillConfigTest_NamespaceWhitelistFiltersAreas
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L1074 (Test: NamespaceWhitelistFiltersAreas)

Test Case: RegistersFunctionCapabilityOnContext TEST_GraphProviderPluginRouteTest_RegistersFunctionCapabilityOnContext
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_plugins/ros2_medkit_graph_provider/test/test_graph_provider_plugin.cpp#L1544 (Test: RegistersFunctionCapabilityOnContext)

Test Case: RegistersSamplerForCyclicSubscriptions TEST_GraphProviderPluginRouteTest_RegistersSamplerForCyclicSubscriptions
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_plugins/ros2_medkit_graph_provider/test/test_graph_provider_plugin.cpp#L1638 (Test: RegistersSamplerForCyclicSubscriptions)

Test Case: ServesFunctionGraphFromCachedSnapshot TEST_GraphProviderPluginRouteTest_ServesFunctionGraphFromCachedSnapshot
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_plugins/ros2_medkit_graph_provider/test/test_graph_provider_plugin.cpp#L1507 (Test: ServesFunctionGraphFromCachedSnapshot)

Test Case: HandleRootAuthDisabledNoAuthEndpoints TEST_HealthHandlersTest_HandleRootAuthDisabledNoAuthEndpoints
status: verified
verifies: REQ_INTEROP_010

With auth disabled (default), auth endpoints must not appear in the list

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L218 (Test: HandleRootAuthDisabledNoAuthEndpoints)

Test Case: HandleRootAuthEnabledAddsAuthEndpoints TEST_HealthHandlersTest_HandleRootAuthEnabledAddsAuthEndpoints
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L243 (Test: HandleRootAuthEnabledAddsAuthEndpoints)

Test Case: HandleRootAuthEnabledIncludesAuthMetadataBlock TEST_HealthHandlersTest_HandleRootAuthEnabledIncludesAuthMetadataBlock
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L272 (Test: HandleRootAuthEnabledIncludesAuthMetadataBlock)

Test Case: HandleRootCapabilitiesAuthDisabled TEST_HealthHandlersTest_HandleRootCapabilitiesAuthDisabled
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L228 (Test: HandleRootCapabilitiesAuthDisabled)

Test Case: HandleRootCapabilitiesContainsDiscovery TEST_HealthHandlersTest_HandleRootCapabilitiesContainsDiscovery
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L211 (Test: HandleRootCapabilitiesContainsDiscovery)

Test Case: HandleRootCapabilitiesTlsDisabled TEST_HealthHandlersTest_HandleRootCapabilitiesTlsDisabled
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L235 (Test: HandleRootCapabilitiesTlsDisabled)

Test Case: HandleRootEndpointsIsNonEmptyArray TEST_HealthHandlersTest_HandleRootEndpointsIsNonEmptyArray
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L204 (Test: HandleRootEndpointsIsNonEmptyArray)

Test Case: HandleRootResponseContainsRequiredTopLevelFields TEST_HealthHandlersTest_HandleRootResponseContainsRequiredTopLevelFields
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L193 (Test: HandleRootResponseContainsRequiredTopLevelFields)

Test Case: HandleRootTlsEnabledIncludesTlsMetadataBlock TEST_HealthHandlersTest_HandleRootTlsEnabledIncludesTlsMetadataBlock
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L290 (Test: HandleRootTlsEnabledIncludesTlsMetadataBlock)

Test Case: HandleVersionInfoContainsItemsArray TEST_HealthHandlersTest_HandleVersionInfoContainsItemsArray
status: verified
verifies: REQ_INTEROP_001

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L159 (Test: HandleVersionInfoContainsItemsArray)

Test Case: HandleVersionInfoItemsEntryHasBaseUri TEST_HealthHandlersTest_HandleVersionInfoItemsEntryHasBaseUri
status: verified
verifies: REQ_INTEROP_001

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L174 (Test: HandleVersionInfoItemsEntryHasBaseUri)

Test Case: HandleVersionInfoItemsEntryHasVendorInfo TEST_HealthHandlersTest_HandleVersionInfoItemsEntryHasVendorInfo
status: verified
verifies: REQ_INTEROP_001

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L182 (Test: HandleVersionInfoItemsEntryHasVendorInfo)

Test Case: HandleVersionInfoItemsEntryHasVersionField TEST_HealthHandlersTest_HandleVersionInfoItemsEntryHasVersionField
status: verified
verifies: REQ_INTEROP_001

Implementation: src/ros2_medkit_gateway/test/test_health_handlers.cpp#L166 (Test: HandleVersionInfoItemsEntryHasVersionField)

Test Case: creates_default_component TEST_HostInfoProviderTest_creates_default_component
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_host_info_provider.cpp#L40 (Test: creates_default_component)

Test Case: sanitizes_hostname_to_valid_entity_id TEST_HostInfoProviderTest_sanitizes_hostname_to_valid_entity_id
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_host_info_provider.cpp#L70 (Test: sanitizes_hostname_to_valid_entity_id)

Test Case: ParsesValidIntervals TEST_IntervalParsingTest_ParsesValidIntervals
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_gateway/test/test_subscription_manager.cpp#L28 (Test: ParsesValidIntervals)

Test Case: ExpiredTriggerMarkedTerminatedOnLoad TEST_LoadPersistentTriggers_ExpiredTriggerMarkedTerminatedOnLoad
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L923 (Test: ExpiredTriggerMarkedTerminatedOnLoad)

Test Case: NewTriggerIdIsHigherThanRestoredId TEST_LoadPersistentTriggers_NewTriggerIdIsHigherThanRestoredId
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L959 (Test: NewTriggerIdIsHigherThanRestoredId)

Test Case: ResetBehaviorDoesNotRestoreTriggers TEST_LoadPersistentTriggers_ResetBehaviorDoesNotRestoreTriggers
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L898 (Test: ResetBehaviorDoesNotRestoreTriggers)

Test Case: RestoreBehaviorLoadsActiveTrigger TEST_LoadPersistentTriggers_RestoreBehaviorLoadsActiveTrigger
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L867 (Test: RestoreBehaviorLoadsActiveTrigger)

Test Case: test_acquire_already_locked TEST_LockManagerTest_test_acquire_already_locked
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L183 (Test: test_acquire_already_locked)

Test Case: test_acquire_break_lock TEST_LockManagerTest_test_acquire_break_lock
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L198 (Test: test_acquire_break_lock)

Test Case: test_acquire_break_lock_not_breakable TEST_LockManagerTest_test_acquire_break_lock_not_breakable
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L218 (Test: test_acquire_break_lock_not_breakable)

Test Case: test_acquire_invalid_expiration TEST_LockManagerTest_test_acquire_invalid_expiration
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L243 (Test: test_acquire_invalid_expiration)

Test Case: test_acquire_invalid_scope TEST_LockManagerTest_test_acquire_invalid_scope
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L233 (Test: test_acquire_invalid_scope)

Test Case: test_acquire_lock_basic TEST_LockManagerTest_test_acquire_lock_basic
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L144 (Test: test_acquire_lock_basic)

Test Case: test_acquire_lock_full TEST_LockManagerTest_test_acquire_lock_full
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L172 (Test: test_acquire_lock_full)

Test Case: test_acquire_lock_scoped TEST_LockManagerTest_test_acquire_lock_scoped
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L160 (Test: test_acquire_lock_scoped)

Test Case: test_check_access_area_propagation TEST_LockManagerTest_test_check_access_area_propagation
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L475 (Test: test_check_access_area_propagation)

Test Case: test_check_access_not_owner TEST_LockManagerTest_test_check_access_not_owner
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L412 (Test: test_check_access_not_owner)

Test Case: test_check_access_owner TEST_LockManagerTest_test_check_access_owner
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L402 (Test: test_check_access_owner)

Test Case: test_check_access_parent_propagation TEST_LockManagerTest_test_check_access_parent_propagation
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L453 (Test: test_check_access_parent_propagation)

Test Case: test_check_access_partial_scope_propagation TEST_LockManagerTest_test_check_access_partial_scope_propagation
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L498 (Test: test_check_access_partial_scope_propagation)

Test Case: test_check_access_scoped_match TEST_LockManagerTest_test_check_access_scoped_match
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L425 (Test: test_check_access_scoped_match)

Test Case: test_check_access_scoped_no_match TEST_LockManagerTest_test_check_access_scoped_no_match
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L441 (Test: test_check_access_scoped_no_match)

Test Case: test_check_access_unlocked TEST_LockManagerTest_test_check_access_unlocked
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L393 (Test: test_check_access_unlocked)

Test Case: test_cleanup_expired TEST_LockManagerTest_test_cleanup_expired
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L518 (Test: test_cleanup_expired)

Test Case: test_cleanup_not_expired TEST_LockManagerTest_test_cleanup_not_expired
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L541 (Test: test_cleanup_not_expired)

Test Case: test_config_disabled TEST_LockManagerTest_test_config_disabled
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L604 (Test: test_config_disabled)

Test Case: test_extend_lock TEST_LockManagerTest_test_extend_lock
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L312 (Test: test_extend_lock)

Test Case: test_extend_not_found TEST_LockManagerTest_test_extend_not_found
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L343 (Test: test_extend_not_found)

Test Case: test_extend_not_owner TEST_LockManagerTest_test_extend_not_owner
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L331 (Test: test_extend_not_owner)

Test Case: test_get_lock TEST_LockManagerTest_test_get_lock
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L357 (Test: test_get_lock)

Test Case: test_get_lock_by_id TEST_LockManagerTest_test_get_lock_by_id
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L373 (Test: test_get_lock_by_id)

Test Case: test_lock_required_different_collection_not_blocked TEST_LockManagerTest_test_lock_required_different_collection_not_blocked
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L587 (Test: test_lock_required_different_collection_not_blocked)

Test Case: test_lock_required_has_lock TEST_LockManagerTest_test_lock_required_has_lock
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L572 (Test: test_lock_required_has_lock)

Test Case: test_lock_required_no_lock_held TEST_LockManagerTest_test_lock_required_no_lock_held
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L558 (Test: test_lock_required_no_lock_held)

Test Case: test_release_lock TEST_LockManagerTest_test_release_lock
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L268 (Test: test_release_lock)

Test Case: test_release_not_found TEST_LockManagerTest_test_release_not_found
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L298 (Test: test_release_not_found)

Test Case: test_release_not_owner TEST_LockManagerTest_test_release_not_owner
status: verified
verifies: REQ_INTEROP_100

Implementation: src/ros2_medkit_gateway/test/test_lock_manager.cpp#L283 (Test: test_release_not_owner)

Test Case: GetLogsConfigurationErrorCarriesInvalidRequestCode TEST_LogHandlersTest_GetLogsConfigurationErrorCarriesInvalidRequestCode
status: verified
verifies: REQ_INTEROP_063

Implementation: src/ros2_medkit_gateway/test/test_log_handlers.cpp#L89 (Test: GetLogsConfigurationErrorCarriesInvalidRequestCode)

Test Case: GetLogsConfigurationReturnsBadRequestWhenCaptureMissing TEST_LogHandlersTest_GetLogsConfigurationReturnsBadRequestWhenCaptureMissing
status: verified
verifies: REQ_INTEROP_063

Implementation: src/ros2_medkit_gateway/test/test_log_handlers.cpp#L80 (Test: GetLogsConfigurationReturnsBadRequestWhenCaptureMissing)

Test Case: GetLogsErrorCarriesInvalidRequestCode TEST_LogHandlersTest_GetLogsErrorCarriesInvalidRequestCode
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_handlers.cpp#L67 (Test: GetLogsErrorCarriesInvalidRequestCode)

Test Case: GetLogsReturnsBadRequestWhenCaptureMissing TEST_LogHandlersTest_GetLogsReturnsBadRequestWhenCaptureMissing
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_handlers.cpp#L58 (Test: GetLogsReturnsBadRequestWhenCaptureMissing)

Test Case: PutLogsConfigurationErrorCarriesInvalidRequestCode TEST_LogHandlersTest_PutLogsConfigurationErrorCarriesInvalidRequestCode
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_handlers.cpp#L111 (Test: PutLogsConfigurationErrorCarriesInvalidRequestCode)

Test Case: PutLogsConfigurationReturnsBadRequestWhenCaptureMissing TEST_LogHandlersTest_PutLogsConfigurationReturnsBadRequestWhenCaptureMissing
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_handlers.cpp#L102 (Test: PutLogsConfigurationReturnsBadRequestWhenCaptureMissing)

Test Case: AddLogEntry_EmptyMetadataNoSuffix TEST_LogManagerBufferTest_AddLogEntry_EmptyMetadataNoSuffix
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L366 (Test: AddLogEntry_EmptyMetadataNoSuffix)

Test Case: AddLogEntry_EntryRetrievable TEST_LogManagerBufferTest_AddLogEntry_EntryRetrievable
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L328 (Test: AddLogEntry_EntryRetrievable)

Test Case: AddLogEntry_InvalidSeverityFallsBackToInfo TEST_LogManagerBufferTest_AddLogEntry_InvalidSeverityFallsBackToInfo
status: verified
verifies: REQ_INTEROP_061

“verbose” is not a valid SOVD severity; implementation falls back to INFO (level 20)

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L340 (Test: AddLogEntry_InvalidSeverityFallsBackToInfo)

Test Case: AddLogEntry_MetadataAppendedToMessage TEST_LogManagerBufferTest_AddLogEntry_MetadataAppendedToMessage
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L352 (Test: AddLogEntry_MetadataAppendedToMessage)

Test Case: BufferCapDropsNewNodesWhenFull TEST_LogManagerBufferTest_BufferCapDropsNewNodesWhenFull
status: verified
verifies: REQ_INTEROP_061

LogManager was created with buffer size 3 in the fixture. Buffer cap = size * 10 = 30 distinct nodes. Create a fresh manager with buffer size 5 so cap = 50.

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L893 (Test: BufferCapDropsNewNodesWhenFull)

Test Case: ContextFilterMatchesSubstring TEST_LogManagerBufferTest_ContextFilterMatchesSubstring
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L283 (Test: ContextFilterMatchesSubstring)

Test Case: FqnWithLeadingSlashMatchesBuffer TEST_LogManagerBufferTest_FqnWithLeadingSlashMatchesBuffer
status: verified
verifies: REQ_INTEROP_061

Buffer stores entries under “my_ns/my_node” (no leading slash) Entity FQN from entity cache is “/my_ns/my_node” (with leading slash) get_logs() must normalize and still find the entries

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L215 (Test: FqnWithLeadingSlashMatchesBuffer)

Test Case: GetConfigReturnsDefaultsForUnknownEntity TEST_LogManagerBufferTest_GetConfigReturnsDefaultsForUnknownEntity
status: verified
verifies: REQ_INTEROP_063

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L389 (Test: GetConfigReturnsDefaultsForUnknownEntity)

Test Case: GetLogsMatchesDotNotationLoggerNames TEST_LogManagerBufferTest_GetLogsMatchesDotNotationLoggerNames
status: verified
verifies: REQ_INTEROP_061

ROS 2 rosout messages carry logger names using ‘.’ as separator (e.g. “powertrain.engine.temp_sensor”) while entity FQNs use ‘/’. get_logs() must match entries stored under dot-format keys.

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L296 (Test: GetLogsMatchesDotNotationLoggerNames)

Test Case: GetLogsPrefixMatchesDotNotationLoggerNames TEST_LogManagerBufferTest_GetLogsPrefixMatchesDotNotationLoggerNames
status: verified
verifies: REQ_INTEROP_061

Component namespace prefix matching must also work against dot-format logger names.

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L311 (Test: GetLogsPrefixMatchesDotNotationLoggerNames)

Test Case: MaxEntriesCapsMostRecentEntries TEST_LogManagerBufferTest_MaxEntriesCapsMostRecentEntries
status: verified
verifies: REQ_INTEROP_061

Inject 5 entries, set max_entries=2 via config

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L267 (Test: MaxEntriesCapsMostRecentEntries)

Test Case: PartialConfigUpdatePreservesOtherField TEST_LogManagerBufferTest_PartialConfigUpdatePreservesOtherField
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L397 (Test: PartialConfigUpdatePreservesOtherField)

Test Case: PrefixMatchDoesNotFalsePositiveOnSubstring TEST_LogManagerBufferTest_PrefixMatchDoesNotFalsePositiveOnSubstring
status: verified
verifies: REQ_INTEROP_061

“engine” must NOT match “engine_control” (only full namespace segments)

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L257 (Test: PrefixMatchDoesNotFalsePositiveOnSubstring)

Test Case: PrefixMatchIncludesChildNamespaces TEST_LogManagerBufferTest_PrefixMatchIncludesChildNamespaces
status: verified
verifies: REQ_INTEROP_061

Component “engine” prefix-matches “engine/temp_sensor” and “engine/pressure” but NOT “engine_control/sensor” (different namespace)

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L242 (Test: PrefixMatchIncludesChildNamespaces)

Test Case: RingBufferEvictsOldestEntryWhenFull TEST_LogManagerBufferTest_RingBufferEvictsOldestEntryWhenFull
status: verified
verifies: REQ_INTEROP_061

Buffer size is 3; inject 4 entries for the same node

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L198 (Test: RingBufferEvictsOldestEntryWhenFull)

Test Case: SeverityFilterExcludesLowerLevels TEST_LogManagerBufferTest_SeverityFilterExcludesLowerLevels
status: verified
verifies: REQ_INTEROP_061

inject debug(10), info(20), warning(30)

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L228 (Test: SeverityFilterExcludesLowerLevels)

Test Case: UpdateConfigRejectsInvalidSeverity TEST_LogManagerBufferTest_UpdateConfigRejectsInvalidSeverity
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L377 (Test: UpdateConfigRejectsInvalidSeverity)

Test Case: UpdateConfigRejectsZeroMaxEntries TEST_LogManagerBufferTest_UpdateConfigRejectsZeroMaxEntries
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L383 (Test: UpdateConfigRejectsZeroMaxEntries)

status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L149 (Test: AllSeverityLevels)

status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L98 (Test: BasicFields)

Test Case: EmptyOptionalFieldsOmitted TEST_LogManagerEntryToJsonTest_EmptyOptionalFieldsOmitted
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L128 (Test: EmptyOptionalFieldsOmitted)

Test Case: NormalizeEmptyStringUnchanged TEST_LogManagerFqnTest_NormalizeEmptyStringUnchanged
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L93 (Test: NormalizeEmptyStringUnchanged)

Test Case: NormalizeNoLeadingSlashUnchanged TEST_LogManagerFqnTest_NormalizeNoLeadingSlashUnchanged
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L87 (Test: NormalizeNoLeadingSlashUnchanged)

Test Case: NormalizeStripsLeadingSlash TEST_LogManagerFqnTest_NormalizeStripsLeadingSlash
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L81 (Test: NormalizeStripsLeadingSlash)

Test Case: DefaultManagesIngestionPreservesCurrentBehavior TEST_LogManagerIngestionTest_DefaultManagesIngestionPreservesCurrentBehavior
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L667 (Test: DefaultManagesIngestionPreservesCurrentBehavior)

Test Case: ManagesIngestionDelegatesToPlugin TEST_LogManagerIngestionTest_ManagesIngestionDelegatesToPlugin
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L593 (Test: ManagesIngestionDelegatesToPlugin)

Test Case: ManagesIngestionGetConfigDelegatesToPlugin TEST_LogManagerIngestionTest_ManagesIngestionGetConfigDelegatesToPlugin
status: verified
verifies: REQ_INTEROP_063

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L627 (Test: ManagesIngestionGetConfigDelegatesToPlugin)

Test Case: ManagesIngestionLocalBufferBypassed TEST_LogManagerIngestionTest_ManagesIngestionLocalBufferBypassed
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L646 (Test: ManagesIngestionLocalBufferBypassed)

Test Case: ManagesIngestionStillValidatesBeforeDelegation TEST_LogManagerIngestionTest_ManagesIngestionStillValidatesBeforeDelegation
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L702 (Test: ManagesIngestionStillValidatesBeforeDelegation)

Test Case: ManagesIngestionUpdateConfigDelegatesToPlugin TEST_LogManagerIngestionTest_ManagesIngestionUpdateConfigDelegatesToPlugin
status: verified
verifies: REQ_INTEROP_064

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L611 (Test: ManagesIngestionUpdateConfigDelegatesToPlugin)

Test Case: NoPluginPreservesDefaultBehavior TEST_LogManagerIngestionTest_NoPluginPreservesDefaultBehavior
status: verified
verifies: REQ_INTEROP_061

No plugin manager at all - ring buffer works as before

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L686 (Test: NoPluginPreservesDefaultBehavior)

Test Case: PluginGetConfigThrowReturnsError TEST_LogManagerIngestionTest_PluginGetConfigThrowReturnsError
status: verified
verifies: REQ_INTEROP_063

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L735 (Test: PluginGetConfigThrowReturnsError)

Test Case: PluginGetLogsThrowReturnsError TEST_LogManagerIngestionTest_PluginGetLogsThrowReturnsError
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L723 (Test: PluginGetLogsThrowReturnsError)

Test Case: ResolverMatchesBareNameReturnsEntityId TEST_LogManagerResolverTest_ResolverMatchesBareNameReturnsEntityId
status: verified
verifies: REQ_INTEROP_061

Resolver returns “my_app” when called with bare name (no leading slash)

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L853 (Test: ResolverMatchesBareNameReturnsEntityId)

Test Case: ResolverMatchesWithSlashPrefixReturnsEntityId TEST_LogManagerResolverTest_ResolverMatchesWithSlashPrefixReturnsEntityId
status: verified
verifies: REQ_INTEROP_061

Resolver returns “temp_sensor_app” when called with “/powertrain/temp_sensor”

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L832 (Test: ResolverMatchesWithSlashPrefixReturnsEntityId)

Test Case: ResolverReturnsEmptyFallsBackToLastSegment TEST_LogManagerResolverTest_ResolverReturnsEmptyFallsBackToLastSegment
status: verified
verifies: REQ_INTEROP_061

Resolver always returns empty -> on_rosout falls back to last path segment

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L872 (Test: ResolverReturnsEmptyFallsBackToLastSegment)

status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L67 (Test: IsValidSeverity)

Test Case: LevelToSeverityMapping TEST_LogManagerSeverityTest_LevelToSeverityMapping
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L41 (Test: LevelToSeverityMapping)

Test Case: SeverityToLevelMapping TEST_LogManagerSeverityTest_SeverityToLevelMapping
status: verified
verifies: REQ_INTEROP_061

Implementation: src/ros2_medkit_gateway/test/test_log_manager.cpp#L53 (Test: SeverityToLevelMapping)

Test Case: DefaultPolicies TEST_ManifestLayerTest_DefaultPolicies
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L427 (Test: DefaultPolicies)

Test Case: ParseScripts TEST_ManifestParserTest_ParseScripts
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_manifest_parser.cpp#L704 (Test: ParseScripts)

Test Case: ParseScriptsMissingFormat TEST_ManifestParserTest_ParseScriptsMissingFormat
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_manifest_parser.cpp#L858 (Test: ParseScriptsMissingFormat)

Test Case: ParseScriptsMissingId TEST_ManifestParserTest_ParseScriptsMissingId
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_manifest_parser.cpp#L834 (Test: ParseScriptsMissingId)

Test Case: ParseScriptsMissingPath TEST_ManifestParserTest_ParseScriptsMissingPath
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_manifest_parser.cpp#L846 (Test: ParseScriptsMissingPath)

Test Case: ParseScriptsTimeoutClampedToMinimum TEST_ManifestParserTest_ParseScriptsTimeoutClampedToMinimum
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_manifest_parser.cpp#L870 (Test: ParseScriptsTimeoutClampedToMinimum)

Test Case: default_config_values TEST_MdnsDiscovery_default_config_values
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_mdns_discovery.cpp#L30 (Test: default_config_values)

Test Case: instance_name_returns_explicit_name TEST_MdnsDiscovery_instance_name_returns_explicit_name
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_mdns_discovery.cpp#L263 (Test: instance_name_returns_explicit_name)

Test Case: respects_announce_flag TEST_MdnsDiscovery_respects_announce_flag
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_mdns_discovery.cpp#L42 (Test: respects_announce_flag)

Test Case: start_announce_on_ephemeral_port_does_not_crash TEST_MdnsDiscovery_start_announce_on_ephemeral_port_does_not_crash
status: verified
verifies: REQ_INTEROP_003

Exercise the socket creation path. In CI containers mDNS port 5353 may not be available (requires CAP_NET_BIND_SERVICE or root). The announce_loop should handle the failure gracefully via the error callback rather than crashing.

Implementation: src/ros2_medkit_gateway/test/test_mdns_discovery.cpp#L362 (Test: start_announce_on_ephemeral_port_does_not_crash)

Test Case: AppStatusMerge_BoolOrSemantics TEST_MergePipelineTest_AppStatusMerge_BoolOrSemantics
status: verified
verifies: REQ_INTEROP_003

Two layers provide the same App with different is_online values

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L937 (Test: AppStatusMerge_BoolOrSemantics)

Test Case: LayerExceptionDoesNotCrashPipeline TEST_MergePipelineTest_LayerExceptionDoesNotCrashPipeline
status: verified
verifies: REQ_INTEROP_003

A good layer followed by a throwing layer - good layer’s data should survive

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L1121 (Test: LayerExceptionDoesNotCrashPipeline)

Test Case: PluginReceivesDiscoveryContext TEST_MergePipelineTest_PluginReceivesDiscoveryContext
status: verified
verifies: REQ_INTEROP_003

Manifest layer provides a component

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L531 (Test: PluginReceivesDiscoveryContext)

Test Case: ThreeLayerMerge_PerFieldGroupOwnerTracking TEST_MergePipelineTest_ThreeLayerMerge_PerFieldGroupOwnerTracking
status: verified
verifies: REQ_INTEROP_003

Regression test: verify that when Runtime wins STATUS (AUTH) over Manifest (FALLBACK), a Plugin (ENRICH) cannot override Runtime’s authoritative STATUS. Previously, owner_layer_idx was fixed to first layer, so Plugin compared against Manifest’s FALLBACK policy instead of Runtime’s AUTH, incorrectly winning STATUS.

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L963 (Test: ThreeLayerMerge_PerFieldGroupOwnerTracking)

Test Case: ThreeLayerMerge_PluginEnrichesManifestEntity TEST_MergePipelineTest_ThreeLayerMerge_PluginEnrichesManifestEntity
status: verified
verifies: REQ_INTEROP_003

Manifest: component “engine” with AUTHORITATIVE identity

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L880 (Test: ThreeLayerMerge_PluginEnrichesManifestEntity)

Test Case: MergePolicyValues TEST_MergeTypesTest_MergePolicyValues
status: verified
verifies: REQ_INTEROP_003

Verify enum values exist and are distinct

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L73 (Test: MergePolicyValues)

Test Case: AlwaysIncludesGenericErrorResponse TEST_OpenApiSpecBuilderTest_AlwaysIncludesGenericErrorResponse
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L189 (Test: AlwaysIncludesGenericErrorResponse)

Test Case: BuildContainsComponentsSchemas TEST_OpenApiSpecBuilderTest_BuildContainsComponentsSchemas
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L167 (Test: BuildContainsComponentsSchemas)

Test Case: BuildContainsInfoBlock TEST_OpenApiSpecBuilderTest_BuildContainsInfoBlock
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L39 (Test: BuildContainsInfoBlock)

Test Case: BuildContainsPathsObject TEST_OpenApiSpecBuilderTest_BuildContainsPathsObject
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L131 (Test: BuildContainsPathsObject)

Test Case: BuildContainsServersArray TEST_OpenApiSpecBuilderTest_BuildContainsServersArray
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L91 (Test: BuildContainsServersArray)

Test Case: BuildContainsSovdVersion TEST_OpenApiSpecBuilderTest_BuildContainsSovdVersion
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L47 (Test: BuildContainsSovdVersion)

Test Case: BuildProducesOpenApi310Version TEST_OpenApiSpecBuilderTest_BuildProducesOpenApi310Version
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L32 (Test: BuildProducesOpenApi310Version)

Test Case: FluentInterfaceChaining TEST_OpenApiSpecBuilderTest_FluentInterfaceChaining
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L297 (Test: FluentInterfaceChaining)

Test Case: GenericErrorSchemaAlwaysPresent TEST_OpenApiSpecBuilderTest_GenericErrorSchemaAlwaysPresent
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L363 (Test: GenericErrorSchemaAlwaysPresent)

Test Case: NonEmptySchemasArePresentInOutput TEST_OpenApiSpecBuilderTest_NonEmptySchemasArePresentInOutput
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L373 (Test: NonEmptySchemasArePresentInOutput)

Test Case: SecuritySchemeAddsToComponents TEST_OpenApiSpecBuilderTest_SecuritySchemeAddsToComponents
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_openapi_spec_builder.cpp#L257 (Test: SecuritySchemeAddsToComponents)

Test Case: DataCollectionWithTopic TEST_ParseResourceUriTest_DataCollectionWithTopic
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_gateway/test/test_cyclic_subscription_handlers.cpp#L32 (Test: DataCollectionWithTopic)

Test Case: UpdateStatusUri TEST_ParseResourceUriTest_UpdateStatusUri
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_gateway/test/test_cyclic_subscription_handlers.cpp#L138 (Test: UpdateStatusUri)

Test Case: ActionOperationHasGetOnly TEST_PathBuilderTest_ActionOperationHasGetOnly
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_builder.cpp#L144 (Test: ActionOperationHasGetOnly)

Test Case: DataItemGetAlwaysPresent TEST_PathBuilderTest_DataItemGetAlwaysPresent
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_builder.cpp#L38 (Test: DataItemGetAlwaysPresent)

Test Case: DataItemPutForSubscribeTopic TEST_PathBuilderTest_DataItemPutForSubscribeTopic
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_builder.cpp#L49 (Test: DataItemPutForSubscribeTopic)

Test Case: ErrorResponsesWithoutAuth TEST_PathBuilderTest_ErrorResponsesWithoutAuth
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_builder.cpp#L176 (Test: ErrorResponsesWithoutAuth)

Test Case: ServiceOperationHasGetOnly TEST_PathBuilderTest_ServiceOperationHasGetOnly
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_builder.cpp#L98 (Test: ServiceOperationHasGetOnly)

Test Case: DeepNestedPath TEST_PathResolverTest_DeepNestedPath
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L73 (Test: DeepNestedPath)

Test Case: EntityCollection TEST_PathResolverTest_EntityCollection
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L37 (Test: EntityCollection)

Test Case: HostsIsResourceCollection TEST_PathResolverTest_HostsIsResourceCollection
status: verified
verifies: REQ_INTEROP_002

“hosts” is a sub-resource of components/functions, not a top-level entity type

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L175 (Test: HostsIsResourceCollection)

Test Case: HostsUnderFunctionsIsResourceCollection TEST_PathResolverTest_HostsUnderFunctionsIsResourceCollection
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L185 (Test: HostsUnderFunctionsIsResourceCollection)

Test Case: MultiSegmentResourceId TEST_PathResolverTest_MultiSegmentResourceId
status: verified
verifies: REQ_INTEROP_002

Topic names like /sensors/temperature produce multi-segment resource IDs

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L234 (Test: MultiSegmentResourceId)

Test Case: NestedEntityCollection TEST_PathResolverTest_NestedEntityCollection
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L87 (Test: NestedEntityCollection)

Test Case: ResourceCollection TEST_PathResolverTest_ResourceCollection
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L52 (Test: ResourceCollection)

Test Case: RootPath TEST_PathResolverTest_RootPath
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L26 (Test: RootPath)

Test Case: SpecificEntity TEST_PathResolverTest_SpecificEntity
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L44 (Test: SpecificEntity)

Test Case: SpecificResource TEST_PathResolverTest_SpecificResource
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_path_resolver.cpp#L60 (Test: SpecificResource)

Test Case: fetch_entities_parses_collections TEST_PeerClientHappyPath_fetch_entities_parses_collections
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L276 (Test: fetch_entities_parses_collections)

Test Case: fetch_entities_parses_is_located_on_without_vendor_extension TEST_PeerClientHappyPath_fetch_entities_parses_is_located_on_without_vendor_extension
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L450 (Test: fetch_entities_parses_is_located_on_without_vendor_extension)

Test Case: fetch_entities_parses_relationship_fields TEST_PeerClientHappyPath_fetch_entities_parses_relationship_fields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L323 (Test: fetch_entities_parses_relationship_fields)

Test Case: fetch_entities_parses_vendor_only_component_id_fallback TEST_PeerClientHappyPath_fetch_entities_parses_vendor_only_component_id_fallback
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L574 (Test: fetch_entities_parses_vendor_only_component_id_fallback)

Test Case: fetch_entities_rejects_malicious_component_id_in_located_on TEST_PeerClientHappyPath_fetch_entities_rejects_malicious_component_id_in_located_on
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L524 (Test: fetch_entities_rejects_malicious_component_id_in_located_on)

Test Case: forward_and_get_json_returns_parsed_json TEST_PeerClientHappyPath_forward_and_get_json_returns_parsed_json
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L742 (Test: forward_and_get_json_returns_parsed_json)

Test Case: forward_request_proxies_response_with_auth TEST_PeerClientHappyPath_forward_request_proxies_response_with_auth
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L621 (Test: forward_request_proxies_response_with_auth)

Test Case: forward_request_rejects_oversized_response TEST_PeerClientHappyPath_forward_request_rejects_oversized_response
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L849 (Test: forward_request_rejects_oversized_response)

Test Case: fetch_entities_returns_error_on_connection_refused TEST_PeerClient_fetch_entities_returns_error_on_connection_refused
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L193 (Test: fetch_entities_returns_error_on_connection_refused)

Test Case: forward_sets_502_on_connection_error TEST_PeerClient_forward_sets_502_on_connection_error
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_peer_client.cpp#L70 (Test: forward_sets_502_on_connection_error)

Test Case: BackwardCompatibleWithoutResolver TEST_PerEntityStorageTest_BackwardCompatibleWithoutResolver
status: verified
verifies: REQ_INTEROP_095

When no per-entity config is used, passing global config gives same behavior as before

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L356 (Test: BackwardCompatibleWithoutResolver)

Test Case: DifferentEntitiesSameFaultCode TEST_PerEntityStorageTest_DifferentEntitiesSameFaultCode
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L318 (Test: DifferentEntitiesSameFaultCode)

Test Case: LidarFaultConfirmsImmediately TEST_PerEntityStorageTest_LidarFaultConfirmsImmediately
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L269 (Test: LidarFaultConfirmsImmediately)

Test Case: LidarHealingWithThreshold1 TEST_PerEntityStorageTest_LidarHealingWithThreshold1
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L336 (Test: LidarHealingWithThreshold1)

Test Case: MotorFaultNeedsDebouncing TEST_PerEntityStorageTest_MotorFaultNeedsDebouncing
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L280 (Test: MotorFaultNeedsDebouncing)

Test Case: UnknownEntityUsesGlobalConfig TEST_PerEntityStorageTest_UnknownEntityUsesGlobalConfig
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L307 (Test: UnknownEntityUsesGlobalConfig)

Test Case: AutoRefreshOnTTLExpiry TEST_PidCacheTest_AutoRefreshOnTTLExpiry
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L83 (Test: AutoRefreshOnTTLExpiry)

Test Case: ConcurrentLookupDoesNotCrash TEST_PidCacheTest_ConcurrentLookupDoesNotCrash
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L167 (Test: ConcurrentLookupDoesNotCrash)

Test Case: LookupAfterRefresh TEST_PidCacheTest_LookupAfterRefresh
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L58 (Test: LookupAfterRefresh)

Test Case: LookupMissingNode TEST_PidCacheTest_LookupMissingNode
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L74 (Test: LookupMissingNode)

Test Case: LookupRootNamespaceNode TEST_PidCacheTest_LookupRootNamespaceNode
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L151 (Test: LookupRootNamespaceNode)

Test Case: NoRefreshWithinTTL TEST_PidCacheTest_NoRefreshWithinTTL
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L106 (Test: NoRefreshWithinTTL)

Test Case: NonexistentProcDir TEST_PidCacheTest_NonexistentProcDir
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_pid_cache.cpp#L141 (Test: NonexistentProcDir)

Test Case: ListAllFaults_FailingPeerPreservesLocalFaults TEST_PluginContextFailingPeerTest_ListAllFaults_FailingPeerPreservesLocalFaults
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L734 (Test: ListAllFaults_FailingPeerPreservesLocalFaults)

Test Case: ListEntityFaults_FailingPeerPreservesLocalFaults TEST_PluginContextFailingPeerTest_ListEntityFaults_FailingPeerPreservesLocalFaults
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L720 (Test: ListEntityFaults_FailingPeerPreservesLocalFaults)

Test Case: ListEntityFaults_AreaResolvesToDescendantApps TEST_PluginContextNoAggTest_ListEntityFaults_AreaResolvesToDescendantApps
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L654 (Test: ListEntityFaults_AreaResolvesToDescendantApps)

Test Case: ListEntityFaults_FunctionResolvesToHostAppFaults TEST_PluginContextNoAggTest_ListEntityFaults_FunctionResolvesToHostAppFaults
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L704 (Test: ListEntityFaults_FunctionResolvesToHostAppFaults)

Test Case: ListEntityFaults_LocalFaultManager_IncludesScopedFaultOnly TEST_PluginContextNoAggTest_ListEntityFaults_LocalFaultManager_IncludesScopedFaultOnly
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L638 (Test: ListEntityFaults_LocalFaultManager_IncludesScopedFaultOnly)

Test Case: ListAllFaults_IncludesPeerFault TEST_PluginContextWithPeerTest_ListAllFaults_IncludesPeerFault
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L580 (Test: ListAllFaults_IncludesPeerFault)

Test Case: ListAllFaults_MergesLocalAndPeerFaults TEST_PluginContextWithPeerTest_ListAllFaults_MergesLocalAndPeerFaults
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L683 (Test: ListAllFaults_MergesLocalAndPeerFaults)

Test Case: ListEntityFaults_IncludesPeerFault TEST_PluginContextWithPeerTest_ListEntityFaults_IncludesPeerFault
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L559 (Test: ListEntityFaults_IncludesPeerFault)

Test Case: ListEntityFaults_MergesLocalAndPeerFaults TEST_PluginContextWithPeerTest_ListEntityFaults_MergesLocalAndPeerFaults
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_gateway/test/test_plugin_context_aggregation.cpp#L670 (Test: ListEntityFaults_MergesLocalAndPeerFaults)

Test Case: DefaultPolicies TEST_PluginLayerTest_DefaultPolicies
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L487 (Test: DefaultPolicies)

Test Case: ReadNonexistentPidFails TEST_ProcReader_ReadNonexistentPidFails
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L62 (Test: ReadNonexistentPidFails)

Test Case: ReadSelfProcess TEST_ProcReader_ReadSelfProcess
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L48 (Test: ReadSelfProcess)

Test Case: ReadSystemUptime TEST_ProcReader_ReadSystemUptime
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L77 (Test: ReadSystemUptime)

Test Case: ReadSystemUptimeMissingFile TEST_ProcReader_ReadSystemUptimeMissingFile
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L84 (Test: ReadSystemUptimeMissingFile)

Test Case: StateFieldPopulated TEST_ProcReader_StateFieldPopulated
status: verified
verifies: REQ_INTEROP_003

Read our own process - should have state “R” (running) or “S” (sleeping)

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L69 (Test: StateFieldPopulated)

Test Case: ProcessInfoToJsonAllFields TEST_ProcfsPlugin_ProcessInfoToJsonAllFields
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_procfs_plugin.cpp#L21 (Test: ProcessInfoToJsonAllFields)

Test Case: ProcessInfoToJsonNegativeUptimeClamped TEST_ProcfsPlugin_ProcessInfoToJsonNegativeUptimeClamped
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_procfs_plugin.cpp#L68 (Test: ProcessInfoToJsonNegativeUptimeClamped)

Test Case: ProcessInfoToJsonZeroUptime TEST_ProcfsPlugin_ProcessInfoToJsonZeroUptime
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_procfs_plugin.cpp#L58 (Test: ProcessInfoToJsonZeroUptime)

Test Case: EmptyResolverReturnsGlobal TEST_ResolverTest_EmptyResolverReturnsGlobal
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L50 (Test: EmptyResolverReturnsGlobal)

Test Case: ExactMatch TEST_ResolverTest_ExactMatch
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L59 (Test: ExactMatch)

Test Case: LongestPrefixWins TEST_ResolverTest_LongestPrefixWins
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L83 (Test: LongestPrefixWins)

Test Case: NoMatchReturnsGlobal TEST_ResolverTest_NoMatchReturnsGlobal
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L101 (Test: NoMatchReturnsGlobal)

Test Case: PartialOverrideMergesWithGlobal TEST_ResolverTest_PartialOverrideMergesWithGlobal
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L128 (Test: PartialOverrideMergesWithGlobal)

Test Case: PrefixMatch TEST_ResolverTest_PrefixMatch
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L72 (Test: PrefixMatch)

Test Case: PrefixMatchRequiresPathBoundary TEST_ResolverTest_PrefixMatchRequiresPathBoundary
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L112 (Test: PrefixMatchRequiresPathBoundary)

Test Case: SizeReturnsEntryCount TEST_ResolverTest_SizeReturnsEntryCount
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L142 (Test: SizeReturnsEntryCount)

Test Case: AsyncDispatchNonBlocking TEST_ResourceChangeNotifier_AsyncDispatchNonBlocking
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_resource_change_notifier.cpp#L229 (Test: AsyncDispatchNonBlocking)

Test Case: SubscribeAndNotify TEST_ResourceChangeNotifier_SubscribeAndNotify
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_resource_change_notifier.cpp#L45 (Test: SubscribeAndNotify)

Test Case: ColdWaitCapExceededReturns503 TEST_Ros2TopicDataProviderTest_ColdWaitCapExceededReturns503
status: verified
verifies: REQ_INTEROP_019

Use a dedicated provider with cold-wait-cap 1 so one holder caller in flight triggers the cap on the second caller. The fixture provider uses cap 4 which is hard to saturate deterministically.

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L698 (Test: ColdWaitCapExceededReturns503)

Test Case: DiscoverByNamespaceGroupsTopics TEST_Ros2TopicDataProviderTest_DiscoverByNamespaceGroupsTopics
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L127 (Test: DiscoverByNamespaceGroupsTopics)

status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L106 (Test: DiscoverFindsPublisher)

Test Case: InterfacePolymorphismWorks TEST_Ros2TopicDataProviderTest_InterfacePolymorphismWorks
status: verified
verifies: REQ_INTEROP_019

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L690 (Test: InterfacePolymorphismWorks)

Test Case: SampleHitReturnsDataAfterPublish TEST_Ros2TopicDataProviderTest_SampleHitReturnsDataAfterPublish
status: verified
verifies: REQ_INTEROP_019

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L198 (Test: SampleHitReturnsDataAfterPublish)

Test Case: SampleMatchesReliablePublisherQoS TEST_Ros2TopicDataProviderTest_SampleMatchesReliablePublisherQoS
status: verified
verifies: REQ_INTEROP_019

Reliable publisher with depth 10 + latched (transient_local). Without QoS matching, a best-effort subscriber would connect but could miss the latched message; a TransientLocal publisher specifically relies on matching subscriber durability for the last-message replay.

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L157 (Test: SampleMatchesReliablePublisherQoS)

Test Case: SampleParallelEmbedsPerTopicErrorInsteadOfFailingBatch TEST_Ros2TopicDataProviderTest_SampleParallelEmbedsPerTopicErrorInsteadOfFailingBatch
status: verified
verifies: REQ_INTEROP_019

Cold-wait cap saturates at 1; holder thread keeps the slot reserved. sample_parallel embeds the per-topic 503 in the corresponding result so the rest of the batch still serves successfully (one bad topic should not kill the whole /components/{id}/data response under load).

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L339 (Test: SampleParallelEmbedsPerTopicErrorInsteadOfFailingBatch)

Test Case: SampleParallelHonorsMaxParallelSamplesAndPreservesOrder TEST_Ros2TopicDataProviderTest_SampleParallelHonorsMaxParallelSamplesAndPreservesOrder
status: verified
verifies: REQ_INTEROP_019

With max_parallel_samples=2 and 5 input topics the chunk loop must run 3 times. Regression that drops chunking entirely (or computes the wrong chunk_size) is what this test pins.

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L320 (Test: SampleParallelHonorsMaxParallelSamplesAndPreservesOrder)

Test Case: SampleParallelReturnsOneResultPerTopic TEST_Ros2TopicDataProviderTest_SampleParallelReturnsOneResultPerTopic
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L309 (Test: SampleParallelReturnsOneResultPerTopic)

Test Case: SampleWithoutPublishersReturnsMetadataOnly TEST_Ros2TopicDataProviderTest_SampleWithoutPublishersReturnsMetadataOnly
status: verified
verifies: REQ_INTEROP_019

Implementation: src/ros2_medkit_gateway/test/test_ros2_topic_data_provider.cpp#L148 (Test: SampleWithoutPublishersReturnsMetadataOnly)

Test Case: ConfiguredFormatUnavailableFallsBackToSqlite3 TEST_RosbagCaptureTest_ConfiguredFormatUnavailableFallsBackToSqlite3
status: verified
verifies: REQ_INTEROP_088

A known format (mcap) whose plugin is unavailable degrades to sqlite3 and capture stays enabled - the exact scenario the crash-safety change exists for.

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L280 (Test: ConfiguredFormatUnavailableFallsBackToSqlite3)

Test Case: ConfiguredSqlite3UnavailableFallsBackToMcap TEST_RosbagCaptureTest_ConfiguredSqlite3UnavailableFallsBackToMcap
status: verified
verifies: REQ_INTEROP_088

The symmetric case of the fallback above: a known format (sqlite3) whose plugin is unavailable degrades to mcap and capture stays enabled. Neither backend is privileged - whichever is configured falls back to the other, not always to sqlite3.

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L301 (Test: ConfiguredSqlite3UnavailableFallsBackToMcap)

Test Case: ConstructorAcceptsMcapFormat TEST_RosbagCaptureTest_ConstructorAcceptsMcapFormat
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L410 (Test: ConstructorAcceptsMcapFormat)

Test Case: ConstructorFallsBackOnUnknownFormat TEST_RosbagCaptureTest_ConstructorFallsBackOnUnknownFormat
status: verified
verifies: REQ_INTEROP_088

An unknown format string must NOT terminate the node: it normalises to “sqlite3” before any probe runs. The probe is injected and reports every backend usable, so no fallback can move the format afterwards and the assertion pins normalisation and nothing else.

The real probe cannot be used here. An unknown format reaches “sqlite3” down a second path with it - its own probe fails, and because the format is not literally “sqlite3” the fallback picks sqlite3 - so the two paths are indistinguishable by the resolved value and the assertion would hold whether normalisation ran or not.

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L251 (Test: ConstructorFallsBackOnUnknownFormat)

Test Case: ConstructorRequiresValidNode TEST_RosbagCaptureTest_ConstructorRequiresValidNode
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L214 (Test: ConstructorRequiresValidNode)

Test Case: ConstructorRequiresValidStorage TEST_RosbagCaptureTest_ConstructorRequiresValidStorage
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L221 (Test: ConstructorRequiresValidStorage)

Test Case: ConstructorSucceedsWithValidParams TEST_RosbagCaptureTest_ConstructorSucceedsWithValidParams
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L228 (Test: ConstructorSucceedsWithValidParams)

Test Case: ConstructorWithDisabledRosbag TEST_RosbagCaptureTest_ConstructorWithDisabledRosbag
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L235 (Test: ConstructorWithDisabledRosbag)

Test Case: DefaultFormatIsMcap TEST_RosbagCaptureTest_DefaultFormatIsMcap
status: verified
verifies: REQ_INTEROP_088

mcap is what Foxglove and Lichtblick open without conversion, and what rosbag2 itself defaults to since Iron. A silent drift back to sqlite3 would hand operators a black box their viewer cannot read.

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L242 (Test: DefaultFormatIsMcap)

Test Case: IsEnabledReturnsConfigState TEST_RosbagCaptureTest_IsEnabledReturnsConfigState
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L420 (Test: IsEnabledReturnsConfigState)

Test Case: NoUsableBackendDisablesCaptureWithoutCrashing TEST_RosbagCaptureTest_NoUsableBackendDisablesCaptureWithoutCrashing
status: verified
verifies: REQ_INTEROP_088

When neither the configured format nor sqlite3 is usable, capture self-disables and the node keeps running (no throw out of the constructor).

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L324 (Test: NoUsableBackendDisablesCaptureWithoutCrashing)

Test Case: Sqlite3BaselineUnavailableDisablesCapture TEST_RosbagCaptureTest_Sqlite3BaselineUnavailableDisablesCapture
status: verified
verifies: REQ_INTEROP_088

When sqlite3 is configured and neither it nor its mcap fallback loads, capture self-disables rather than crashing the node - the symmetric case of NoUsableBackendDisablesCaptureWithoutCrashing above, starting from sqlite3 instead of mcap.

Implementation: src/ros2_medkit_fault_manager/test/test_rosbag_capture.cpp#L391 (Test: Sqlite3BaselineUnavailableDisablesCapture)

Test Case: EmptyBuilderProducesEmptyDescriptions TEST_RouteDescriptionsTest_EmptyBuilderProducesEmptyDescriptions
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_descriptions.cpp#L37 (Test: EmptyBuilderProducesEmptyDescriptions)

Test Case: MultipleEndpoints TEST_RouteDescriptionsTest_MultipleEndpoints
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_descriptions.cpp#L70 (Test: MultipleEndpoints)

Test Case: PostWithRequestBody TEST_RouteDescriptionsTest_PostWithRequestBody
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_descriptions.cpp#L82 (Test: PostWithRequestBody)

status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_descriptions.cpp#L98 (Test: SchemaTypes)

Test Case: SingleGetEndpoint TEST_RouteDescriptionsTest_SingleGetEndpoint
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_descriptions.cpp#L46 (Test: SingleGetEndpoint)

Test Case: AuthEnabledAdds401And403Responses TEST_RouteRegistryTest_AuthEnabledAdds401And403Responses
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L346 (Test: AuthEnabledAdds401And403Responses)

Test Case: DerivedCreatedResponseDeclaresLocationHeader TEST_RouteRegistryTest_DerivedCreatedResponseDeclaresLocationHeader
status: verified
verifies: REQ_INTEROP_002

The 201 comes from Created<T>; the Location declaration is derived from that same status, so a route cannot ship one without the other.

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L1084 (Test: DerivedCreatedResponseDeclaresLocationHeader)

Test Case: ErrorResponsesUseGenericErrorRef TEST_RouteRegistryTest_ErrorResponsesUseGenericErrorRef
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L924 (Test: ErrorResponsesUseGenericErrorRef)

Test Case: OperationIdIsGenerated TEST_RouteRegistryTest_OperationIdIsGenerated
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L443 (Test: OperationIdIsGenerated)

Test Case: PathParamDescriptionsArePresent TEST_RouteRegistryTest_PathParamDescriptionsArePresent
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L486 (Test: PathParamDescriptionsArePresent)

Test Case: PerEntityFaultsQueryAdvertisesStatusOnly TEST_RouteRegistryTest_PerEntityFaultsQueryAdvertisesStatusOnly
status: verified
verifies: REQ_INTEROP_002

The per-entity /faults route uses the narrower FaultEntityListQuery so the spec advertises exactly what the handler reads: status only. The correlation flags (include_muted / include_clusters) are global-only, so they must NOT appear on the per-entity route.

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L218 (Test: PerEntityFaultsQueryAdvertisesStatusOnly)

Test Case: ToOpenapiPathsContainsRegisteredRoute TEST_RouteRegistryTest_ToOpenapiPathsContainsRegisteredRoute
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L117 (Test: ToOpenapiPathsContainsRegisteredRoute)

Test Case: ToOpenapiPathsEmitsQueryParameters TEST_RouteRegistryTest_ToOpenapiPathsEmitsQueryParameters
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L141 (Test: ToOpenapiPathsEmitsQueryParameters)

Test Case: ToOpenapiPathsMultipleMethodsSamePath TEST_RouteRegistryTest_ToOpenapiPathsMultipleMethodsSamePath
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L129 (Test: ToOpenapiPathsMultipleMethodsSamePath)

Test Case: ToRegexPathRootBecomesRootAnchored TEST_RouteRegistryTest_ToRegexPathRootBecomesRootAnchored
status: verified
verifies: REQ_INTEROP_002

Register the root path and verify the regex conversion via the handler registration (to_regex_path is private, test indirectly)

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L246 (Test: ToRegexPathRootBecomesRootAnchored)

Test Case: TypedQueryDeclaresParametersFromDto TEST_RouteRegistryTest_TypedQueryDeclaresParametersFromDto
status: verified
verifies: REQ_INTEROP_002

.query<T>() derives the OpenAPI parameters straight from dto_fields<T> - the same descriptor a handler reads via TypedRequest::query<T>(), so the two cannot drift.

Implementation: src/ros2_medkit_gateway/test/test_route_registry.cpp#L180 (Test: TypedQueryDeclaresParametersFromDto)

Test Case: DiscoverFunctions_GroupsByNamespace TEST_RuntimeDiscoveryMultiNsTest_DiscoverFunctions_GroupsByNamespace
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_runtime_discovery.cpp#L181 (Test: DiscoverFunctions_GroupsByNamespace)

Test Case: DiscoverFunctions_DefaultCreatesFromNamespaces TEST_RuntimeDiscoveryTest_DiscoverFunctions_DefaultCreatesFromNamespaces
status: verified
verifies: REQ_INTEROP_003

Default config has create_functions_from_namespaces=true

Implementation: src/ros2_medkit_gateway/test/test_runtime_discovery.cpp#L82 (Test: DiscoverFunctions_DefaultCreatesFromNamespaces)

Test Case: DefaultPolicies TEST_RuntimeLayerTest_DefaultPolicies
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_merge_pipeline.cpp#L454 (Test: DefaultPolicies)

Test Case: ExactMatch_NodeNameAndNamespace TEST_RuntimeLinkerTest_ExactMatch_NodeNameAndNamespace
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_runtime_linker.cpp#L77 (Test: ExactMatch_NodeNameAndNamespace)

Test Case: OrphanPolicy_IncludeAsOrphan_NoError TEST_RuntimeLinkerTest_OrphanPolicy_IncludeAsOrphan_NoError
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_runtime_linker.cpp#L307 (Test: OrphanPolicy_IncludeAsOrphan_NoError)

Test Case: OrphanPolicy_Warn_NoError TEST_RuntimeLinkerTest_OrphanPolicy_Warn_NoError
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_runtime_linker.cpp#L293 (Test: OrphanPolicy_Warn_NoError)

Test Case: receives_events_from_mock_server TEST_SSEStreamProxyIntegration_receives_events_from_mock_server
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_stream_proxy.cpp#L239 (Test: receives_events_from_mock_server)

status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L505 (Test: FromRosMsgKnownType)

Test Case: FromRosMsgUnknownType TEST_SchemaBuilderRuntimeTest_FromRosMsgUnknownType
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L516 (Test: FromRosMsgUnknownType)

Test Case: AcquireLockRequestSchemaComesFromDto TEST_SchemaBuilderStaticTest_AcquireLockRequestSchemaComesFromDto
status: verified
verifies: REQ_INTEROP_002

AcquireLockRequest is now generated from the DTO; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L569 (Test: AcquireLockRequestSchemaComesFromDto)

Test Case: BulkDataCategoryListSchema TEST_SchemaBuilderStaticTest_BulkDataCategoryListSchema
status: verified
verifies: REQ_INTEROP_002

BulkDataCategoryList is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L295 (Test: BulkDataCategoryListSchema)

Test Case: BulkDataDescriptorSchema TEST_SchemaBuilderStaticTest_BulkDataDescriptorSchema
status: verified
verifies: REQ_INTEROP_002

BulkDataDescriptor is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L307 (Test: BulkDataDescriptorSchema)

Test Case: ConfigurationMetaDataSchemaFromDto TEST_SchemaBuilderStaticTest_ConfigurationMetaDataSchemaFromDto
status: verified
verifies: REQ_INTEROP_002

ConfigurationMetaData is now generated from the DTO; verify via component_schemas() which merges DTO-generated schemas on top.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L172 (Test: ConfigurationMetaDataSchemaFromDto)

Test Case: ConfigurationMetaDataXMedkitDtoDeclaresSourceAndNode TEST_SchemaBuilderStaticTest_ConfigurationMetaDataXMedkitDtoDeclaresSourceAndNode
status: verified
verifies: REQ_INTEROP_002

Regression: the x-medkit object emitted by config_handlers.cpp on every per-parameter entry contains both source (app_id) and node (FQN). The ConfigXMedkitItem DTO declares both; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L195 (Test: ConfigurationMetaDataXMedkitDtoDeclaresSourceAndNode)

Test Case: ConfigurationReadValueSchemaFromDto TEST_SchemaBuilderStaticTest_ConfigurationReadValueSchemaFromDto
status: verified
verifies: REQ_INTEROP_002

ConfigurationReadValue is now generated from the DTO; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L210 (Test: ConfigurationReadValueSchemaFromDto)

Test Case: ConfigurationWriteRequestSchemaFromDto TEST_SchemaBuilderStaticTest_ConfigurationWriteRequestSchemaFromDto
status: verified
verifies: REQ_INTEROP_002

ConfigurationWriteRequest is now generated from the DTO; verify via component_schemas(). Both “data” and “value” are optional at schema level - the handler enforces that at least one is present and prefers “data” over “value”.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L244 (Test: ConfigurationWriteRequestSchemaFromDto)

Test Case: CyclicSubscriptionCreateRequestSchema TEST_SchemaBuilderStaticTest_CyclicSubscriptionCreateRequestSchema
status: verified
verifies: REQ_INTEROP_002

CyclicSubscriptionCreateRequest is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L329 (Test: CyclicSubscriptionCreateRequestSchema)

Test Case: DataWriteRequestSchemaComesFromDto TEST_SchemaBuilderStaticTest_DataWriteRequestSchemaComesFromDto
status: verified
verifies: REQ_INTEROP_002

DataWriteRequest is now generated from the DTO; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L636 (Test: DataWriteRequestSchemaComesFromDto)

Test Case: ExecutionUpdateRequestSchemaComesFromDto TEST_SchemaBuilderStaticTest_ExecutionUpdateRequestSchemaComesFromDto
status: verified
verifies: REQ_INTEROP_002

ExecutionUpdateRequest is now generated from the DTO; verify via component_schemas().

capability is a plain string field, and the absence of the enum is the assertion. OperationHandlers::update_execution answers an unrecognised value with a 400 carrying supported_capabilities for the backend the caller is talking to; a schema-level enum would make JsonReader reject the request first and replace that with a generic body-validation error. The vocabulary is published as prose on the field instead.

The previous note here justified this by custom x-vendor-* capabilities “reaching the handler’s own validation logic”. There is no such branch: update_execution has no plugin delegation, and every value outside stop/execute/freeze/reset lands in the same 400.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L654 (Test: ExecutionUpdateRequestSchemaComesFromDto)

Test Case: ExtendLockRequestSchemaComesFromDto TEST_SchemaBuilderStaticTest_ExtendLockRequestSchemaComesFromDto
status: verified
verifies: REQ_INTEROP_002

ExtendLockRequest is now generated from the DTO; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L595 (Test: ExtendLockRequestSchemaComesFromDto)

Test Case: LockSchemaComesFromDto TEST_SchemaBuilderStaticTest_LockSchemaComesFromDto
status: verified
verifies: REQ_INTEROP_002

Lock and LockList are now generated from the DTO; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L611 (Test: LockSchemaComesFromDto)

Test Case: LogConfigurationSchemaFieldsOptional TEST_SchemaBuilderStaticTest_LogConfigurationSchemaFieldsOptional
status: verified
verifies: REQ_INTEROP_002

LogConfiguration moved to DTO - verify it is registered in component_schemas.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L702 (Test: LogConfigurationSchemaFieldsOptional)

Test Case: OperationDetailSchemaComeFromDto TEST_SchemaBuilderStaticTest_OperationDetailSchemaComeFromDto
status: verified
verifies: REQ_INTEROP_002

OperationDetail is now generated from the DTO; verify via component_schemas().

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L231 (Test: OperationDetailSchemaComeFromDto)

Test Case: ScriptControlRequestSchema TEST_SchemaBuilderStaticTest_ScriptControlRequestSchema
status: verified
verifies: REQ_INTEROP_002

ScriptControlRequest is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L683 (Test: ScriptControlRequestSchema)

Test Case: ScriptUploadResponseSchema TEST_SchemaBuilderStaticTest_ScriptUploadResponseSchema
status: verified
verifies: REQ_INTEROP_002

ScriptUploadResponse is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L262 (Test: ScriptUploadResponseSchema)

Test Case: TriggerCreateRequestSchema TEST_SchemaBuilderStaticTest_TriggerCreateRequestSchema
status: verified
verifies: REQ_INTEROP_002

TriggerCreateRequest is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L359 (Test: TriggerCreateRequestSchema)

Test Case: TriggerUpdateRequestSchema TEST_SchemaBuilderStaticTest_TriggerUpdateRequestSchema
status: verified
verifies: REQ_INTEROP_002

TriggerUpdateRequest is now a DTO - verify via SchemaWriter.

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L280 (Test: TriggerUpdateRequestSchema)

Test Case: AllRefsResolveToRegisteredSchemas TEST_SchemaConsistencyTest_AllRefsResolveToRegisteredSchemas
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L749 (Test: AllRefsResolveToRegisteredSchemas)

Test Case: ListSchemasReferenceExistingItemSchemas TEST_SchemaConsistencyTest_ListSchemasReferenceExistingItemSchemas
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L766 (Test: ListSchemasReferenceExistingItemSchemas)

Test Case: RequiredFieldsExistInProperties TEST_SchemaConsistencyTest_RequiredFieldsExistInProperties
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_gateway/test/test_schema_builder.cpp#L795 (Test: RequiredFieldsExistInProperties)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L475 (Test: AlreadyRunningMapsTo409)

status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L484 (Test: ConcurrencyLimitMapsTo429)

status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L609 (Test: DeleteReturns204)

status: verified
verifies: REQ_INTEROP_040

Upload handler needs multipart file field - use get_script with FileTooLarge instead since the backend-error mapping is shared across all handlers.

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L493 (Test: FileTooLargeMapsTo413)

status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L463 (Test: ManagedScriptMapsTo409)

status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L454 (Test: NotFoundMapsTo404)

Test Case: StartExecutionReturns202WithLocation TEST_ScriptHandlersErrorMappingTest_StartExecutionReturns202WithLocation
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L579 (Test: StartExecutionReturns202WithLocation)

status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L557 (Test: UploadRejectsWrongContentType)

status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L516 (Test: UploadReturns201WithLocation)

Test Case: ControlExecutionReturns501WhenNoBackend TEST_ScriptHandlersNoBackendTest_ControlExecutionReturns501WhenNoBackend
status: verified
verifies: REQ_INTEROP_047

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L310 (Test: ControlExecutionReturns501WhenNoBackend)

Test Case: DeleteReturns501WhenNoBackend TEST_ScriptHandlersNoBackendTest_DeleteReturns501WhenNoBackend
status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L283 (Test: DeleteReturns501WhenNoBackend)

Test Case: GetExecutionReturns501WhenNoBackend TEST_ScriptHandlersNoBackendTest_GetExecutionReturns501WhenNoBackend
status: verified
verifies: REQ_INTEROP_046

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L301 (Test: GetExecutionReturns501WhenNoBackend)

status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L274 (Test: GetReturns501WhenNoBackend)

Test Case: ListReturns501WhenNoBackend TEST_ScriptHandlersNoBackendTest_ListReturns501WhenNoBackend
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L265 (Test: ListReturns501WhenNoBackend)

Test Case: StartExecutionReturns501WhenNoBackend TEST_ScriptHandlersNoBackendTest_StartExecutionReturns501WhenNoBackend
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L292 (Test: StartExecutionReturns501WhenNoBackend)

Test Case: UploadReturns501WhenNoBackend TEST_ScriptHandlersNoBackendTest_UploadReturns501WhenNoBackend
status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_script_handlers.cpp#L255 (Test: UploadReturns501WhenNoBackend)

Test Case: ControlExecution TEST_ScriptManagerTest_ControlExecution
status: verified
verifies: REQ_INTEROP_047

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L232 (Test: ControlExecution)

Test Case: DeleteManifestScript TEST_ScriptManagerTest_DeleteManifestScript
status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L208 (Test: DeleteManifestScript)

Test Case: DeleteScript TEST_ScriptManagerTest_DeleteScript
status: verified
verifies: REQ_INTEROP_043

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L202 (Test: DeleteScript)

Test Case: GetExecution TEST_ScriptManagerTest_GetExecution
status: verified
verifies: REQ_INTEROP_046

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L224 (Test: GetExecution)

Test Case: GetScript TEST_ScriptManagerTest_GetScript
status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L181 (Test: GetScript)

Test Case: GetScriptNotFound TEST_ScriptManagerTest_GetScriptNotFound
status: verified
verifies: REQ_INTEROP_042

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L188 (Test: GetScriptNotFound)

Test Case: ListScripts TEST_ScriptManagerTest_ListScripts
status: verified
verifies: REQ_INTEROP_041

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L173 (Test: ListScripts)

Test Case: StartExecution TEST_ScriptManagerTest_StartExecution
status: verified
verifies: REQ_INTEROP_044

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L215 (Test: StartExecution)

Test Case: UploadScript TEST_ScriptManagerTest_UploadScript
status: verified
verifies: REQ_INTEROP_040

Implementation: src/ros2_medkit_gateway/test/test_script_manager.cpp#L195 (Test: UploadScript)

Test Case: BackgroundCaptureCachesFreezeFrame TEST_SnapshotCaptureTest_BackgroundCaptureCachesFreezeFrame
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L360 (Test: BackgroundCaptureCachesFreezeFrame)

Test Case: BackgroundCaptureInitializesSubscriptions TEST_SnapshotCaptureTest_BackgroundCaptureInitializesSubscriptions
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L210 (Test: BackgroundCaptureInitializesSubscriptions)

Test Case: CaptureWritesFreezeFrameFromConfiguredTopic TEST_SnapshotCaptureTest_CaptureWritesFreezeFrameFromConfiguredTopic
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L265 (Test: CaptureWritesFreezeFrameFromConfiguredTopic)

Test Case: ConfigAccessorReturnsCorrectValues TEST_SnapshotCaptureTest_ConfigAccessorReturnsCorrectValues
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L178 (Test: ConfigAccessorReturnsCorrectValues)

Test Case: ConstructorRequiresValidNode TEST_SnapshotCaptureTest_ConstructorRequiresValidNode
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L57 (Test: ConstructorRequiresValidNode)

Test Case: ConstructorRequiresValidStorage TEST_SnapshotCaptureTest_ConstructorRequiresValidStorage
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L63 (Test: ConstructorRequiresValidStorage)

Test Case: ConstructorSucceedsWithValidParams TEST_SnapshotCaptureTest_ConstructorSucceedsWithValidParams
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L69 (Test: ConstructorSucceedsWithValidParams)

Test Case: DisabledCaptureSkipsProcessing TEST_SnapshotCaptureTest_DisabledCaptureSkipsProcessing
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L76 (Test: DisabledCaptureSkipsProcessing)

Test Case: DisabledCaptureWritesNoFreezeFrame TEST_SnapshotCaptureTest_DisabledCaptureWritesNoFreezeFrame
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L422 (Test: DisabledCaptureWritesNoFreezeFrame)

Test Case: EmptyConfigurationHandledGracefully TEST_SnapshotCaptureTest_EmptyConfigurationHandledGracefully
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L195 (Test: EmptyConfigurationHandledGracefully)

Test Case: EmptyRecaptureKeepsRetainedFreezeFrame TEST_SnapshotCaptureTest_EmptyRecaptureKeepsRetainedFreezeFrame
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L305 (Test: EmptyRecaptureKeepsRetainedFreezeFrame)

Test Case: InvalidRegexPatternIsSkipped TEST_SnapshotCaptureTest_InvalidRegexPatternIsSkipped
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L154 (Test: InvalidRegexPatternIsSkipped)

Test Case: IsEnabledReturnsConfigState TEST_SnapshotCaptureTest_IsEnabledReturnsConfigState
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L90 (Test: IsEnabledReturnsConfigState)

Test Case: MultipleValidPatternsCompiled TEST_SnapshotCaptureTest_MultipleValidPatternsCompiled
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L165 (Test: MultipleValidPatternsCompiled)

Test Case: OnDemandCaptureHandlesNonExistentTopic TEST_SnapshotCaptureTest_OnDemandCaptureHandlesNonExistentTopic
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L222 (Test: OnDemandCaptureHandlesNonExistentTopic)

Test Case: UnconfiguredFaultWritesNoFreezeFrame TEST_SnapshotCaptureTest_UnconfiguredFaultWritesNoFreezeFrame
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L409 (Test: UnconfiguredFaultWritesNoFreezeFrame)

Test Case: ClearFaultDeletesAssociatedSnapshots TEST_SqliteFaultStorageTest_ClearFaultDeletesAssociatedSnapshots
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1208 (Test: ClearFaultDeletesAssociatedSnapshots)

Test Case: ClearFaultKeepsSnapshotsWhenEvidenceIsRetained TEST_SqliteFaultStorageTest_ClearFaultKeepsSnapshotsWhenEvidenceIsRetained
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1248 (Test: ClearFaultKeepsSnapshotsWhenEvidenceIsRetained)

Test Case: FilterSnapshotsByTopic TEST_SqliteFaultStorageTest_FilterSnapshotsByTopic
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1171 (Test: FilterSnapshotsByTopic)

Test Case: FreezeFramePersistsAcrossReopen TEST_SqliteFaultStorageTest_FreezeFramePersistsAcrossReopen
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1356 (Test: FreezeFramePersistsAcrossReopen)

Test Case: FreezeFrameReplacedOnRecapture TEST_SqliteFaultStorageTest_FreezeFrameReplacedOnRecapture
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1300 (Test: FreezeFrameReplacedOnRecapture)

Test Case: FreezeFrameSurvivesClearFault TEST_SqliteFaultStorageTest_FreezeFrameSurvivesClearFault
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1323 (Test: FreezeFrameSurvivesClearFault)

Test Case: GetAllRosbagFilesReturnsSortedByCreatedAt TEST_SqliteFaultStorageTest_GetAllRosbagFilesReturnsSortedByCreatedAt
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1467 (Test: GetAllRosbagFilesReturnsSortedByCreatedAt)

Test Case: ListRosbagsForEntityFiltersCorrectly TEST_SqliteFaultStorageTest_ListRosbagsForEntityFiltersCorrectly
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1378 (Test: ListRosbagsForEntityFiltersCorrectly)

Test Case: MultipleSnapshotsForSameFault TEST_SqliteFaultStorageTest_MultipleSnapshotsForSameFault
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1141 (Test: MultipleSnapshotsForSameFault)

Test Case: NoFreezeFrameForUnknownFault TEST_SqliteFaultStorageTest_NoFreezeFrameForUnknownFault
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1294 (Test: NoFreezeFrameForUnknownFault)

Test Case: NoSnapshotsForUnknownFault TEST_SqliteFaultStorageTest_NoSnapshotsForUnknownFault
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1202 (Test: NoSnapshotsForUnknownFault)

Test Case: StoreAndRetrieveSnapshot TEST_SqliteFaultStorageTest_StoreAndRetrieveSnapshot
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_sqlite_storage.cpp#L1111 (Test: StoreAndRetrieveSnapshot)

status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_sse_transport_provider.cpp#L34 (Test: ProtocolReturnsSse)

Test Case: StartReturnsEventsUrl TEST_SseTransportProviderTest_StartReturnsEventsUrl
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_sse_transport_provider.cpp#L39 (Test: StartReturnsEventsUrl)

status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_sse_transport_provider.cpp#L55 (Test: StopRemovesStream)

Test Case: parse_sse_multiple_events TEST_StreamProxy_parse_sse_multiple_events
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_stream_proxy.cpp#L65 (Test: parse_sse_multiple_events)

Test Case: parse_sse_single_event TEST_StreamProxy_parse_sse_single_event
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_stream_proxy.cpp#L52 (Test: parse_sse_single_event)

Test Case: parse_sse_with_event_type TEST_StreamProxy_parse_sse_with_event_type
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_gateway/test/test_stream_proxy.cpp#L96 (Test: parse_sse_with_event_type)

Test Case: FindPidForNodeInSyntheticProc TEST_SyntheticProcTest_FindPidForNodeInSyntheticProc
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L137 (Test: FindPidForNodeInSyntheticProc)

Test Case: MalformedStatMissingComm TEST_SyntheticProcTest_MalformedStatMissingComm
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L176 (Test: MalformedStatMissingComm)

Test Case: ReadSyntheticProc TEST_SyntheticProcTest_ReadSyntheticProc
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L94 (Test: ReadSyntheticProc)

Test Case: ReadSystemUptimeSynthetic TEST_SyntheticProcTest_ReadSystemUptimeSynthetic
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L165 (Test: ReadSystemUptimeSynthetic)

Test Case: TruncatedStatAfterComm TEST_SyntheticProcTest_TruncatedStatAfterComm
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_proc_reader.cpp#L200 (Test: TruncatedStatAfterComm)

Test Case: ComponentEndpointEmptyUnitsArray TEST_SystemdUtils_ComponentEndpointEmptyUnitsArray
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L52 (Test: ComponentEndpointEmptyUnitsArray)

Test Case: EscapeAtSignInTemplateUnit TEST_SystemdUtils_EscapeAtSignInTemplateUnit
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L37 (Test: EscapeAtSignInTemplateUnit)

Test Case: EscapeDotInServiceExtension TEST_SystemdUtils_EscapeDotInServiceExtension
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L27 (Test: EscapeDotInServiceExtension)

Test Case: EscapeEmptyString TEST_SystemdUtils_EscapeEmptyString
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L47 (Test: EscapeEmptyString)

Test Case: EscapeHyphenInUnitName TEST_SystemdUtils_EscapeHyphenInUnitName
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L32 (Test: EscapeHyphenInUnitName)

Test Case: EscapeSimpleServiceName TEST_SystemdUtils_EscapeSimpleServiceName
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L22 (Test: EscapeSimpleServiceName)

Test Case: EscapeSlashInPath TEST_SystemdUtils_EscapeSlashInPath
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_discovery_plugins/ros2_medkit_linux_introspection/test/test_systemd_plugin.cpp#L42 (Test: EscapeSlashInPath)

Test Case: test_03_authenticate_valid_credentials TEST_TestAuthenticationIntegration_test_03_authenticate_valid_credentials
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_integration_tests/test/features/test_auth.test.py#L160 (Test: test_03_authenticate_valid_credentials)

Test Case: test_06_authenticate_form_urlencoded TEST_TestAuthenticationIntegration_test_06_authenticate_form_urlencoded
status: verified
verifies: REQ_INTEROP_086

Implementation: src/ros2_medkit_integration_tests/test/features/test_auth.test.py#L209 (Test: test_06_authenticate_form_urlencoded)

status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_integration_tests/test/features/test_auth.test.py#L221 (Test: test_07_refresh_token)

Test Case: test_03_timer_confirmation_captures_a_snapshot TEST_TestAutoConfirmVisibility_test_03_timer_confirmation_captures_a_snapshot
status: verified
verifies: REQ_INTEROP_088

The other half of the fix, and the one an event assertion cannot reach. Confirmation is what triggers black-box capture. A promotion that publishes but never enqueues capture leaves an alarm with no evidence behind it, which is what the operator opens the fault to look for.

Implementation: src/ros2_medkit_fault_manager/test/integration/test_auto_confirm_visibility.test.py#L234 (Test: test_03_timer_confirmation_captures_a_snapshot)

Test Case: test_bulk_data_component_aggregates_child_apps TEST_TestBulkDataApi_test_bulk_data_component_aggregates_child_apps
status: verified
verifies: REQ_INTEROP_072

Synthetic / runtime-discovered components have an empty fqn / namespace_path, so the legacy fall-through path returned zero source filters and produced empty descriptor lists. The handler now resolves hosted apps via the entity cache (mirrors the FUNCTION branch).

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L173 (Test: test_bulk_data_component_aggregates_child_apps)

Test Case: test_bulk_data_download_not_found TEST_TestBulkDataApi_test_bulk_data_download_not_found
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L222 (Test: test_bulk_data_download_not_found)

Test Case: test_bulk_data_list_categories_all_entity_types TEST_TestBulkDataApi_test_bulk_data_list_categories_all_entity_types
status: verified
verifies: REQ_INTEROP_071

As a ros2_medkit extension, these entity types support bulk-data. Uses the host-derived default component (SOVD-aligned entity model).

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L68 (Test: test_bulk_data_list_categories_all_entity_types)

Test Case: test_bulk_data_list_categories_entity_not_found TEST_TestBulkDataApi_test_bulk_data_list_categories_entity_not_found
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L98 (Test: test_bulk_data_list_categories_entity_not_found)

Test Case: test_bulk_data_list_categories_success TEST_TestBulkDataApi_test_bulk_data_list_categories_success
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L51 (Test: test_bulk_data_list_categories_success)

Test Case: test_bulk_data_list_descriptors_empty_result TEST_TestBulkDataApi_test_bulk_data_list_descriptors_empty_result
status: verified
verifies: REQ_INTEROP_072

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L152 (Test: test_bulk_data_list_descriptors_empty_result)

Test Case: test_bulk_data_list_descriptors_structure TEST_TestBulkDataApi_test_bulk_data_list_descriptors_structure
status: verified
verifies: REQ_INTEROP_072

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L112 (Test: test_bulk_data_list_descriptors_structure)

Test Case: test_bulk_data_nested_entity_path TEST_TestBulkDataApi_test_bulk_data_nested_entity_path
status: verified
verifies: REQ_INTEROP_071

Components support bulk-data. Uses the host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L237 (Test: test_bulk_data_nested_entity_path)

Test Case: test_bulk_data_unknown_category_returns_404 TEST_TestBulkDataApi_test_bulk_data_unknown_category_returns_404
status: verified
verifies: REQ_INTEROP_072

Implementation: src/ros2_medkit_integration_tests/test/features/test_bulk_data_api.test.py#L208 (Test: test_bulk_data_unknown_category_returns_404)

status: verified
verifies: REQ_INTEROP_003

The manifest loaded, so the gateway stayed in hybrid mode.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L363 (Test: test_health_reports_hybrid_mode)

Test Case: test_late_unmanifested_node_never_enters_the_entity_tree TEST_TestConfigKeyAppliesUnmanifestedPolicy_test_late_unmanifested_node_never_enters_the_entity_tree
status: verified
verifies: REQ_INTEROP_003

A node that joins after startup and is not declared stays hidden.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L369 (Test: test_late_unmanifested_node_never_enters_the_entity_tree)

status: verified
verifies: REQ_INTEROP_003

Both manifest apps bind to their runtime nodes, early and late.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L393 (Test: test_manifest_declared_nodes_are_linked)

Test Case: test_01_list_configurations TEST_TestConfigurationApi_test_01_list_configurations
status: verified
verifies: REQ_INTEROP_048

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L84 (Test: test_01_list_configurations)

Test Case: test_02_get_configuration TEST_TestConfigurationApi_test_02_get_configuration
status: verified
verifies: REQ_INTEROP_049

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L117 (Test: test_02_get_configuration)

Test Case: test_03_set_configuration TEST_TestConfigurationApi_test_03_set_configuration
status: verified
verifies: REQ_INTEROP_050

This test modifies min_temp and resets it within the same test.

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L147 (Test: test_03_set_configuration)

Test Case: test_04_delete_configuration_resets_to_default TEST_TestConfigurationApi_test_04_delete_configuration_resets_to_default
status: verified
verifies: REQ_INTEROP_052

The DELETE method resets the parameter to its default value. It first changes the value, then resets it, then verifies the reset.

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L198 (Test: test_04_delete_configuration_resets_to_default)

Test Case: test_05_configurations_nonexistent_app TEST_TestConfigurationApi_test_05_configurations_nonexistent_app
status: verified
verifies: REQ_INTEROP_048

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L239 (Test: test_05_configurations_nonexistent_app)

Test Case: test_06_configuration_nonexistent_parameter TEST_TestConfigurationApi_test_06_configuration_nonexistent_parameter
status: verified
verifies: REQ_INTEROP_049

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L257 (Test: test_06_configuration_nonexistent_parameter)

Test Case: test_06b_every_verb_rejects_an_oversized_config_id TEST_TestConfigurationApi_test_06b_every_verb_rejects_an_oversized_config_id
status: verified

The OpenAPI document publishes maxLength: 512 on every route carrying {config_id}, from one table keyed by the parameter name - so it cannot distinguish a route whose handler checks from one whose handler does not. DELETE was that route: it read the capture and never measured it, while GET and PUT both rejected. All three verbs are driven here so the published bound is backed on each of them rather than on two out of three. The fault_code half of the same table is covered by test_faults_api.test.py.

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L273 (Test: test_06b_every_verb_rejects_an_oversized_config_id)

Test Case: test_07_set_configuration_missing_value TEST_TestConfigurationApi_test_07_set_configuration_missing_value
status: verified
verifies: REQ_INTEROP_050

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L306 (Test: test_07_set_configuration_missing_value)

Test Case: test_07b_set_configuration_unconvertible_value TEST_TestConfigurationApi_test_07b_set_configuration_unconvertible_value
status: verified
verifies: REQ_INTEROP_050

A mixed-type array makes the JSON->ParameterValue conversion throw, and the throw used to land in the transport’s outer catch, which reports INTERNAL_ERROR and so answers 500 - the gateway taking the blame for a body the caller chose. Both write paths are covered: temp_sensor is a remote node (parameter service round trip) and the gateway node is its own, and the conversion sits on both.

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L323 (Test: test_07b_set_configuration_unconvertible_value)

Test Case: test_08_root_endpoint_includes_configurations TEST_TestConfigurationApi_test_08_root_endpoint_includes_configurations
status: verified
verifies: REQ_INTEROP_048

Implementation: src/ros2_medkit_integration_tests/test/features/test_configuration_api.test.py#L356 (Test: test_08_root_endpoint_includes_configurations)

Test Case: test_all_apps_same_container TEST_TestContainerAppEndpoint_test_all_apps_same_container
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L218 (Test: test_all_apps_same_container)

Test Case: test_container_id_reflects_the_namespace_mode TEST_TestContainerAppEndpoint_test_container_id_reflects_the_namespace_mode
status: verified
verifies: REQ_INTEROP_003

This gateway runs with cgroup: private, where /proc/self/cgroup reports the namespace root and carries no ID, so the field is empty. The 64-character form is exercised against the host-namespace gateway in test_container_cgroup_layouts.py.

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L135 (Test: test_container_id_reflects_the_namespace_mode)

Test Case: test_cpu_quota_detected TEST_TestContainerAppEndpoint_test_cpu_quota_detected
status: verified
verifies: REQ_INTEROP_003

docker-compose.container.yml sets cpus: 1.0. For cgroup v2 with cpus=1.0, the quota is typically 100000us with a period of 100000us.

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L190 (Test: test_cpu_quota_detected)

Test Case: test_memory_limit_detected TEST_TestContainerAppEndpoint_test_memory_limit_detected
status: verified
verifies: REQ_INTEROP_003

docker-compose.container.yml sets 512MB = 536870912 bytes.

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L169 (Test: test_memory_limit_detected)

Test Case: test_returns_container_info TEST_TestContainerAppEndpoint_test_returns_container_info
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L120 (Test: test_returns_container_info)

Test Case: test_runtime_is_docker TEST_TestContainerAppEndpoint_test_runtime_is_docker
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L155 (Test: test_runtime_is_docker)

Test Case: test_09_hidden_ids_group_by_mount_namespace TEST_TestContainerCgroupLayouts_test_09_hidden_ids_group_by_mount_namespace
status: verified
verifies: REQ_INTEROP_003

An empty container id is not an identity. Two apps sharing a mount namespace are one container; an app in another namespace is not, and merging them would report one set of limits for both.

Implementation: src/ros2_medkit_integration_tests/test/features/test_container_cgroup_layouts.test.py#L321 (Test: test_09_hidden_ids_group_by_mount_namespace)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L256 (Test: test_containers_include_node_ids)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L272 (Test: test_containers_include_runtime)

Test Case: test_returns_containers_aggregation TEST_TestContainerComponentEndpoint_test_returns_containers_aggregation
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L241 (Test: test_returns_containers_aggregation)

Test Case: test_nonexistent_app_returns_404 TEST_TestContainerErrorHandling_test_nonexistent_app_returns_404
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L290 (Test: test_nonexistent_app_returns_404)

Test Case: test_nonexistent_component_returns_404 TEST_TestContainerErrorHandling_test_nonexistent_component_returns_404
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_container_introspection.py#L301 (Test: test_nonexistent_component_returns_404)

Test Case: test_logs_include_peer_entries TEST_TestCrossEcuFanout_test_logs_include_peer_entries
status: verified
verifies: REQ_INTEROP_061

Function logs on primary include entries from peer apps.

Implementation: src/ros2_medkit_integration_tests/test/features/test_cross_ecu_fanout.test.py#L348 (Test: test_logs_include_peer_entries)

Test Case: test_logs_severity_filter_forwarded TEST_TestCrossEcuFanout_test_logs_severity_filter_forwarded
status: verified
verifies: REQ_INTEROP_061

Querying with ?severity=error should return only error+ entries. If the filter is NOT forwarded, the peer would return ALL entries (including info). Verify every entry is error+.

Implementation: src/ros2_medkit_integration_tests/test/features/test_cross_ecu_fanout.test.py#L378 (Test: test_logs_severity_filter_forwarded)

Test Case: test_primary_forwards_ecu_b_detail_one_hop TEST_TestDaisyChainAggregation_test_primary_forwards_ecu_b_detail_one_hop
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_daisy_chain_aggregation.test.py#L259 (Test: test_primary_forwards_ecu_b_detail_one_hop)

Test Case: test_primary_forwards_ecu_c_detail_two_hops TEST_TestDaisyChainAggregation_test_primary_forwards_ecu_c_detail_two_hops
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_daisy_chain_aggregation.test.py#L265 (Test: test_primary_forwards_ecu_c_detail_two_hops)

Test Case: test_primary_sees_all_ecus_as_subcomponents_of_robot_x TEST_TestDaisyChainAggregation_test_primary_sees_all_ecus_as_subcomponents_of_robot_x
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_daisy_chain_aggregation.test.py#L236 (Test: test_primary_sees_all_ecus_as_subcomponents_of_robot_x)

Test Case: test_primary_serves_robot_x_detail_locally_with_contributors TEST_TestDaisyChainAggregation_test_primary_serves_robot_x_detail_locally_with_contributors
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_daisy_chain_aggregation.test.py#L245 (Test: test_primary_serves_robot_x_detail_locally_with_contributors)

Test Case: test_app_data_body_door TEST_TestDataRead_test_app_data_body_door
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L130 (Test: test_app_data_body_door)

Test Case: test_app_data_chassis_brakes TEST_TestDataRead_test_app_data_chassis_brakes
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L107 (Test: test_app_data_chassis_brakes)

Test Case: test_app_data_powertrain_engine TEST_TestDataRead_test_app_data_powertrain_engine
status: verified
verifies: REQ_INTEROP_018

Apps are ROS 2 nodes. The temp_sensor app publishes temperature data.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L79 (Test: test_app_data_powertrain_engine)

Test Case: test_app_data_structure TEST_TestDataRead_test_app_data_structure
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L153 (Test: test_app_data_structure)

Test Case: test_app_no_topics TEST_TestDataRead_test_app_no_topics
status: verified
verifies: REQ_INTEROP_018

The calibration app typically has only services, no topics. Uses poll_endpoint to avoid race conditions with service-only nodes that can transiently disappear from the ROS 2 graph between discovery cycles (observed on Jazzy).

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L194 (Test: test_app_no_topics)

Test Case: test_app_nonexistent_error TEST_TestDataRead_test_app_nonexistent_error
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L180 (Test: test_app_nonexistent_error)

Test Case: test_component_nonexistent_topic_metadata_only TEST_TestDataRead_test_component_nonexistent_topic_metadata_only
status: verified
verifies: REQ_INTEROP_019

The gateway returns metadata about the topic even if no data is available. Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L329 (Test: test_component_nonexistent_topic_metadata_only)

Test Case: test_component_topic_data_structure TEST_TestDataRead_test_component_topic_data_structure
status: verified
verifies: REQ_INTEROP_019

Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L289 (Test: test_component_topic_data_structure)

Test Case: test_component_topic_nonexistent_component_error TEST_TestDataRead_test_component_topic_nonexistent_component_error
status: verified
verifies: REQ_INTEROP_019

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L353 (Test: test_component_topic_nonexistent_component_error)

Test Case: test_component_topic_pressure TEST_TestDataRead_test_component_topic_pressure
status: verified
verifies: REQ_INTEROP_019

Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L264 (Test: test_component_topic_pressure)

Test Case: test_component_topic_rpm TEST_TestDataRead_test_component_topic_rpm
status: verified
verifies: REQ_INTEROP_019

Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L239 (Test: test_component_topic_rpm)

Test Case: test_component_topic_temperature TEST_TestDataRead_test_component_topic_temperature
status: verified
verifies: REQ_INTEROP_019

Uses host-derived default component which aggregates all apps.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L212 (Test: test_component_topic_temperature)

Test Case: test_component_topic_valid_names TEST_TestDataRead_test_component_topic_valid_names
status: verified
verifies: REQ_INTEROP_019

Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L392 (Test: test_component_topic_valid_names)

Test Case: test_component_topic_with_slashes TEST_TestDataRead_test_component_topic_with_slashes
status: verified
verifies: REQ_INTEROP_019

Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L372 (Test: test_component_topic_with_slashes)

Test Case: test_list_function_data TEST_TestDataRead_test_list_function_data
status: verified
verifies: REQ_INTEROP_018

Functions are created from namespace grouping in runtime_only mode. The powertrain function should include topics from engine sensors.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L466 (Test: test_list_function_data)

Test Case: test_list_function_data_invalid_id TEST_TestDataRead_test_list_function_data_invalid_id
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L502 (Test: test_list_function_data_invalid_id)

Test Case: test_list_function_data_nonexistent TEST_TestDataRead_test_list_function_data_nonexistent
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_read.test.py#L484 (Test: test_list_function_data_nonexistent)

Test Case: test_publish_brake_command TEST_TestDataWrite_test_publish_brake_command
status: verified
verifies: REQ_INTEROP_020

Uses host-derived default component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_write.test.py#L66 (Test: test_publish_brake_command)

Test Case: test_publish_invalid_json_body TEST_TestDataWrite_test_publish_invalid_json_body
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_write.test.py#L179 (Test: test_publish_invalid_json_body)

Test Case: test_publish_nonexistent_component TEST_TestDataWrite_test_publish_nonexistent_component
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_write.test.py#L160 (Test: test_publish_nonexistent_component)

Test Case: test_publish_validation_invalid_type_format TEST_TestDataWrite_test_publish_validation_invalid_type_format
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_write.test.py#L129 (Test: test_publish_validation_invalid_type_format)

Test Case: test_publish_validation_missing_data TEST_TestDataWrite_test_publish_validation_missing_data
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_write.test.py#L111 (Test: test_publish_validation_missing_data)

Test Case: test_publish_validation_missing_type TEST_TestDataWrite_test_publish_validation_missing_type
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_integration_tests/test/features/test_data_write.test.py#L93 (Test: test_publish_validation_missing_type)

Test Case: test_entity_detail_documents_match_the_canonical_key TEST_TestDeprecatedDiscoveryKeyIsAnAlias_test_entity_detail_documents_match_the_canonical_key
status: verified
verifies: REQ_INTEROP_003

The collection view can agree while the detail view does not.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L442 (Test: test_entity_detail_documents_match_the_canonical_key)

status: verified
verifies: REQ_INTEROP_003

Comparing id sets alone would not notice the alias applying a different configuration value, or producing different names, hierarchy, bindings, provenance or online state - all of which are things a second parse path can get wrong. So the whole served item is compared, minus only the fields that cannot be equal by construction (see _comparable_entity).

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L419 (Test: test_entity_tree_matches_the_canonical_key)

status: verified
verifies: REQ_INTEROP_003

The deprecated key is a deprecation, not a load failure.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L413 (Test: test_health_reports_hybrid_mode)

Test Case: test_late_unmanifested_node_never_enters_the_entity_tree TEST_TestDeprecatedDiscoveryKeyIsAnAlias_test_late_unmanifested_node_never_enters_the_entity_tree
status: verified
verifies: REQ_INTEROP_003

The alias applies the policy, not just the entity declarations.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L461 (Test: test_late_unmanifested_node_never_enters_the_entity_tree)

Test Case: test_apps_docs_returns_entity_collection_spec TEST_TestDocsEndpoint_test_apps_docs_returns_entity_collection_spec
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L92 (Test: test_apps_docs_returns_entity_collection_spec)

Test Case: test_areas_docs_returns_entity_collection_spec TEST_TestDocsEndpoint_test_areas_docs_returns_entity_collection_spec
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L126 (Test: test_areas_docs_returns_entity_collection_spec)

Test Case: test_components_docs_returns_entity_collection_spec TEST_TestDocsEndpoint_test_components_docs_returns_entity_collection_spec
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L109 (Test: test_components_docs_returns_entity_collection_spec)

Test Case: test_data_collection_docs TEST_TestDocsEndpoint_test_data_collection_docs
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L169 (Test: test_data_collection_docs)

Test Case: test_logs_configuration_schema_field_names TEST_TestDocsEndpoint_test_logs_configuration_schema_field_names
status: verified
verifies: REQ_INTEROP_002

The log configuration schema must use ‘severity_filter’ and ‘max_entries’, not ‘level’ (which was a bug in the initial implementation).

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L209 (Test: test_logs_configuration_schema_field_names)

Test Case: test_nested_entity_docs_describes_nothing_rather_than_fabricating TEST_TestDocsEndpoint_test_nested_entity_docs_describes_nothing_rather_than_fabricating
status: verified
verifies: REQ_INTEROP_002

/components/{id}/apps/{id} resolves - the component really does host the app - but no route is registered under it, and the nested entity itself answers 404. Since the sub-document became a projection of the route registry, its spec is a valid OpenAPI document with an empty paths object. The hand-written producer described 15 paths there that no route answers: the detail endpoint, one per entry of EntityCapabilities::for_type(APP).collections() - 13 of them, none skipped - and /logs/configuration. Pinned so that emptiness is the intended answer rather than an accident of the filter.

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L263 (Test: test_nested_entity_docs_describes_nothing_rather_than_fabricating)

Test Case: test_nonexistent_entity_docs_returns_404 TEST_TestDocsEndpoint_test_nonexistent_entity_docs_returns_404
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L307 (Test: test_nonexistent_entity_docs_returns_404)

Test Case: test_nonexistent_path_docs_returns_404 TEST_TestDocsEndpoint_test_nonexistent_path_docs_returns_404
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L320 (Test: test_nonexistent_path_docs_returns_404)

Test Case: test_operations_collection_docs TEST_TestDocsEndpoint_test_operations_collection_docs
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L197 (Test: test_operations_collection_docs)

Test Case: test_root_docs_returns_openapi_spec TEST_TestDocsEndpoint_test_root_docs_returns_openapi_spec
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L56 (Test: test_root_docs_returns_openapi_spec)

Test Case: test_spec_contains_components TEST_TestDocsEndpoint_test_spec_contains_components
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L347 (Test: test_spec_contains_components)

Test Case: test_spec_contains_server_info TEST_TestDocsEndpoint_test_spec_contains_server_info
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L333 (Test: test_spec_contains_server_info)

Test Case: test_specific_app_docs TEST_TestDocsEndpoint_test_specific_app_docs
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_docs_endpoint.test.py#L143 (Test: test_specific_app_docs)

Test Case: test_plugin_entity_fault_carries_entity_values TEST_TestEntityFreezeFrame_test_plugin_entity_fault_carries_entity_values
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_freeze_frame.test.py#L156 (Test: test_plugin_entity_fault_carries_entity_values)

Test Case: test_ros_entity_fault_carries_own_topic_data TEST_TestEntityFreezeFrame_test_ros_entity_fault_carries_own_topic_data
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_freeze_frame.test.py#L251 (Test: test_ros_entity_fault_carries_own_topic_data)

Test Case: test_route_only_plugin_disconnected_entity_carries_last_known_values TEST_TestEntityFreezeFrame_test_route_only_plugin_disconnected_entity_carries_last_known_values
status: verified
verifies: REQ_INTEROP_088

The last known values it serves are the point of a loss-of-comms fault, and x-medkit marks the frame disconnected with the payload’s own timestamp.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_freeze_frame.test.py#L223 (Test: test_route_only_plugin_disconnected_entity_carries_last_known_values)

Test Case: test_route_only_plugin_fault_carries_entity_values TEST_TestEntityFreezeFrame_test_route_only_plugin_fault_carries_entity_values
status: verified
verifies: REQ_INTEROP_088

With no DataProvider and no FaultProvider the entity still carries its own values, captured via in-process x-plc-data dispatch and served through the fault_manager fall-through.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_freeze_frame.test.py#L180 (Test: test_route_only_plugin_fault_carries_entity_values)

Test Case: test_area_components_nonexistent_error TEST_TestEntityListing_test_area_components_nonexistent_error
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L153 (Test: test_area_components_nonexistent_error)

Test Case: test_function_detail_accessible TEST_TestEntityListing_test_function_detail_accessible
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L140 (Test: test_function_detail_accessible)

Test Case: test_invalid_app_id_special_chars TEST_TestEntityListing_test_invalid_app_id_special_chars
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L171 (Test: test_invalid_app_id_special_chars)

Test Case: test_invalid_area_id_special_chars TEST_TestEntityListing_test_invalid_area_id_special_chars
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L203 (Test: test_invalid_area_id_special_chars)

Test Case: test_invalid_ids_with_special_chars TEST_TestEntityListing_test_invalid_ids_with_special_chars
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L256 (Test: test_invalid_ids_with_special_chars)

Test Case: test_list_areas_empty_in_runtime_mode TEST_TestEntityListing_test_list_areas_empty_in_runtime_mode
status: verified
verifies: REQ_INTEROP_003

With the SOVD-aligned entity model, areas are not created from namespaces in runtime_only mode. Namespace grouping creates Functions instead.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L55 (Test: test_list_areas_empty_in_runtime_mode)

Test Case: test_list_components TEST_TestEntityListing_test_list_components
status: verified
verifies: REQ_INTEROP_003

With the SOVD-aligned entity model, runtime_only mode exposes a single Component derived from the host system info (hostname, OS, architecture) rather than synthetic namespace-based components.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L74 (Test: test_list_components)

Test Case: test_list_functions TEST_TestEntityListing_test_list_functions
status: verified
verifies: REQ_INTEROP_003

With the SOVD-aligned entity model, namespace grouping creates Function entities instead of Areas/Components.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L111 (Test: test_list_functions)

Test Case: test_valid_ids_with_underscores TEST_TestEntityListing_test_valid_ids_with_underscores
status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_listing.test.py#L231 (Test: test_valid_ids_with_underscores)

Test Case: test_app_is_located_on_endpoint TEST_TestEntityModelRuntime_test_app_is_located_on_endpoint
status: verified
verifies: REQ_INTEROP_003

The is-located-on endpoint returns a collection response with items containing the host component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L198 (Test: test_app_is_located_on_endpoint)

Test Case: test_apps_linked_to_default_component TEST_TestEntityModelRuntime_test_apps_linked_to_default_component
status: verified
verifies: REQ_INTEROP_003

Every discovered App should reference the single default Component via the SOVD is-located-on relationship.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L169 (Test: test_apps_linked_to_default_component)

Test Case: test_areas_empty_in_runtime_mode TEST_TestEntityModelRuntime_test_areas_empty_in_runtime_mode
status: verified
verifies: REQ_INTEROP_003

With the SOVD-aligned entity model, namespaces create Functions, not Areas. Areas require explicit manifest definition.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L101 (Test: test_areas_empty_in_runtime_mode)

Test Case: test_default_component_detail TEST_TestEntityModelRuntime_test_default_component_detail
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L152 (Test: test_default_component_detail)

Test Case: test_default_component_from_host TEST_TestEntityModelRuntime_test_default_component_from_host
status: verified
verifies: REQ_INTEROP_003

The default Component is created from HostInfoProvider with hostname, OS, and architecture metadata.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L122 (Test: test_default_component_from_host)

Test Case: test_function_detail_shows_namespace_source TEST_TestEntityModelRuntime_test_function_detail_shows_namespace_source
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L83 (Test: test_function_detail_shows_namespace_source)

Test Case: test_function_hosts_apps TEST_TestEntityModelRuntime_test_function_hosts_apps
status: verified
verifies: REQ_INTEROP_003

The powertrain Function (from /powertrain namespace) should host apps like temp_sensor, rpm_sensor, calibration, long_calibration. We verify this by checking the x-medkit.ros2.node field on app detail which contains the FQN (e.g. /powertrain/engine/temp_sensor).

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L248 (Test: test_function_hosts_apps)

Test Case: test_multiple_apps_same_component TEST_TestEntityModelRuntime_test_multiple_apps_same_component
status: verified
verifies: REQ_INTEROP_003

In runtime_only mode, there is only one Component, so every App must be located on it. We verify a subset of known demo apps rather than all apps (the gateway node itself is also an app).

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L219 (Test: test_multiple_apps_same_component)

Test Case: test_namespaces_create_functions TEST_TestEntityModelRuntime_test_namespaces_create_functions
status: verified
verifies: REQ_INTEROP_003

Demo nodes in /powertrain/engine, /chassis/brakes, /body/…, /perception/lidar should produce Functions: powertrain, chassis, body, perception.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_model_runtime.test.py#L57 (Test: test_namespaces_create_functions)

Test Case: test_app_routes_work_with_app_id TEST_TestEntityRouting_test_app_routes_work_with_app_id
status: verified
verifies: REQ_INTEROP_003

Verify that while /components rejects app IDs, /apps accepts them.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_routing.test.py#L173 (Test: test_app_routes_work_with_app_id)

Test Case: test_component_route_rejects_app_id_configurations TEST_TestEntityRouting_test_component_route_rejects_app_id_configurations
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_routing.test.py#L135 (Test: test_component_route_rejects_app_id_configurations)

Test Case: test_component_route_rejects_app_id_data TEST_TestEntityRouting_test_component_route_rejects_app_id_data
status: verified
verifies: REQ_INTEROP_003

In runtime-only discovery mode, /components/{id} should only accept synthetic component IDs, not individual ROS 2 node (app) IDs.

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_routing.test.py#L84 (Test: test_component_route_rejects_app_id_data)

Test Case: test_component_route_rejects_app_id_faults TEST_TestEntityRouting_test_component_route_rejects_app_id_faults
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_routing.test.py#L152 (Test: test_component_route_rejects_app_id_faults)

Test Case: test_component_route_rejects_app_id_operations TEST_TestEntityRouting_test_component_route_rejects_app_id_operations
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_entity_routing.test.py#L118 (Test: test_component_route_rejects_app_id_operations)

Test Case: test_external_app_bulk_data_uris_serve_the_captured_bag TEST_TestExternalAppFaultRollup_test_external_app_bulk_data_uris_serve_the_captured_bag
status: verified
verifies: REQ_INTEROP_072

The rosbag captured when the external app’s fault confirms is keyed by the fault’s reporting source - the app’s bare entity id. Every route that lists the fault must also serve its bag. The area case is the regression: GET /areas/plc-cell/faults/<code> advertises /areas/plc-cell/bulk-data/rosbags/<code>, which 404’d while the area resolved its bulk-data scope through the namespace path instead of its hosted apps’ reporting sources. Since #620 the <code> in those URLs is a recording id; the bare fault code still resolves through the compatibility path and is checked here too. Runs before the rollup test (method order is alphabetical) and reports the same fault code; the report is idempotent for both tests.

Implementation: src/ros2_medkit_integration_tests/test/features/test_external_app_fault_rollup.test.py#L155 (Test: test_external_app_bulk_data_uris_serve_the_captured_bag)

Test Case: test_external_app_fault_appears_on_every_rollup TEST_TestExternalAppFaultRollup_test_external_app_fault_appears_on_every_rollup
status: verified
verifies: REQ_INTEROP_012

Implementation: src/ros2_medkit_integration_tests/test/features/test_external_app_fault_rollup.test.py#L224 (Test: test_external_app_fault_appears_on_every_rollup)

Test Case: test_external_component_owns_faults_on_every_rollup TEST_TestExternalComponentFaultRollup_test_external_component_owns_faults_on_every_rollup
status: verified
verifies: REQ_INTEROP_012

Implementation: src/ros2_medkit_integration_tests/test/features/test_external_component_fault_rollup.test.py#L137 (Test: test_external_component_owns_faults_on_every_rollup)

Test Case: test_16_snapshot_capture_on_fault_confirmation TEST_TestFaultManagerIntegration_test_16_snapshot_capture_on_fault_confirmation
status: verified
verifies: REQ_INTEROP_088

Test that snapshot is captured when fault is confirmed.

Implementation: src/ros2_medkit_fault_manager/test/integration/test_integration.test.py#L583 (Test: test_16_snapshot_capture_on_fault_confirmation)

Test Case: test_17_get_snapshots_nonexistent_fault TEST_TestFaultManagerIntegration_test_17_get_snapshots_nonexistent_fault
status: verified
verifies: REQ_INTEROP_088

Test GetSnapshots returns error for nonexistent fault.

Implementation: src/ros2_medkit_fault_manager/test/integration/test_integration.test.py#L656 (Test: test_17_get_snapshots_nonexistent_fault)

Test Case: test_18_get_snapshots_empty_fault_code TEST_TestFaultManagerIntegration_test_18_get_snapshots_empty_fault_code
status: verified
verifies: REQ_INTEROP_088

Test GetSnapshots returns error for empty fault code.

Implementation: src/ros2_medkit_fault_manager/test/integration/test_integration.test.py#L672 (Test: test_18_get_snapshots_empty_fault_code)

Test Case: test_19_snapshot_with_topic_filter TEST_TestFaultManagerIntegration_test_19_snapshot_with_topic_filter
status: verified
verifies: REQ_INTEROP_088

Test GetSnapshots with specific topic filter.

Implementation: src/ros2_medkit_fault_manager/test/integration/test_integration.test.py#L688 (Test: test_19_snapshot_with_topic_filter)

Test Case: test_20_snapshot_config_loads_patterns TEST_TestFaultManagerIntegration_test_20_snapshot_config_loads_patterns
status: verified
verifies: REQ_INTEROP_088

Test that pattern-based config is loaded correctly.

Implementation: src/ros2_medkit_fault_manager/test/integration/test_integration.test.py#L719 (Test: test_20_snapshot_config_loads_patterns)

Test Case: test_a_refusal_from_the_fault_manager_is_not_a_server_error TEST_TestFaultsApi_test_a_refusal_from_the_fault_manager_is_not_a_server_error
status: verified

The gateway published no pattern for {fault_code}, only a maxLength, but the fault manager restricts the character set to alphanumerics, underscore, hyphen and dot. So a short code containing anything else is admitted by the gateway, reaches the fault manager, and comes back refused - a refusal the gateway has to classify. This is the same defect as the length disagreement but reached by a different route, and it does not depend on any bound: the two nodes can agree on maxLength exactly and this still fails. The classification must therefore rest on which layer answered - the fault manager declining a request is a condition of the request, whereas only a fault manager that never answered at all is a server-side failure - and not on reading the words in the message it returned.

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L208 (Test: test_a_refusal_from_the_fault_manager_is_not_a_server_error)

Test Case: test_both_verbs_reject_an_oversized_fault_code TEST_TestFaultsApi_test_both_verbs_reject_an_oversized_fault_code
status: verified

The OpenAPI document publishes maxLength: 256 on every route carrying {fault_code}, from one table keyed by the parameter name - so it cannot distinguish a route whose handler checks from one whose handler does not, and a bound belongs there only when every handler behind the template rejects. Both verbs are driven so that precondition is tested rather than assumed; the config_id half of the same table is covered by test_configuration_api.test.py. No lock is taken here on purpose. clear_fault measures the code after validate_lock_access, so a competing lock would answer 409 before the length check is reached - a real ordering difference from the configuration handlers, and not what this test is pinning.

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L138 (Test: test_both_verbs_reject_an_oversized_fault_code)

Test Case: test_both_verbs_serve_a_fault_code_up_to_the_published_bound TEST_TestFaultsApi_test_both_verbs_serve_a_fault_code_up_to_the_published_bound
status: verified

maxLength: 256 is a promise that a code of 256 characters is a well-formed request, so the only honest answer for one that names no fault is 404. The bound is enforced in two nodes, and this pins that they agree: the gateway gates at 256 (fault_handlers.cpp), and the fault manager applies kMaxFaultCodeLength to the same value on the GetFault and ClearFault services. When the two disagreed, the lengths between the lower bound and 256 were refused by the fault manager and surfaced as 503 - a value the published document calls valid answering with a server error. 128 is driven alongside 129 deliberately: it was the fault manager’s old bound, so it passed while 129 did not, and keeping both makes a regression to any lower bound visible as a split result rather than a uniform failure.

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L174 (Test: test_both_verbs_serve_a_fault_code_up_to_the_published_bound)

Test Case: test_faults_nonexistent_component TEST_TestFaultsApi_test_faults_nonexistent_component
status: verified
verifies: REQ_INTEROP_012

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L103 (Test: test_faults_nonexistent_component)

Test Case: test_get_nonexistent_fault TEST_TestFaultsApi_test_get_nonexistent_fault
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L121 (Test: test_get_nonexistent_fault)

Test Case: test_list_faults_response_structure TEST_TestFaultsApi_test_list_faults_response_structure
status: verified
verifies: REQ_INTEROP_012

In the heuristic discovery model, ROS nodes are Apps.

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L79 (Test: test_list_faults_response_structure)

Test Case: test_root_endpoint_includes_faults TEST_TestFaultsApi_test_root_endpoint_includes_faults
status: verified
verifies: REQ_INTEROP_012

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_api.test.py#L48 (Test: test_root_endpoint_includes_faults)

Test Case: test_clear_fault_returns_404_on_unrelated_component TEST_TestFaultsScopeIsolation_test_clear_fault_returns_404_on_unrelated_component
status: verified
verifies: REQ_INTEROP_015

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_scope_isolation.test.py#L153 (Test: test_clear_fault_returns_404_on_unrelated_component)

Test Case: test_get_fault_returns_200_on_owning_component TEST_TestFaultsScopeIsolation_test_get_fault_returns_200_on_owning_component
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_scope_isolation.test.py#L143 (Test: test_get_fault_returns_200_on_owning_component)

Test Case: test_get_fault_returns_404_on_unrelated_component TEST_TestFaultsScopeIsolation_test_get_fault_returns_404_on_unrelated_component
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_scope_isolation.test.py#L128 (Test: test_get_fault_returns_404_on_unrelated_component)

Test Case: test_zzz_clear_fault_returns_204_on_owning_component TEST_TestFaultsScopeIsolation_test_zzz_clear_fault_returns_204_on_owning_component
status: verified
verifies: REQ_INTEROP_015

Named _zzz_ so unittest’s alphabetic ordering runs this last - it is destructive (clears the lidar fault from the global FaultManager). The lidar_sensor demo re-reports LIDAR_RANGE_INVALID continuously, so this does not break other test runs, but in-suite siblings rely on the fault being present via the setUp wait_for_fault poll.

Implementation: src/ros2_medkit_integration_tests/test/features/test_faults_scope_isolation.test.py#L176 (Test: test_zzz_clear_fault_returns_204_on_owning_component)

Test Case: test_app_accessible_without_areas TEST_TestFlatEntityTree_test_app_accessible_without_areas
status: verified
verifies: REQ_INTEROP_003

Verifies that apps are accessible in a flat entity tree where no areas are defined.

Implementation: src/ros2_medkit_integration_tests/test/features/test_flat_entity_tree.test.py#L167 (Test: test_app_accessible_without_areas)

Test Case: test_apps_count TEST_TestFlatEntityTree_test_apps_count
status: verified
verifies: REQ_INTEROP_003

Expected: lidar-driver, turtlebot3-node, nav2-controller, robot-state-publisher.

Implementation: src/ros2_medkit_integration_tests/test/features/test_flat_entity_tree.test.py#L121 (Test: test_apps_count)

Test Case: test_areas_empty TEST_TestFlatEntityTree_test_areas_empty
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_flat_entity_tree.test.py#L68 (Test: test_areas_empty)

Test Case: test_components_count TEST_TestFlatEntityTree_test_components_count
status: verified
verifies: REQ_INTEROP_003

Expected: turtlebot3 (root) only. Subcomponents (raspberry-pi, opencr-board, lds-sensor) are filtered from the top-level listing and accessible via GET /components/turtlebot3/subcomponents.

Implementation: src/ros2_medkit_integration_tests/test/features/test_flat_entity_tree.test.py#L80 (Test: test_components_count)

Test Case: test_functions_count TEST_TestFlatEntityTree_test_functions_count
status: verified
verifies: REQ_INTEROP_003

Expected: autonomous-navigation, teleoperation.

Implementation: src/ros2_medkit_integration_tests/test/features/test_flat_entity_tree.test.py#L146 (Test: test_functions_count)

Test Case: test_subcomponents_count TEST_TestFlatEntityTree_test_subcomponents_count
status: verified
verifies: REQ_INTEROP_003

Expected: raspberry-pi, opencr-board, lds-sensor.

Implementation: src/ros2_medkit_integration_tests/test/features/test_flat_entity_tree.test.py#L100 (Test: test_subcomponents_count)

Test Case: test_app_is_located_on_endpoint TEST_TestGatewayNode_test_app_is_located_on_endpoint
status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L920 (Test: test_app_is_located_on_endpoint)

Test Case: test_area_contains_nonexistent TEST_TestGatewayNode_test_area_contains_nonexistent
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L838 (Test: test_area_contains_nonexistent)

Test Case: test_component_hosts_nonexistent TEST_TestGatewayNode_test_component_hosts_nonexistent
status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L848 (Test: test_component_hosts_nonexistent)

Test Case: test_execution_update_execution_not_found TEST_TestGatewayNode_test_execution_update_execution_not_found
status: verified
verifies: REQ_INTEROP_038

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L744 (Test: test_execution_update_execution_not_found)

Test Case: test_execution_update_invalid_component_id TEST_TestGatewayNode_test_execution_update_invalid_component_id
status: verified
verifies: REQ_INTEROP_038

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L704 (Test: test_execution_update_invalid_component_id)

Test Case: test_execution_update_missing_capability TEST_TestGatewayNode_test_execution_update_missing_capability
status: verified
verifies: REQ_INTEROP_038

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L717 (Test: test_execution_update_missing_capability)

Test Case: test_execution_update_unsupported_capability TEST_TestGatewayNode_test_execution_update_unsupported_capability
status: verified
verifies: REQ_INTEROP_038

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L730 (Test: test_execution_update_unsupported_capability)

Test Case: test_list_areas_endpoint TEST_TestGatewayNode_test_list_areas_endpoint
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L341 (Test: test_list_areas_endpoint)

Test Case: test_list_components_endpoint TEST_TestGatewayNode_test_list_components_endpoint
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L357 (Test: test_list_components_endpoint)

Test Case: test_root_endpoint TEST_TestGatewayNode_test_root_endpoint
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L236 (Test: test_root_endpoint)

Test Case: test_version_info_endpoint TEST_TestGatewayNode_test_version_info_endpoint
status: verified
verifies: REQ_INTEROP_001

Implementation: src/ros2_medkit_gateway/test/test_gateway_node.cpp#L316 (Test: test_version_info_endpoint)

Test Case: test_01_metrics_arrive_edge_becomes_active TEST_TestGraphProviderGreenwave_test_01_metrics_arrive_edge_becomes_active
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_greenwave.test.py#L347 (Test: test_01_metrics_arrive_edge_becomes_active)

Test Case: test_02_uncovered_topic_stays_pending_graph_stays_healthy TEST_TestGraphProviderGreenwave_test_02_uncovered_topic_stays_pending_graph_stays_healthy
status: verified
verifies: REQ_INTEROP_003

End-to-end form of the false-“broken” regression: an edge with no /diagnostics data must never demote the whole function’s pipeline_status, even while a sibling edge in the same function is actively reporting metrics.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_greenwave.test.py#L368 (Test: test_02_uncovered_topic_stays_pending_graph_stays_healthy)

Test Case: test_03_degradation_is_real TEST_TestGraphProviderGreenwave_test_03_degradation_is_real
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_greenwave.test.py#L388 (Test: test_03_degradation_is_real)

Test Case: test_04_provenance_is_greenwave_node TEST_TestGraphProviderGreenwave_test_04_provenance_is_greenwave_node
status: verified
verifies: REQ_INTEROP_003

Never a bare literal (“greenwave_monitor”) and never a vendor literal (“nvidia”) - only the resolved, fully-qualified node name. metrics.source resolves from a fresh get_publishers_info_by_topic("/diagnostics") query against the gateway’s own graph cache (see resolve_publisher_source in graph_provider_plugin.cpp), which can lag the edge’s first “active” sample by a discovery cycle - the edge going active only requires a message to have arrived, not that DDS discovery has yet propagated greenwave’s publisher endpoint. So this polls past the first active sample specifically for source to appear, rather than asserting on whatever the first active poll happens to return.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_greenwave.test.py#L435 (Test: test_04_provenance_is_greenwave_node)

Test Case: test_01_function_scoping_no_cross_contamination TEST_TestGraphProviderScoping_test_01_function_scoping_no_cross_contamination
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_scoping.test.py#L345 (Test: test_01_function_scoping_no_cross_contamination)

Test Case: test_02_empty_function_returns_valid_empty_document TEST_TestGraphProviderScoping_test_02_empty_function_returns_valid_empty_document
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_scoping.test.py#L390 (Test: test_02_empty_function_returns_valid_empty_document)

Test Case: test_03_system_topics_never_appear_as_edges TEST_TestGraphProviderScoping_test_03_system_topics_never_appear_as_edges
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_scoping.test.py#L402 (Test: test_03_system_topics_never_appear_as_edges)

Test Case: test_04_nitros_segment_topic_survives_filtering TEST_TestGraphProviderScoping_test_04_nitros_segment_topic_survives_filtering
status: verified
verifies: REQ_INTEROP_003

Task 5’s segment-anchored fix (has_path_segment / has_trailing_path_segment) at the integration level: a plain substring search would have wrongly filtered ‘/filterguard/probe/nitros_bridge/data’ too.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_scoping.test.py#L429 (Test: test_04_nitros_segment_topic_survives_filtering)

Test Case: test_01_sse_stream_carries_graph_document_and_pending_becomes_active TEST_TestGraphProviderSse_test_01_sse_stream_carries_graph_document_and_pending_becomes_active
status: verified
verifies: REQ_INTEROP_003

The subscription is opened immediately (well before GREENWAVE_DELAY_SEC elapses), so the very first frames carrying this edge must show it pending; only once greenwave_monitor has started and warmed up should later frames show it active. Both observations coming from the SAME SSE stream is the point of this test - it proves the sampler serves live, not frozen, data.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_sse.test.py#L232 (Test: test_01_sse_stream_carries_graph_document_and_pending_becomes_active)

Test Case: test_02_delete_subscription_stops_stream_and_removes_it TEST_TestGraphProviderSse_test_02_delete_subscription_stops_stream_and_removes_it
status: verified
verifies: REQ_INTEROP_003

Uses a fresh, short-lived subscription (no need to wait for the greenwave warmup here) - proves the CRUD lifecycle of the x-medkit-graph cyclic subscription independent of case 1’s data assertions.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_sse.test.py#L322 (Test: test_02_delete_subscription_stops_stream_and_removes_it)

Test Case: test_01_baseline_edge_becomes_active TEST_TestGraphProviderStale_test_01_baseline_edge_becomes_active
status: verified
verifies: REQ_INTEROP_003

Establishes the known-good starting point before the staleness case silences the publisher.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_stale.test.py#L309 (Test: test_01_baseline_edge_becomes_active)

Test Case: test_02_publisher_goes_silent_edge_becomes_stale TEST_TestGraphProviderStale_test_02_publisher_goes_silent_edge_becomes_stale
status: verified
verifies: REQ_INTEROP_003

This is the regression guard for the freshness model (Task 2): a plugin that never re-checks freshness (e.g. one that latches “active” forever once any message has ever been merged) would never observe ‘error’/’metrics_stale’ here and this poll would time out - it does NOT pass by construction.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_stale.test.py#L323 (Test: test_02_publisher_goes_silent_edge_becomes_stale)

Test Case: test_03_publisher_resumes_edge_recovers_to_active TEST_TestGraphProviderStale_test_03_publisher_resumes_edge_recovers_to_active
status: verified
verifies: REQ_INTEROP_003

Waits for pipeline_status == 'healthy', not just metrics_status == 'active': greenwave’s own frequency estimate is a rolling measurement and reads low for the first sample or two right after the rate change (its window still contains the old stale-period timing gaps), which briefly computes a “degraded” ratio even though the edge is already freshness-wise “active” again. Waiting for the pipeline to read healthy skips past that transient the same way _poll_until_primary_active skips past greenwave’s own zero-rate warmup sample.

Implementation: src/ros2_medkit_integration_tests/test/features/test_graph_provider_stale.test.py#L361 (Test: test_03_publisher_resumes_edge_recovers_to_active)

Test Case: test_app_detail_has_capability_uris TEST_TestHateoas_test_app_detail_has_capability_uris
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L165 (Test: test_app_detail_has_capability_uris)

Test Case: test_apps_list_has_href TEST_TestHateoas_test_apps_list_has_href
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L90 (Test: test_apps_list_has_href)

Test Case: test_area_detail_has_capability_uris TEST_TestHateoas_test_area_detail_has_capability_uris
status: verified
verifies: REQ_INTEROP_003

ros2_medkit extension: areas support resource collections beyond SOVD spec (which only defines them for apps/components).

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L188 (Test: test_area_detail_has_capability_uris)

Test Case: test_areas_list_has_href TEST_TestHateoas_test_areas_list_has_href
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L110 (Test: test_areas_list_has_href)

Test Case: test_belongs_to_app_on_area_less_component_returns_empty TEST_TestHateoas_test_belongs_to_app_on_area_less_component_returns_empty
status: verified
verifies: REQ_INTEROP_106

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L511 (Test: test_belongs_to_app_on_area_less_component_returns_empty)

Test Case: test_belongs_to_apps_nonexistent TEST_TestHateoas_test_belongs_to_apps_nonexistent
status: verified
verifies: REQ_INTEROP_106

GET /apps/{id}/belongs-to returns 404 for unknown app.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L482 (Test: test_belongs_to_apps_nonexistent)

Test Case: test_belongs_to_apps_returns_parent_area TEST_TestHateoas_test_belongs_to_apps_returns_parent_area
status: verified
verifies: REQ_INTEROP_106

GET /apps/{id}/belongs-to returns the parent area via component.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L463 (Test: test_belongs_to_apps_returns_parent_area)

Test Case: test_belongs_to_standalone_app_returns_empty TEST_TestHateoas_test_belongs_to_standalone_app_returns_empty
status: verified
verifies: REQ_INTEROP_106

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L502 (Test: test_belongs_to_standalone_app_returns_empty)

Test Case: test_component_detail_has_capability_uris TEST_TestHateoas_test_component_detail_has_capability_uris
status: verified
verifies: REQ_INTEROP_003

SOVD requires entity details to have flat capability URIs.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L134 (Test: test_component_detail_has_capability_uris)

Test Case: test_components_list_has_href TEST_TestHateoas_test_components_list_has_href
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L70 (Test: test_components_list_has_href)

Test Case: test_contains_list_has_href TEST_TestHateoas_test_contains_list_has_href
status: verified
verifies: REQ_INTEROP_006

Uses ‘powertrain’ area which contains components in the manifest.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L294 (Test: test_contains_list_has_href)

Test Case: test_depends_on_apps_has_href TEST_TestHateoas_test_depends_on_apps_has_href
status: verified
verifies: REQ_INTEROP_009

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L379 (Test: test_depends_on_apps_has_href)

Test Case: test_depends_on_apps_nonexistent TEST_TestHateoas_test_depends_on_apps_nonexistent
status: verified
verifies: REQ_INTEROP_009

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L405 (Test: test_depends_on_apps_nonexistent)

Test Case: test_depends_on_components_has_href TEST_TestHateoas_test_depends_on_components_has_href
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L352 (Test: test_depends_on_components_has_href)

Test Case: test_function_detail_has_capability_uris TEST_TestHateoas_test_function_detail_has_capability_uris
status: verified
verifies: REQ_INTEROP_003

Requires hybrid discovery mode with a manifest that defines functions.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L210 (Test: test_function_detail_has_capability_uris)

Test Case: test_functions_list_has_href TEST_TestHateoas_test_functions_list_has_href
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L545 (Test: test_functions_list_has_href)

Test Case: test_hosts_list_has_href TEST_TestHateoas_test_hosts_list_has_href
status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L322 (Test: test_hosts_list_has_href)

Test Case: test_is_located_on_apps_has_href TEST_TestHateoas_test_is_located_on_apps_has_href
status: verified
verifies: REQ_INTEROP_105

GET /apps/{id}/is-located-on returns 0-or-1 component hrefs.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L425 (Test: test_is_located_on_apps_has_href)

Test Case: test_is_located_on_apps_nonexistent TEST_TestHateoas_test_is_located_on_apps_nonexistent
status: verified
verifies: REQ_INTEROP_105

GET /apps/{id}/is-located-on returns 404 for unknown app.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L448 (Test: test_is_located_on_apps_nonexistent)

Test Case: test_is_located_on_standalone_app_returns_empty TEST_TestHateoas_test_is_located_on_standalone_app_returns_empty
status: verified
verifies: REQ_INTEROP_105

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L533 (Test: test_is_located_on_standalone_app_returns_empty)

Test Case: test_subareas_list_has_href TEST_TestHateoas_test_subareas_list_has_href
status: verified
verifies: REQ_INTEROP_004

Uses ‘powertrain’ area which has subareas defined in the manifest.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L238 (Test: test_subareas_list_has_href)

Test Case: test_subcomponents_list_has_href TEST_TestHateoas_test_subcomponents_list_has_href
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L263 (Test: test_subcomponents_list_has_href)

Test Case: test_x_medkit_extension_in_list_responses TEST_TestHateoas_test_x_medkit_extension_in_list_responses
status: verified
verifies: REQ_INTEROP_003

ROS2-specific data should be in x-medkit extension, not at top level.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hateoas.test.py#L568 (Test: test_x_medkit_extension_in_list_responses)

Test Case: test_docs_endpoint TEST_TestHealth_test_docs_endpoint
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L164 (Test: test_docs_endpoint)

Test Case: test_docs_spec_completeness TEST_TestHealth_test_docs_spec_completeness
status: verified
verifies: REQ_INTEROP_002

Validates that every endpoint has proper type contracts for client code generation - no bare “Successful response” without schema.

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L177 (Test: test_docs_spec_completeness)

Test Case: test_endpoint_list_names_each_route_once TEST_TestHealth_test_endpoint_list_names_each_route_once
status: verified
verifies: REQ_INTEROP_010

It is the route registry’s list, plus every route a loaded plugin mounts straight onto the HTTP server, plus a short hand-written tail for what is mounted outside both. Moving a route into the registry without deleting its hand-written entry lists it twice. Whether the list agrees with the document is a different question and is checked in test_openapi_contract.test.py::test_the_root_list_and_the_document_agree; this one only asks that nothing is named twice. Compared with parameter names erased, not as literal strings. The entry this was written for was spelled {entity-path} by hand and {entity_path} by the registry, so a literal comparison would have read the two copies as two different endpoints and passed. Erasing the names is safe here because no two routes in this API differ only by a parameter name - every pair differs in a literal segment - so a collision after erasure is a duplicate and not a false positive.

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L132 (Test: test_endpoint_list_names_each_route_once)

Test Case: test_health_endpoint_returns_200 TEST_TestHealth_test_health_endpoint_returns_200
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L48 (Test: test_health_endpoint_returns_200)

Test Case: test_root_endpoint_returns_api_info TEST_TestHealth_test_root_endpoint_returns_api_info
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L56 (Test: test_root_endpoint_returns_api_info)

Test Case: test_root_includes_apps_endpoints TEST_TestHealth_test_root_includes_apps_endpoints
status: verified
verifies: REQ_INTEROP_010

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L115 (Test: test_root_includes_apps_endpoints)

Test Case: test_version_endpoint TEST_TestHealth_test_version_endpoint
status: verified
verifies: REQ_INTEROP_001

Implementation: src/ros2_medkit_integration_tests/test/features/test_health.test.py#L94 (Test: test_version_endpoint)

Test Case: test_exact_app_count TEST_TestHybridSuppression_test_exact_app_count
status: verified
verifies: REQ_INTEROP_003

App count must match manifest exactly - no underscored duplicates.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L186 (Test: test_exact_app_count)

Test Case: test_exact_area_count TEST_TestHybridSuppression_test_exact_area_count
status: verified
verifies: REQ_INTEROP_003

Subareas are filtered from GET /areas and only accessible via GET /areas/{id}/subareas.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L144 (Test: test_exact_area_count)

Test Case: test_exact_component_count TEST_TestHybridSuppression_test_exact_component_count
status: verified
verifies: REQ_INTEROP_003

Component count must match manifest exactly - no underscored duplicates.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L165 (Test: test_exact_component_count)

Test Case: test_exact_function_count TEST_TestHybridSuppression_test_exact_function_count
status: verified
verifies: REQ_INTEROP_003

Function count must match manifest exactly.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L202 (Test: test_exact_function_count)

Test Case: test_health_shows_hybrid_mode TEST_TestHybridSuppression_test_health_shows_hybrid_mode
status: verified
verifies: REQ_INTEROP_003

Health endpoint should confirm hybrid discovery mode.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L306 (Test: test_health_shows_hybrid_mode)

Test Case: test_manifest_apps_are_online TEST_TestHybridSuppression_test_manifest_apps_are_online
status: verified
verifies: REQ_INTEROP_003

Even with allow_heuristic_apps=false (gap-fill blocking runtime apps from the entity tree), the linker must still receive the unfiltered runtime apps so it can bind manifest apps to live nodes. Apps in MANIFEST_APPS_WITH_BINDING must be online; manifest-only fixtures (no ros_binding) are exempt - they are present in the cache but never reach online state because no runtime node was launched for them.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L274 (Test: test_manifest_apps_are_online)

Test Case: test_no_root_or_synthetic_areas TEST_TestHybridSuppression_test_no_root_or_synthetic_areas
status: verified
verifies: REQ_INTEROP_003

No ‘root’ or underscored synthetic areas should exist in top-level.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L260 (Test: test_no_root_or_synthetic_areas)

Test Case: test_no_underscored_app_duplicates TEST_TestHybridSuppression_test_no_underscored_app_duplicates
status: verified
verifies: REQ_INTEROP_003

In hybrid mode, runtime nodes matching manifest ros_bindings should be linked to the manifest app, not create separate entities like ‘powertrain_engine_temp_sensor’.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L223 (Test: test_no_underscored_app_duplicates)

Test Case: test_no_underscored_component_duplicates TEST_TestHybridSuppression_test_no_underscored_component_duplicates
status: verified
verifies: REQ_INTEROP_003

Synthetic components like ‘powertrain_engine’ should be suppressed when manifest already defines components for those namespaces.

Implementation: src/ros2_medkit_integration_tests/test/features/test_hybrid_suppression.test.py#L242 (Test: test_no_underscored_component_duplicates)

Test Case: test_health_surfaces_leaf_collision_with_both_peers TEST_TestLeafCollisionAggregation_test_health_surfaces_leaf_collision_with_both_peers
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_leaf_collision_aggregation.test.py#L215 (Test: test_health_surfaces_leaf_collision_with_both_peers)

Test Case: test_shared_leaf_resolves_to_exactly_one_peer TEST_TestLeafCollisionAggregation_test_shared_leaf_resolves_to_exactly_one_peer
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/features/test_leaf_collision_aggregation.test.py#L233 (Test: test_shared_leaf_resolves_to_exactly_one_peer)

Test Case: test_app_status_nonexistent_returns_404 TEST_TestLifecycleStatus_test_app_status_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L146 (Test: test_app_status_nonexistent_returns_404)

Test Case: test_app_status_ready TEST_TestLifecycleStatus_test_app_status_ready
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L67 (Test: test_app_status_ready)

Test Case: test_app_status_restart_returns_501 TEST_TestLifecycleStatus_test_app_status_restart_returns_501
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L92 (Test: test_app_status_restart_returns_501)

Test Case: test_app_status_structure TEST_TestLifecycleStatus_test_app_status_structure
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L106 (Test: test_app_status_structure)

Test Case: test_component_status_ready TEST_TestLifecycleStatus_test_component_status_ready
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L79 (Test: test_component_status_ready)

Test Case: test_managed_lifecycle_activated_is_ready TEST_TestLifecycleStatus_test_managed_lifecycle_activated_is_ready
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L132 (Test: test_managed_lifecycle_activated_is_ready)

Test Case: test_managed_lifecycle_unconfigured_is_not_ready TEST_TestLifecycleStatus_test_managed_lifecycle_unconfigured_is_not_ready
status: verified
verifies: REQ_INTEROP_076

Implementation: src/ros2_medkit_integration_tests/test/features/test_lifecycle.test.py#L119 (Test: test_managed_lifecycle_unconfigured_is_not_ready)

Test Case: test_global_clear_skips_locked_entity_faults TEST_TestLockingFaults_test_global_clear_skips_locked_entity_faults
status: verified
verifies: REQ_INTEROP_100

Lock an app, global DELETE /faults skips its faults, unlock and clear works.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking_faults.test.py#L53 (Test: test_global_clear_skips_locked_entity_faults)

Test Case: test_component_lock_allows_owner_on_child TEST_TestLockingPropagation_test_component_lock_allows_owner_on_child
status: verified
verifies: REQ_INTEROP_100

Lock owner can still access child app.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking_propagation.test.py#L107 (Test: test_component_lock_allows_owner_on_child)

Test Case: test_component_lock_blocks_child_app TEST_TestLockingPropagation_test_component_lock_blocks_child_app
status: verified
verifies: REQ_INTEROP_100

Lock on component blocks mutating operations on child app.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking_propagation.test.py#L78 (Test: test_component_lock_blocks_child_app)

Test Case: test_acquire_lock_location_survives_a_trailing_slash TEST_TestLocking_test_acquire_lock_location_survives_a_trailing_slash
status: verified
verifies: REQ_INTEROP_100

Route regexes end /?$, so POST …/locks/ routes and the path is not normalised. Appending the lock id to it produced …/locks//lock_1, which the item route cannot match - ([^/]+) refuses an empty segment - so the header handed back a dead URI. This is on the shipped default: locking.enabled is true out of the box.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L128 (Test: test_acquire_lock_location_survives_a_trailing_slash)

Test Case: test_acquire_lock_on_app TEST_TestLocking_test_acquire_lock_on_app
status: verified
verifies: REQ_INTEROP_100

Acquire a lock on an app and verify the response.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L103 (Test: test_acquire_lock_on_app)

Test Case: test_acquire_lock_with_scopes TEST_TestLocking_test_acquire_lock_with_scopes
status: verified
verifies: REQ_INTEROP_100

Acquire a scoped lock.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L157 (Test: test_acquire_lock_with_scopes)

Test Case: test_acquire_without_client_id_returns_400 TEST_TestLocking_test_acquire_without_client_id_returns_400
status: verified
verifies: REQ_INTEROP_100

Acquire without X-Client-Id header returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L335 (Test: test_acquire_without_client_id_returns_400)

Test Case: test_acquire_without_expiration_returns_400 TEST_TestLocking_test_acquire_without_expiration_returns_400
status: verified
verifies: REQ_INTEROP_100

Acquire without lock_expiration returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L345 (Test: test_acquire_without_expiration_returns_400)

Test Case: test_already_locked_returns_409 TEST_TestLocking_test_already_locked_returns_409
status: verified
verifies: REQ_INTEROP_100

Second acquire by different client returns 409.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L351 (Test: test_already_locked_returns_409)

Test Case: test_break_lock TEST_TestLocking_test_break_lock
status: verified
verifies: REQ_INTEROP_100

Client B can break client A’s lock with break_lock=true.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L290 (Test: test_break_lock)

Test Case: test_extend_lock TEST_TestLocking_test_extend_lock
status: verified
verifies: REQ_INTEROP_103

Acquire then extend a lock’s expiration.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L212 (Test: test_extend_lock)

Test Case: test_get_lock_details TEST_TestLocking_test_get_lock_details
status: verified
verifies: REQ_INTEROP_102

Acquire then get lock details by lock ID.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L193 (Test: test_get_lock_details)

Test Case: test_list_locks TEST_TestLocking_test_list_locks
status: verified
verifies: REQ_INTEROP_101

Acquire then list locks.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L169 (Test: test_list_locks)

Test Case: test_list_locks_empty TEST_TestLocking_test_list_locks_empty
status: verified
verifies: REQ_INTEROP_101

List locks when none exist returns empty items.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L186 (Test: test_list_locks_empty)

Test Case: test_lock_blocks_other_client TEST_TestLocking_test_lock_blocks_other_client
status: verified
verifies: REQ_INTEROP_100

Lock by client A blocks data write by client B (409).

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L251 (Test: test_lock_blocks_other_client)

Test Case: test_lock_expires_automatically TEST_TestLocking_test_lock_expires_automatically
status: verified
verifies: REQ_INTEROP_100

Lock with short TTL expires and no longer blocks access.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L383 (Test: test_lock_expires_automatically)

Test Case: test_nonexistent_entity_returns_404 TEST_TestLocking_test_nonexistent_entity_returns_404
status: verified
verifies: REQ_INTEROP_100

Acquiring lock on nonexistent entity returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L409 (Test: test_nonexistent_entity_returns_404)

Test Case: test_owned_field_per_client TEST_TestLocking_test_owned_field_per_client
status: verified
verifies: REQ_INTEROP_101

The ‘owned’ field reflects the requesting client.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L310 (Test: test_owned_field_per_client)

Test Case: test_release_lock TEST_TestLocking_test_release_lock
status: verified
verifies: REQ_INTEROP_104

Acquire then release a lock, verify it’s gone.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L230 (Test: test_release_lock)

Test Case: test_release_not_owner_returns_403 TEST_TestLocking_test_release_not_owner_returns_403
status: verified
verifies: REQ_INTEROP_104

Releasing another client’s lock returns 403.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L366 (Test: test_release_not_owner_returns_403)

Test Case: test_scoped_lock_allows_other_collections TEST_TestLocking_test_scoped_lock_allows_other_collections
status: verified
verifies: REQ_INTEROP_100

Scoped lock on configurations does not block data writes.

Implementation: src/ros2_medkit_integration_tests/test/features/test_locking.test.py#L268 (Test: test_scoped_lock_allows_other_collections)

Test Case: test_configurations_subscription_create TEST_TestMultiCollectionSubscriptions_test_configurations_subscription_create
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L179 (Test: test_configurations_subscription_create)

Test Case: test_configurations_subscription_streams_whole_collection TEST_TestMultiCollectionSubscriptions_test_configurations_subscription_streams_whole_collection
status: verified

The gateway refuses a configurations URI that names a single parameter because the sampler answers with the whole collection. This pins the other side of that contract: the collection URI is still accepted and still delivers parameter items on the stream.

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L307 (Test: test_configurations_subscription_streams_whole_collection)

status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L143 (Test: test_data_subscription_create)

status: verified
verifies: REQ_INTEROP_028

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L407 (Test: test_delete_subscription)

status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L162 (Test: test_faults_subscription_create)

status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L196 (Test: test_logs_subscription_create)

status: verified

Creates a cyclic subscription on /apps/{id}/logs, connects to the SSE events endpoint, and verifies that EventEnvelope payloads arrive with log entry items containing id, timestamp, severity, and message fields.

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L213 (Test: test_logs_subscription_sse_stream)

status: verified
verifies: REQ_INTEROP_027

Implementation: src/ros2_medkit_integration_tests/test/features/test_multi_collection_subscriptions.test.py#L386 (Test: test_update_subscription_interval)

Test Case: test_all_endpoints_accept_spec_requests TEST_TestOpenApiCallability_test_all_endpoints_accept_spec_requests
status: verified
verifies: REQ_INTEROP_002

A 400 response means the spec is wrong - a generated client would build a request that the handler rejects.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_callability.test.py#L342 (Test: test_all_endpoints_accept_spec_requests)

Test Case: test_live_entity_responses_conform_to_spec TEST_TestOpenApiCallability_test_live_entity_responses_conform_to_spec
status: verified
verifies: REQ_INTEROP_002

Covers the GET endpoints for the domains migrated in issue #338: - GET /areas (AreaList schema) - GET /components (ComponentList schema) - GET /apps (AppList schema) - GET /health (Health schema) - GET /version-info (VersionInfo schema) - GET /apps/{id} (AppDetail schema, using temp_sensor fixture) - GET /apps/{id}/faults (FaultList schema) - GET /apps/{id}/operations (OperationList schema) - GET /apps/{id}/data (DataListResult opaque schema) A schema mismatch means the handler’s wire output no longer matches its DTO schema - a real contract bug introduced by the migration.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_callability.test.py#L624 (Test: test_live_entity_responses_conform_to_spec)

Test Case: test_x_medkit_sub_schemas_present_in_spec TEST_TestOpenApiCallability_test_x_medkit_sub_schemas_present_in_spec
status: verified
verifies: REQ_INTEROP_002

Verifies that components/schemas in the live spec contains the DTO-generated x-medkit sub-schemas for ALL four entity types and that each entity’s list-item schema references the matching sub-schema: - XMedkitArea <- referenced by AreaListItem - XMedkitComponent <- referenced by ComponentListItem - XMedkitApp <- referenced by AppListItem - XMedkitFunction <- referenced by FunctionListItem Plus XMedkitRos2 (shared by Area and App) must exist with the "namespace" property. These assertions confirm that the DTO contract layer (issue #338) is wired to the OpenAPI spec builder uniformly across every entity type: the spec is derived from the same types that the handlers use to serialise responses.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_callability.test.py#L449 (Test: test_x_medkit_sub_schemas_present_in_spec)

Test Case: test_document_is_openapi_31 TEST_TestOpenApiContract_test_document_is_openapi_31
status: verified
verifies: REQ_INTEROP_002

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_contract.test.py#L170 (Test: test_document_is_openapi_31)

Test Case: test_entity_id_parameters_follow_the_projection_naming TEST_TestOpenApiContract_test_entity_id_parameters_follow_the_projection_naming
status: verified
verifies: REQ_INTEROP_002

CapabilityGenerator::entity_template derives the parameter name of an entity segment by dropping a trailing s and appending _id, and the <entity-path>/docs projection substitutes the caller’s id on that name. A route registered as /components/{comp_id}/... would therefore never be substituted, and would disappear from the entity-scoped spec while still being served - silently, because the projection reports the routes it recognises rather than failing on one it does not. Scoped deliberately: it survives in the collection-level spec. generate_entity_collection passes no bindings, so it substitutes nothing and filters on the collection prefix alone - GET /components/docs still lists /components/{comp_id}/hosts. Only a document whose prefix carries the id loses the route. The convention is otherwise only stated in a comment. A total drift would show up in test_docs_endpoint; a single renamed route would not, which is what this closes. Two limits, since this checks less than its name suggests. The keyword tuple below is hardcoded while the route side reads the explicit singular table in rest_server.cpp, so a new entity type is unchecked here and this still passes. And the non-vacuity floor is loose: 141 pairs exist today, so losing every functions, areas, subareas and subcomponents pair would leave 83 and still clear it. Both bound how much drift this notices, not whether what it notices is real.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_contract.test.py#L376 (Test: test_entity_id_parameters_follow_the_projection_naming)

Test Case: test_every_advertised_collection_is_served TEST_TestOpenApiContract_test_every_advertised_collection_is_served
status: verified
verifies: REQ_INTEROP_002

Two surfaces advertise an entity’s resource collections and they are built from two different lists: the capabilities array on GET /{type}/{id} comes from a per-handler CapabilityBuilder call, the entity’s /docs sub-document is projected out of the route registry. Both are followed here, for all four entity types, because a collection can be right in one list and wrong in the other. Only the sub-document paths that declare a get are followed. Since the sub-document became a projection it holds every method the gateway serves under the entity, and PUT /{type}/{id}/status/restart has no GET to answer - a 404 there would say nothing about whether the route exists. A 501 is a served answer - the route exists and reports that the backend does not. A 404 is what this pins: an href the gateway published that no route answers.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_contract.test.py#L1220 (Test: test_every_advertised_collection_is_served)

Test Case: test_configurations_payload_uses_nested_x_medkit TEST_TestOpenApiResponseDrift_test_configurations_payload_uses_nested_x_medkit
status: verified
verifies: REQ_INTEROP_002

Items at the top level (only in aggregated mode) and parameters inside x-medkit.parameters[] (always emitted) must carry vendor source attribution under a nested x-medkit object, never as flat x-medkit-source / x-medkit-node keys. The drift test cannot catch reintroduction of the legacy flat keys because ConfigurationMetaData does not set additionalProperties: false. temp_sensor declares four ROS 2 parameters in the test fixture, which exercises the per-parameter emit path that #385 migrated.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_response_drift.test.py#L421 (Test: test_configurations_payload_uses_nested_x_medkit)

Test Case: test_get_responses_match_declared_schema TEST_TestOpenApiResponseDrift_test_get_responses_match_declared_schema
status: verified
verifies: REQ_INTEROP_002

Iterates GET endpoints from /docs, fetches each, and validates bodies against the response schema declared for status 200. Schema drift (handler emits a field schema does not declare as required, or vice versa) raises an error. Coverage limited to GET verbs; POST/PUT/DELETE request bodies and non-200 response shapes are out of scope (tracked under issue #338). Endpoints whose path placeholders need an entity type that was not discovered (e.g. /functions/{function_id}/… when no functions exist) are skipped explicitly with an entry in skipped_for_missing_entity rather than substituted with a bogus value that would silently 404 unvalidated.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_response_drift.test.py#L258 (Test: test_get_responses_match_declared_schema)

Test Case: test_update_routes_answer_with_the_declared_status TEST_TestOpenApiResponseDrift_test_update_routes_answer_with_the_declared_status
status: verified
verifies: REQ_INTEROP_002

The drift loop above only exercises GET against 200, so the derived success status of a write route has no other wire coverage. The prepare PUT is the body-less 202 shape (Accepted<NoContent>) the lifecycle transitions share; no lifecycle provider ships with the gateway, so this is where that shape is proven end to end.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_response_drift.test.py#L352 (Test: test_update_routes_answer_with_the_declared_status)

Test Case: test_update_status_payload_uses_nested_x_medkit TEST_TestOpenApiResponseDrift_test_update_status_payload_uses_nested_x_medkit
status: verified
verifies: REQ_INTEROP_002

The handler must emit x-medkit: {phase: ...} (nested object), not the legacy flat x-medkit-phase key. The drift test above already catches this via the schema declared in update_status_schema(); this explicit assertion makes the regression intent obvious.

Implementation: src/ros2_medkit_integration_tests/test/features/test_openapi_response_drift.test.py#L402 (Test: test_update_status_payload_uses_nested_x_medkit)

Test Case: test_async_execution_location_resolves TEST_TestOperationsApi_test_async_execution_location_resolves
status: verified
verifies: REQ_INTEROP_035

The gateway used to build this header from a two-way “app or else component” choice, so an execution started through /functions/… or /areas/… was handed a /components/… URI that resolves to nothing. The fixture discovers the powertrain function from the demo nodes’ namespace, and long_calibration is an action on it, so this drives the branch that was wrong.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L478 (Test: test_async_execution_location_resolves)

Test Case: test_cancel_nonexistent_execution TEST_TestOperationsApi_test_cancel_nonexistent_execution
status: verified
verifies: REQ_INTEROP_039

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L617 (Test: test_cancel_nonexistent_execution)

Test Case: test_create_execution_for_service TEST_TestOperationsApi_test_create_execution_for_service
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L580 (Test: test_create_execution_for_service)

Test Case: test_execution_is_scoped_to_the_entity_that_started_it TEST_TestOperationsApi_test_execution_is_scoped_to_the_entity_that_started_it
status: verified
verifies: REQ_INTEROP_036

An execution started through one entity used to be readable, stoppable and cancellable through any other entity’s URI - the handler looked the goal up by id alone and never asked who owned it. Everything the collection endpoint lists for an entity must be exactly what its item endpoints resolve.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L538 (Test: test_execution_is_scoped_to_the_entity_that_started_it)

Test Case: test_execution_location_survives_a_trailing_slash TEST_TestOperationsApi_test_execution_location_survives_a_trailing_slash
status: verified
verifies: REQ_INTEROP_035

POST …/executions/ routes (every route regex ends /?$) and the path is not normalised, so appending the goal id to it produced …/executions//<id> - a Location no route can match.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L451 (Test: test_execution_location_survives_a_trailing_slash)

Test Case: test_executions_list_on_a_function TEST_TestOperationsApi_test_executions_list_on_a_function
status: verified
verifies: REQ_INTEROP_036

/functions/{id}/operations/{op}/executions used to 404 with entity-not-found - the handler reached for the component cache and then the app cache and gave up - immediately after the very same function had listed that operation.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L515 (Test: test_executions_list_on_a_function)

Test Case: test_get_operation_details_for_apps TEST_TestOperationsApi_test_get_operation_details_for_apps
status: verified
verifies: REQ_INTEROP_034

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L349 (Test: test_get_operation_details_for_apps)

Test Case: test_get_operation_details_for_service TEST_TestOperationsApi_test_get_operation_details_for_service
status: verified
verifies: REQ_INTEROP_034

Uses host-derived default component which aggregates all apps’ operations.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L294 (Test: test_get_operation_details_for_service)

Test Case: test_get_operation_not_found TEST_TestOperationsApi_test_get_operation_not_found
status: verified
verifies: REQ_INTEROP_034

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L385 (Test: test_get_operation_not_found)

Test Case: test_list_executions_returns_items_array TEST_TestOperationsApi_test_list_executions_returns_items_array
status: verified
verifies: REQ_INTEROP_036

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L406 (Test: test_list_executions_returns_items_array)

Test Case: test_list_operations TEST_TestOperationsApi_test_list_operations
status: verified
verifies: REQ_INTEROP_033

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L637 (Test: test_list_operations)

Test Case: test_operation_call_calibrate_service TEST_TestOperationsApi_test_operation_call_calibrate_service
status: verified
verifies: REQ_INTEROP_035

Operations are exposed on Apps (ROS 2 nodes), not Components.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L71 (Test: test_operation_call_calibrate_service)

Test Case: test_operation_call_invalid_entity_id TEST_TestOperationsApi_test_operation_call_invalid_entity_id
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L132 (Test: test_operation_call_invalid_entity_id)

Test Case: test_operation_call_invalid_operation_name TEST_TestOperationsApi_test_operation_call_invalid_operation_name
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L159 (Test: test_operation_call_invalid_operation_name)

Test Case: test_operation_call_nonexistent_entity TEST_TestOperationsApi_test_operation_call_nonexistent_entity
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L116 (Test: test_operation_call_nonexistent_entity)

Test Case: test_operation_call_nonexistent_operation TEST_TestOperationsApi_test_operation_call_nonexistent_operation
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L98 (Test: test_operation_call_nonexistent_operation)

Test Case: test_operation_call_with_invalid_json TEST_TestOperationsApi_test_operation_call_with_invalid_json
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L186 (Test: test_operation_call_with_invalid_json)

Test Case: test_operations_listed_in_app_discovery TEST_TestOperationsApi_test_operations_listed_in_app_discovery
status: verified
verifies: REQ_INTEROP_033

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L207 (Test: test_operations_listed_in_app_discovery)

Test Case: test_rejected_goal_names_the_entity_field_the_caller_used TEST_TestOperationsApi_test_rejected_goal_names_the_entity_field_the_caller_used
status: verified
verifies: REQ_INTEROP_035

id_field was chosen the same “app or else component” way the Location was, so a function whose goal was rejected got back {“component_id”: “powertrain”} - a field it never sent, on an entity type that is not a component. The demo action rejects order > 50, which is the cheapest way to reach the params.

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L428 (Test: test_rejected_goal_names_the_entity_field_the_caller_used)

Test Case: test_root_endpoint_includes_operations TEST_TestOperationsApi_test_root_endpoint_includes_operations
status: verified
verifies: REQ_INTEROP_033

Implementation: src/ros2_medkit_integration_tests/test/features/test_operations_api.test.py#L241 (Test: test_root_endpoint_includes_operations)

Test Case: test_01_two_occurrences_leave_two_downloadable_recordings TEST_TestRosbagHistoryDownload_test_01_two_occurrences_leave_two_downloadable_recordings
status: verified
verifies: REQ_INTEROP_072

Implementation: src/ros2_medkit_integration_tests/test/features/test_rosbag_history_download.test.py#L199 (Test: test_01_two_occurrences_leave_two_downloadable_recordings)

Test Case: test_02_every_recording_is_dated_by_its_own_capture TEST_TestRosbagHistoryDownload_test_02_every_recording_is_dated_by_its_own_capture
status: verified
verifies: REQ_INTEROP_072

creation_date was read off the fault rather than the recording, so every recording of one fault carried the same date - and this feature is what lets a fault hold more than one, which makes that field the only way to tell the occurrences apart. Worse, an acknowledged fault drops out of the default fault listing, so the lookup missed and its recordings were dated 1970 while the rows were still being served. By this point the fault has been acknowledged twice, so both failure modes are live.

Implementation: src/ros2_medkit_integration_tests/test/features/test_rosbag_history_download.test.py#L262 (Test: test_02_every_recording_is_dated_by_its_own_capture)

Test Case: test_03_the_fault_code_url_still_serves_the_newest_recording TEST_TestRosbagHistoryDownload_test_03_the_fault_code_url_still_serves_the_newest_recording
status: verified
verifies: REQ_INTEROP_072

The repo’s own docs and the SSE payload tell clients to build /{entity}/bulk-data/rosbags/{fault_code}. That address has to keep working, and to mean what it always meant: this fault’s latest bag.

Implementation: src/ros2_medkit_integration_tests/test/features/test_rosbag_history_download.test.py#L296 (Test: test_03_the_fault_code_url_still_serves_the_newest_recording)

Test Case: test_04_a_shared_burst_recording_is_listed_once TEST_TestRosbagHistoryDownload_test_04_a_shared_burst_recording_is_listed_once
status: verified
verifies: REQ_INTEROP_072

The lidar’s calibration fault confirms at startup and its own recording exists alongside the range fault’s. Whatever the burst structure turned out to be, no bag may appear twice in the listing: a repeated id would report the same bytes as several items and inflate the storage the operator sees.

Implementation: src/ros2_medkit_integration_tests/test/features/test_rosbag_history_download.test.py#L325 (Test: test_04_a_shared_burst_recording_is_listed_once)

Test Case: test_01_create_action_execution_and_poll_to_completion TEST_TestScenarioActionLifecycle_test_01_create_action_execution_and_poll_to_completion
status: verified
verifies: REQ_INTEROP_022

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L109 (Test: test_01_create_action_execution_and_poll_to_completion)

Test Case: test_02_cancel_action_execution TEST_TestScenarioActionLifecycle_test_02_cancel_action_execution
status: verified
verifies: REQ_INTEROP_022

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L127 (Test: test_02_cancel_action_execution)

Test Case: test_03_service_execution_returns_immediately TEST_TestScenarioActionLifecycle_test_03_service_execution_returns_immediately
status: verified
verifies: REQ_INTEROP_035

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L175 (Test: test_03_service_execution_returns_immediately)

Test Case: test_04_execution_appears_in_list TEST_TestScenarioActionLifecycle_test_04_execution_appears_in_list
status: verified
verifies: REQ_INTEROP_022

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L217 (Test: test_04_execution_appears_in_list)

Test Case: test_06_get_operation_details TEST_TestScenarioActionLifecycle_test_06_get_operation_details
status: verified
verifies: REQ_INTEROP_034

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L285 (Test: test_06_get_operation_details)

Test Case: test_07_get_execution_status TEST_TestScenarioActionLifecycle_test_07_get_execution_status
status: verified
verifies: REQ_INTEROP_037

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L330 (Test: test_07_get_execution_status)

Test Case: test_08_update_execution_not_implemented TEST_TestScenarioActionLifecycle_test_08_update_execution_not_implemented
status: verified
verifies: REQ_INTEROP_038

Each test creates its OWN execution, so there is no concurrent-goal issue that plagued the original test_101.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_action_lifecycle.test.py#L350 (Test: test_08_update_execution_not_implemented)

Test Case: test_01_download_rosbag_success TEST_TestScenarioBulkDataDownload_test_01_download_rosbag_success
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_download.test.py#L61 (Test: test_01_download_rosbag_success)

Test Case: test_02_download_wrong_entity_returns_404 TEST_TestScenarioBulkDataDownload_test_02_download_wrong_entity_returns_404
status: verified
verifies: REQ_INTEROP_073

Security check: rosbag belonging to one entity should not be accessible via another entity’s bulk-data endpoint.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_download.test.py#L100 (Test: test_02_download_wrong_entity_returns_404)

Test Case: test_03_verify_complete_rosbag_content TEST_TestScenarioBulkDataDownload_test_03_verify_complete_rosbag_content
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_download.test.py#L121 (Test: test_03_verify_complete_rosbag_content)

Test Case: test_04_rosbag_media_type_is_named_in_the_document TEST_TestScenarioBulkDataDownload_test_04_rosbag_media_type_is_named_in_the_document
status: verified
verifies: REQ_INTEROP_073

Tier 2 for the derivable half of the download’s media-type set. A rosbag type comes from BulkDataHandlers::get_rosbag_mimetype, whose range is finite, so the document must name it rather than fall back on the */* catch-all that exists for client-supplied uploads - passing via the wildcard is treated as a failure here on purpose.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_download.test.py#L154 (Test: test_04_rosbag_media_type_is_named_in_the_document)

Test Case: test_01_upload_small_file TEST_TestScenarioBulkDataUpload_test_01_upload_small_file
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L136 (Test: test_01_upload_small_file)

Test Case: test_02_upload_returns_location_header TEST_TestScenarioBulkDataUpload_test_02_upload_returns_location_header
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L152 (Test: test_02_upload_returns_location_header)

Test Case: test_03_upload_with_description TEST_TestScenarioBulkDataUpload_test_03_upload_with_description
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L170 (Test: test_03_upload_with_description)

Test Case: test_04_upload_with_metadata TEST_TestScenarioBulkDataUpload_test_04_upload_with_metadata
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L182 (Test: test_04_upload_with_metadata)

Test Case: test_05_upload_missing_file_field TEST_TestScenarioBulkDataUpload_test_05_upload_missing_file_field
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L196 (Test: test_05_upload_missing_file_field)

Test Case: test_06_upload_unknown_category TEST_TestScenarioBulkDataUpload_test_06_upload_unknown_category
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L207 (Test: test_06_upload_unknown_category)

Test Case: test_07_upload_rosbags_rejected TEST_TestScenarioBulkDataUpload_test_07_upload_rosbags_rejected
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L217 (Test: test_07_upload_rosbags_rejected)

Test Case: test_08_upload_nonexistent_entity TEST_TestScenarioBulkDataUpload_test_08_upload_nonexistent_entity
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L228 (Test: test_08_upload_nonexistent_entity)

Test Case: test_09_upload_to_areas_405 TEST_TestScenarioBulkDataUpload_test_09_upload_to_areas_405
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L238 (Test: test_09_upload_to_areas_405)

Test Case: test_10_upload_to_functions_405 TEST_TestScenarioBulkDataUpload_test_10_upload_to_functions_405
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L249 (Test: test_10_upload_to_functions_405)

Test Case: test_11_delete_uploaded_item TEST_TestScenarioBulkDataUpload_test_11_delete_uploaded_item
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L261 (Test: test_11_delete_uploaded_item)

Test Case: test_12_delete_nonexistent_item TEST_TestScenarioBulkDataUpload_test_12_delete_nonexistent_item
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L276 (Test: test_12_delete_nonexistent_item)

Test Case: test_13_delete_rosbags_rejected TEST_TestScenarioBulkDataUpload_test_13_delete_rosbags_rejected
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L285 (Test: test_13_delete_rosbags_rejected)

Test Case: test_14_delete_to_areas_405 TEST_TestScenarioBulkDataUpload_test_14_delete_to_areas_405
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L294 (Test: test_14_delete_to_areas_405)

Test Case: test_15_list_categories_includes_configured TEST_TestScenarioBulkDataUpload_test_15_list_categories_includes_configured
status: verified
verifies: REQ_INTEROP_071

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L306 (Test: test_15_list_categories_includes_configured)

Test Case: test_16_list_descriptors_after_upload TEST_TestScenarioBulkDataUpload_test_16_list_descriptors_after_upload
status: verified
verifies: REQ_INTEROP_072

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L319 (Test: test_16_list_descriptors_after_upload)

Test Case: test_17_download_uploaded_file TEST_TestScenarioBulkDataUpload_test_17_download_uploaded_file
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L335 (Test: test_17_download_uploaded_file)

Test Case: test_18_download_nonexistent_returns_404 TEST_TestScenarioBulkDataUpload_test_18_download_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_073

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L359 (Test: test_18_download_nonexistent_returns_404)

Test Case: test_19_list_empty_after_delete TEST_TestScenarioBulkDataUpload_test_19_list_empty_after_delete
status: verified
verifies: REQ_INTEROP_074

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L368 (Test: test_19_list_empty_after_delete)

Test Case: test_21_download_serves_a_media_type_the_document_declares TEST_TestScenarioBulkDataUpload_test_21_download_serves_a_media_type_the_document_declares
status: verified
verifies: REQ_INTEROP_073

Tier 2 for media types: the content keys are only worth something if the bytes arrive under one of them. Both halves of the declared set are exercised deliberately, because they fail in opposite directions - dropping the concrete types leaves the route claiming only */*, and dropping */* leaves it claiming a closed set it does not honour.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L433 (Test: test_21_download_serves_a_media_type_the_document_declares)

Test Case: test_22_multi_range_download_serves_the_declared_206_media_type TEST_TestScenarioBulkDataUpload_test_22_multi_range_download_serves_the_declared_206_media_type
status: verified
verifies: REQ_INTEROP_073

The 206 declares a media type the 200 cannot carry, and it comes from the HTTP layer rewriting Content-Type rather than from the handler, so nothing else in the suite would notice it drifting.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_bulk_data_upload.test.py#L488 (Test: test_22_multi_range_download_serves_the_declared_206_media_type)

status: verified
verifies: REQ_INTEROP_048

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_config_management.test.py#L101 (Test: test_01_list_configurations)

Test Case: test_02_get_configuration_value TEST_TestScenarioConfigManagement_test_02_get_configuration_value
status: verified
verifies: REQ_INTEROP_049

Dynamically finds an app with configurations and tests a single config endpoint.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_config_management.test.py#L109 (Test: test_02_get_configuration_value)

Test Case: test_03_set_and_verify_configuration TEST_TestScenarioConfigManagement_test_03_set_and_verify_configuration
status: verified
verifies: REQ_INTEROP_050

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_config_management.test.py#L141 (Test: test_03_set_and_verify_configuration)

Test Case: test_04_reset_all_configurations TEST_TestScenarioConfigManagement_test_04_reset_all_configurations
status: verified
verifies: REQ_INTEROP_051

Returns 204 on complete success, 207 if some parameters could not be reset.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_config_management.test.py#L198 (Test: test_04_reset_all_configurations)

Test Case: test_05_reset_single_configuration TEST_TestScenarioConfigManagement_test_05_reset_single_configuration
status: verified
verifies: REQ_INTEROP_052

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_config_management.test.py#L219 (Test: test_05_reset_single_configuration)

status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_data_publish_verify.test.py#L63 (Test: test_01_read_sensor_data)

Test Case: test_02_publish_command_to_actuator TEST_TestScenarioDataPublishVerify_test_02_publish_command_to_actuator
status: verified
verifies: REQ_INTEROP_020

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_data_publish_verify.test.py#L87 (Test: test_02_publish_command_to_actuator)

status: verified
verifies: REQ_INTEROP_018

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_data_publish_verify.test.py#L112 (Test: test_03_read_actuator_feedback)

Test Case: test_01_areas_from_manifest TEST_TestScenarioDiscoveryHybrid_test_01_areas_from_manifest
status: verified
verifies: REQ_INTEROP_003

Subareas (e.g. ‘engine’) are filtered from the top-level listing and accessible via GET /areas/{id}/subareas.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L114 (Test: test_01_areas_from_manifest)

Test Case: test_02_area_with_description TEST_TestScenarioDiscoveryHybrid_test_02_area_with_description
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L127 (Test: test_02_area_with_description)

Test Case: test_03_area_subareas_hierarchy TEST_TestScenarioDiscoveryHybrid_test_03_area_subareas_hierarchy
status: verified
verifies: REQ_INTEROP_004

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L137 (Test: test_03_area_subareas_hierarchy)

status: verified
verifies: REQ_INTEROP_004

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L147 (Test: test_04_nested_subareas)

Test Case: test_05_components_from_manifest TEST_TestScenarioDiscoveryHybrid_test_05_components_from_manifest
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L160 (Test: test_05_components_from_manifest)

Test Case: test_06_component_type_preserved TEST_TestScenarioDiscoveryHybrid_test_06_component_type_preserved
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L170 (Test: test_06_component_type_preserved)

Test Case: test_07_component_area_relationship TEST_TestScenarioDiscoveryHybrid_test_07_component_area_relationship
status: verified
verifies: REQ_INTEROP_006

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L178 (Test: test_07_component_area_relationship)

Test Case: test_08_component_subcomponents TEST_TestScenarioDiscoveryHybrid_test_08_component_subcomponents
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L189 (Test: test_08_component_subcomponents)

Test Case: test_09_component_subcomponents_not_found TEST_TestScenarioDiscoveryHybrid_test_09_component_subcomponents_not_found
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L198 (Test: test_09_component_subcomponents_not_found)

Test Case: test_10_component_depends_on_returns_items TEST_TestScenarioDiscoveryHybrid_test_10_component_depends_on_returns_items
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L207 (Test: test_10_component_depends_on_returns_items)

Test Case: test_11_component_depends_on_empty TEST_TestScenarioDiscoveryHybrid_test_11_component_depends_on_empty
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L224 (Test: test_11_component_depends_on_empty)

Test Case: test_12_component_depends_on_not_found TEST_TestScenarioDiscoveryHybrid_test_12_component_depends_on_not_found
status: verified
verifies: REQ_INTEROP_008

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L233 (Test: test_12_component_depends_on_not_found)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L259 (Test: test_14_apps_from_manifest)

Test Case: test_15_app_online_with_runtime_node TEST_TestScenarioDiscoveryHybrid_test_15_app_online_with_runtime_node
status: verified
verifies: REQ_INTEROP_003

Runtime linking happens asynchronously after nodes start, so poll until at least one app is online.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L276 (Test: test_15_app_online_with_runtime_node)

Test Case: test_19_app_depends_on_relationship TEST_TestScenarioDiscoveryHybrid_test_19_app_depends_on_relationship
status: verified
verifies: REQ_INTEROP_009

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L345 (Test: test_19_app_depends_on_relationship)

Test Case: test_20_functions_from_manifest TEST_TestScenarioDiscoveryHybrid_test_20_functions_from_manifest
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L358 (Test: test_20_functions_from_manifest)

Test Case: test_21_function_hosts_relationship TEST_TestScenarioDiscoveryHybrid_test_21_function_hosts_relationship
status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L371 (Test: test_21_function_hosts_relationship)

status: verified
verifies: REQ_INTEROP_011

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_hybrid.test.py#L395 (Test: test_24_function_with_tags)

status: verified
verifies: REQ_INTEROP_003

Sub-entities (areas with parent_area_id) are only accessible via GET /areas/{id}/subareas, not in the top-level listing.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L112 (Test: test_01_list_areas)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L137 (Test: test_02_get_area_details)

status: verified
verifies: REQ_INTEROP_004

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L152 (Test: test_04_area_subareas)

status: verified
verifies: REQ_INTEROP_006

The area’s capabilities array must advertise the same route. Areas were the one entity type whose relationship endpoint was served and named in AreaDetail.components but missing from the capability array, so a client reading only that array could not find it.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L162 (Test: test_05_area_components)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L185 (Test: test_06_list_components)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L198 (Test: test_07_get_component_details)

Test Case: test_09_component_subcomponents TEST_TestScenarioDiscoveryManifest_test_09_component_subcomponents
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L214 (Test: test_09_component_subcomponents)

Test Case: test_10_component_subcomponents_not_found TEST_TestScenarioDiscoveryManifest_test_10_component_subcomponents_not_found
status: verified
verifies: REQ_INTEROP_005

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L223 (Test: test_10_component_subcomponents_not_found)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L252 (Test: test_12_get_app_details)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L283 (Test: test_15_app_data_endpoint)

Test Case: test_17_app_configurations_endpoint TEST_TestScenarioDiscoveryManifest_test_17_app_configurations_endpoint
status: verified
verifies: REQ_INTEROP_003

App is defined in manifest with bound_fqn. Configurations are retrieved from the ROS 2 parameter service on the node, which may not be ready the instant the app is discovered - the endpoint returns 503 until it is. Poll until it responds rather than asserting on a single early GET.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L296 (Test: test_17_app_configurations_endpoint)

status: verified
verifies: REQ_INTEROP_003

In manifest_only mode, data items depend on runtime graph discovery via inherit_runtime_resources. The endpoint always works (200), but items may be empty when runtime linking has not enriched the app with topic information.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L314 (Test: test_18_app_data_item_endpoint)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L338 (Test: test_19_list_functions)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L354 (Test: test_20_get_function_details)

status: verified
verifies: REQ_INTEROP_007

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_discovery_manifest.test.py#L369 (Test: test_22_function_hosts)

Test Case: test_01_fault_response_structure TEST_TestScenarioFaultInspection_test_01_fault_response_structure
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_inspection.test.py#L89 (Test: test_01_fault_response_structure)

Test Case: test_02_fault_status_object_structure TEST_TestScenarioFaultInspection_test_02_fault_status_object_structure
status: verified
verifies: REQ_INTEROP_013

The gateway returns AUTOSAR DEM-style status fields: - aggregatedStatus: “active”, “passive”, or “cleared” - testFailed, confirmedDTC, pendingDTC: “0” or “1”

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_inspection.test.py#L103 (Test: test_02_fault_status_object_structure)

Test Case: test_03_fault_environment_data_structure TEST_TestScenarioFaultInspection_test_03_fault_environment_data_structure
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_inspection.test.py#L123 (Test: test_03_fault_environment_data_structure)

Test Case: test_04_fault_snapshot_freeze_frame TEST_TestScenarioFaultInspection_test_04_fault_snapshot_freeze_frame
status: verified
verifies: REQ_INTEROP_013

Snapshots are captured asynchronously by the fault manager after a fault is confirmed, so we poll until the freeze_frame is present.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_inspection.test.py#L138 (Test: test_04_fault_snapshot_freeze_frame)

Test Case: test_05_fault_snapshot_rosbag_has_bulk_data_uri TEST_TestScenarioFaultInspection_test_05_fault_snapshot_rosbag_has_bulk_data_uri
status: verified
verifies: REQ_INTEROP_013

Rosbag snapshots are flushed asynchronously after fault confirmation, so we poll until the rosbag snapshot is present.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_inspection.test.py#L157 (Test: test_05_fault_snapshot_rosbag_has_bulk_data_uri)

Test Case: test_06_fault_x_medkit_extensions TEST_TestScenarioFaultInspection_test_06_fault_x_medkit_extensions
status: verified
verifies: REQ_INTEROP_013

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_inspection.test.py#L174 (Test: test_06_fault_x_medkit_extensions)

Test Case: test_01_wait_for_faults_to_appear TEST_TestScenarioFaultLifecycle_test_01_wait_for_faults_to_appear
status: verified
verifies: REQ_INTEROP_012

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_lifecycle.test.py#L71 (Test: test_01_wait_for_faults_to_appear)

Test Case: test_02_delete_all_faults_for_component TEST_TestScenarioFaultLifecycle_test_02_delete_all_faults_for_component
status: verified
verifies: REQ_INTEROP_014

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_lifecycle.test.py#L88 (Test: test_02_delete_all_faults_for_component)

Test Case: test_03_delete_all_faults_for_app TEST_TestScenarioFaultLifecycle_test_03_delete_all_faults_for_app
status: verified
verifies: REQ_INTEROP_014

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_lifecycle.test.py#L105 (Test: test_03_delete_all_faults_for_app)

Test Case: test_04_delete_all_faults_nonexistent TEST_TestScenarioFaultLifecycle_test_04_delete_all_faults_nonexistent
status: verified
verifies: REQ_INTEROP_014

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_lifecycle.test.py#L119 (Test: test_04_delete_all_faults_nonexistent)

Test Case: test_05_delete_single_fault TEST_TestScenarioFaultLifecycle_test_05_delete_single_fault
status: verified
verifies: REQ_INTEROP_015

The lidar_sensor may immediately re-report the fault after deletion, so we only verify that DELETE returns 204 (success) or 404 (not found).

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_fault_lifecycle.test.py#L135 (Test: test_05_delete_single_fault)

Test Case: test_01_create_subscription_returns_201_with_correct_schema TEST_TestScenarioSubscriptions_test_01_create_subscription_returns_201_with_correct_schema
status: verified
verifies: REQ_INTEROP_089

Verifies that POST returns 201 with all required fields: id, observed_resource, event_source, protocol, interval.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L159 (Test: test_01_create_subscription_returns_201_with_correct_schema)

Test Case: test_02_list_subscriptions_returns_created_ones TEST_TestScenarioSubscriptions_test_02_list_subscriptions_returns_created_ones
status: verified
verifies: REQ_INTEROP_025

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L182 (Test: test_02_list_subscriptions_returns_created_ones)

Test Case: test_03_get_single_subscription TEST_TestScenarioSubscriptions_test_03_get_single_subscription
status: verified
verifies: REQ_INTEROP_026

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L212 (Test: test_03_get_single_subscription)

Test Case: test_04_update_subscription_interval TEST_TestScenarioSubscriptions_test_04_update_subscription_interval
status: verified
verifies: REQ_INTEROP_027

Dashboard user decides they need higher-frequency updates.

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L231 (Test: test_04_update_subscription_interval)

Test Case: test_05_update_subscription_duration TEST_TestScenarioSubscriptions_test_05_update_subscription_duration
status: verified
verifies: REQ_INTEROP_027

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L252 (Test: test_05_update_subscription_duration)

Test Case: test_06_delete_subscription_returns_204 TEST_TestScenarioSubscriptions_test_06_delete_subscription_returns_204
status: verified
verifies: REQ_INTEROP_028

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L267 (Test: test_06_delete_subscription_returns_204)

Test Case: test_07_empty_list_after_delete TEST_TestScenarioSubscriptions_test_07_empty_list_after_delete
status: verified
verifies: REQ_INTEROP_025

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L287 (Test: test_07_empty_list_after_delete)

Test Case: test_10_sse_stream_returns_correct_headers TEST_TestScenarioSubscriptions_test_10_sse_stream_returns_correct_headers
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L307 (Test: test_10_sse_stream_returns_correct_headers)

Test Case: test_11_sse_stream_delivers_periodic_data TEST_TestScenarioSubscriptions_test_11_sse_stream_delivers_periodic_data
status: verified
verifies: REQ_INTEROP_090

Real use case: dashboard receives temperature readings every 500ms (slow). Each event has a timestamp and a payload with ReadValue format (id + data).

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L326 (Test: test_11_sse_stream_delivers_periodic_data)

Test Case: test_12_sse_stream_closes_on_subscription_delete TEST_TestScenarioSubscriptions_test_12_sse_stream_closes_on_subscription_delete
status: verified

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L378 (Test: test_12_sse_stream_closes_on_subscription_delete)

Test Case: test_20_create_with_invalid_interval_returns_400 TEST_TestScenarioSubscriptions_test_20_create_with_invalid_interval_returns_400
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L427 (Test: test_20_create_with_invalid_interval_returns_400)

Test Case: test_21_create_with_zero_duration_returns_400 TEST_TestScenarioSubscriptions_test_21_create_with_zero_duration_returns_400
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L445 (Test: test_21_create_with_zero_duration_returns_400)

Test Case: test_22_create_with_unsupported_protocol_returns_400 TEST_TestScenarioSubscriptions_test_22_create_with_unsupported_protocol_returns_400
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L462 (Test: test_22_create_with_unsupported_protocol_returns_400)

Test Case: test_23_create_with_invalid_resource_uri_returns_400 TEST_TestScenarioSubscriptions_test_23_create_with_invalid_resource_uri_returns_400
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L480 (Test: test_23_create_with_invalid_resource_uri_returns_400)

Test Case: test_24_get_nonexistent_subscription_returns_404 TEST_TestScenarioSubscriptions_test_24_get_nonexistent_subscription_returns_404
status: verified
verifies: REQ_INTEROP_026

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L497 (Test: test_24_get_nonexistent_subscription_returns_404)

Test Case: test_25_delete_nonexistent_subscription_returns_404 TEST_TestScenarioSubscriptions_test_25_delete_nonexistent_subscription_returns_404
status: verified
verifies: REQ_INTEROP_028

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L509 (Test: test_25_delete_nonexistent_subscription_returns_404)

Test Case: test_26_update_nonexistent_subscription_returns_404 TEST_TestScenarioSubscriptions_test_26_update_nonexistent_subscription_returns_404
status: verified
verifies: REQ_INTEROP_027

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L520 (Test: test_26_update_nonexistent_subscription_returns_404)

Test Case: test_27_create_for_nonexistent_entity_returns_404 TEST_TestScenarioSubscriptions_test_27_create_for_nonexistent_entity_returns_404
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L532 (Test: test_27_create_for_nonexistent_entity_returns_404)

Test Case: test_28_sse_stream_for_nonexistent_subscription_returns_404 TEST_TestScenarioSubscriptions_test_28_sse_stream_for_nonexistent_subscription_returns_404
status: verified
verifies: REQ_INTEROP_090

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L549 (Test: test_28_sse_stream_for_nonexistent_subscription_returns_404)

Test Case: test_30_cyclic_subscriptions_work_on_components TEST_TestScenarioSubscriptions_test_30_cyclic_subscriptions_work_on_components
status: verified

Implementation: src/ros2_medkit_integration_tests/test/scenarios/test_scenario_subscriptions.test.py#L564 (Test: test_30_cyclic_subscriptions_work_on_components)

Test Case: test_01_list_scripts_empty TEST_TestScriptsCRUD_test_01_list_scripts_empty
status: verified
verifies: REQ_INTEROP_041

GET /apps/{app}/scripts returns empty items initially.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L203 (Test: test_01_list_scripts_empty)

Test Case: test_01b_urls_name_the_collection_the_caller_addressed TEST_TestScriptsCRUD_test_01b_urls_name_the_collection_the_caller_addressed
status: verified
verifies: REQ_INTEROP_041

These used to come from “components if the path says so, else apps”. The segment is now read out of the request path instead of chosen, so this pins both reachable collections - a component caller must not start getting /apps/… back from the rewritten derivation. Areas and functions cannot be checked here: the scripts routes are registered for apps and components only (rest_server.cpp), so those paths never route and no URL is built for them. That is why the old guess never actually mislabelled a live response.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L210 (Test: test_01b_urls_name_the_collection_the_caller_addressed)

Test Case: test_01c_trailing_slash_location_still_resolves TEST_TestScriptsCRUD_test_01c_trailing_slash_location_still_resolves
status: verified
verifies: REQ_INTEROP_040

Route regexes are anchored with /?$, so POST …/scripts/ routes just as POST …/scripts does, and nothing normalises the path afterwards. Appending the new id to the raw request path then yields …/scripts//new_id, which no route matches - ([^/]+) cannot match an empty segment - so the header hands the client a dead URI.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L243 (Test: test_01c_trailing_slash_location_still_resolves)

Test Case: test_02_upload_and_list TEST_TestScriptsCRUD_test_02_upload_and_list
status: verified
verifies: REQ_INTEROP_040

Upload a script, verify it appears in the list.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L267 (Test: test_02_upload_and_list)

Test Case: test_03_get_script_metadata TEST_TestScriptsCRUD_test_03_get_script_metadata
status: verified
verifies: REQ_INTEROP_042

GET /apps/{app}/scripts/{id} returns full metadata.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L277 (Test: test_03_get_script_metadata)

Test Case: test_04_get_nonexistent_returns_404 TEST_TestScriptsCRUD_test_04_get_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_042

GET /apps/{app}/scripts/nonexistent returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L288 (Test: test_04_get_nonexistent_returns_404)

Test Case: test_05_delete_script TEST_TestScriptsCRUD_test_05_delete_script
status: verified
verifies: REQ_INTEROP_043

DELETE /apps/{app}/scripts/{id} removes it.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L297 (Test: test_05_delete_script)

Test Case: test_06_delete_nonexistent_returns_404 TEST_TestScriptsCRUD_test_06_delete_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_043

DELETE /apps/{app}/scripts/nonexistent returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L315 (Test: test_06_delete_nonexistent_returns_404)

Test Case: test_07_upload_missing_file_field TEST_TestScriptsCRUD_test_07_upload_missing_file_field
status: verified
verifies: REQ_INTEROP_040

POST without multipart file field returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L324 (Test: test_07_upload_missing_file_field)

Test Case: test_09_upload_with_metadata TEST_TestScriptsCRUD_test_09_upload_with_metadata
status: verified
verifies: REQ_INTEROP_040

Upload with metadata field sets custom name and description.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L343 (Test: test_09_upload_with_metadata)

Test Case: test_01_execute_python_script TEST_TestScriptsExecution_test_01_execute_python_script
status: verified
verifies: REQ_INTEROP_044

Upload Python script, execute, poll until completed.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L407 (Test: test_01_execute_python_script)

Test Case: test_02_execute_shell_script TEST_TestScriptsExecution_test_02_execute_shell_script
status: verified
verifies: REQ_INTEROP_044

Upload shell script, execute, poll until completed.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L430 (Test: test_02_execute_shell_script)

Test Case: test_03_terminate_running_execution TEST_TestScriptsExecution_test_03_terminate_running_execution
status: verified
verifies: REQ_INTEROP_047

Start long-running script, terminate it via control endpoint.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L449 (Test: test_03_terminate_running_execution)

Test Case: test_06_get_nonexistent_execution TEST_TestScriptsExecution_test_06_get_nonexistent_execution
status: verified
verifies: REQ_INTEROP_046

GET nonexistent execution returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L553 (Test: test_06_get_nonexistent_execution)

Test Case: test_07_start_execution_missing_type TEST_TestScriptsExecution_test_07_start_execution_missing_type
status: verified
verifies: REQ_INTEROP_044

POST without execution_type returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L564 (Test: test_07_start_execution_missing_type)

Test Case: test_08_start_execution_invalid_json TEST_TestScriptsExecution_test_08_start_execution_invalid_json
status: verified
verifies: REQ_INTEROP_044

POST with invalid JSON body returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L575 (Test: test_08_start_execution_invalid_json)

Test Case: test_09_execution_has_timestamps TEST_TestScriptsExecution_test_09_execution_has_timestamps
status: verified
verifies: REQ_INTEROP_046

Completed execution has started_at and completed_at timestamps.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L587 (Test: test_09_execution_has_timestamps)

Test Case: test_10_bash_script_execution TEST_TestScriptsExecution_test_10_bash_script_execution
status: verified
verifies: REQ_INTEROP_044

Upload and execute a .bash script.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L608 (Test: test_10_bash_script_execution)

Test Case: test_11_output_content_verified TEST_TestScriptsExecution_test_11_output_content_verified
status: verified
verifies: REQ_INTEROP_046

Verify executed script output is correctly returned in execution response.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L633 (Test: test_11_output_content_verified)

Test Case: test_12_parameters_via_stdin TEST_TestScriptsExecution_test_12_parameters_via_stdin
status: verified
verifies: REQ_INTEROP_044

Parameters sent in execution request are passed to script via stdin.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L665 (Test: test_12_parameters_via_stdin)

Test Case: test_13_failed_script_execution TEST_TestScriptsExecution_test_13_failed_script_execution
status: verified
verifies: REQ_INTEROP_046

Script that exits non-zero produces ‘failed’ status with error info.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L708 (Test: test_13_failed_script_execution)

Test Case: test_14_full_lifecycle TEST_TestScriptsExecution_test_14_full_lifecycle

Complete lifecycle: upload -> list -> get -> execute -> poll -> verify -> delete.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L745 (Test: test_14_full_lifecycle)

Test Case: test_01_list_scripts_returns_501 TEST_TestScriptsNotConfigured_test_01_list_scripts_returns_501
status: verified
verifies: REQ_INTEROP_041

GET /apps/{app}/scripts returns 501 without backend.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L102 (Test: test_01_list_scripts_returns_501)

Test Case: test_02_upload_script_returns_501 TEST_TestScriptsNotConfigured_test_02_upload_script_returns_501
status: verified
verifies: REQ_INTEROP_040

POST /apps/{app}/scripts returns 501 without backend.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L111 (Test: test_02_upload_script_returns_501)

Test Case: test_03_get_script_returns_501 TEST_TestScriptsNotConfigured_test_03_get_script_returns_501
status: verified
verifies: REQ_INTEROP_042

GET /apps/{app}/scripts/{id} returns 501 without backend.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L122 (Test: test_03_get_script_returns_501)

Test Case: test_04_delete_script_returns_501 TEST_TestScriptsNotConfigured_test_04_delete_script_returns_501
status: verified
verifies: REQ_INTEROP_043

DELETE /apps/{app}/scripts/{id} returns 501 without backend.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L130 (Test: test_04_delete_script_returns_501)

Test Case: test_05_start_execution_returns_501 TEST_TestScriptsNotConfigured_test_05_start_execution_returns_501
status: verified
verifies: REQ_INTEROP_044

POST /apps/{app}/scripts/{id}/executions returns 501.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L138 (Test: test_05_start_execution_returns_501)

Test Case: test_06_get_execution_returns_501 TEST_TestScriptsNotConfigured_test_06_get_execution_returns_501
status: verified
verifies: REQ_INTEROP_046

GET /apps/{app}/scripts/{id}/executions/{eid} returns 501.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L148 (Test: test_06_get_execution_returns_501)

Test Case: test_07_control_execution_returns_501 TEST_TestScriptsNotConfigured_test_07_control_execution_returns_501
status: verified
verifies: REQ_INTEROP_047

PUT /apps/{app}/scripts/{id}/executions/{eid} returns 501.

Implementation: src/ros2_medkit_integration_tests/test/features/test_scripts_api.test.py#L157 (Test: test_07_control_execution_returns_501)

Test Case: test_root_endpoint_excludes_legacy_snapshots TEST_TestSnapshotsApi_test_root_endpoint_excludes_legacy_snapshots
status: verified
verifies: REQ_INTEROP_088

Legacy snapshot endpoints were removed in favor of inline snapshots in fault responses and bulk-data endpoints.

Implementation: src/ros2_medkit_integration_tests/test/features/test_snapshots_api.test.py#L49 (Test: test_root_endpoint_excludes_legacy_snapshots)

Test Case: test_standing_fault_snapshot_contains_freeze_frame TEST_TestStandingFaultFreezeFrame_test_standing_fault_snapshot_contains_freeze_frame
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_integration_tests/test/features/test_standing_fault_freeze_frame.test.py#L127 (Test: test_standing_fault_snapshot_contains_freeze_frame)

Test Case: test_returns_restart_count TEST_TestSystemdAppEndpoint_test_returns_restart_count
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L128 (Test: test_returns_restart_count)

Test Case: test_returns_unit_info TEST_TestSystemdAppEndpoint_test_returns_unit_info
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L98 (Test: test_returns_unit_info)

Test Case: test_returns_unit_type TEST_TestSystemdAppEndpoint_test_returns_unit_type
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L116 (Test: test_returns_unit_type)

Test Case: test_returns_watchdog_usec TEST_TestSystemdAppEndpoint_test_returns_watchdog_usec
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L142 (Test: test_returns_watchdog_usec)

Test Case: test_returns_units_aggregation TEST_TestSystemdComponentEndpoint_test_returns_units_aggregation
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L159 (Test: test_returns_units_aggregation)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L190 (Test: test_units_have_active_state)

status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L174 (Test: test_units_include_node_ids)

Test Case: test_nonexistent_app_returns_404 TEST_TestSystemdErrorHandling_test_nonexistent_app_returns_404
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L208 (Test: test_nonexistent_app_returns_404)

Test Case: test_nonexistent_component_returns_404 TEST_TestSystemdErrorHandling_test_nonexistent_component_returns_404
status: verified
verifies: REQ_INTEROP_003

Implementation: src/ros2_medkit_integration_tests/test/docker/introspection/test_systemd_introspection.py#L219 (Test: test_nonexistent_component_returns_404)

Test Case: test_01_create_trigger_returns_201_with_correct_schema TEST_TestTriggersData_test_01_create_trigger_returns_201_with_correct_schema
status: verified
verifies: REQ_INTEROP_029

POST creates trigger with correct schema response.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L153 (Test: test_01_create_trigger_returns_201_with_correct_schema)

Test Case: test_02_list_triggers_returns_created_trigger TEST_TestTriggersData_test_02_list_triggers_returns_created_trigger
status: verified
verifies: REQ_INTEROP_030

GET /triggers returns list with the created trigger.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L177 (Test: test_02_list_triggers_returns_created_trigger)

Test Case: test_03_get_single_trigger TEST_TestTriggersData_test_03_get_single_trigger
status: verified
verifies: REQ_INTEROP_096

GET /triggers/{id} returns the trigger details.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L194 (Test: test_03_get_single_trigger)

Test Case: test_04_update_trigger_lifetime TEST_TestTriggersData_test_04_update_trigger_lifetime
status: verified
verifies: REQ_INTEROP_031

PUT /triggers/{id} updates the lifetime.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L211 (Test: test_04_update_trigger_lifetime)

Test Case: test_05_delete_trigger_returns_204 TEST_TestTriggersData_test_05_delete_trigger_returns_204
status: verified
verifies: REQ_INTEROP_032

DELETE /triggers/{id} returns 204 and removes the trigger.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L225 (Test: test_05_delete_trigger_returns_204)

Test Case: test_10_sse_stream_returns_correct_headers TEST_TestTriggersData_test_10_sse_stream_returns_correct_headers
status: verified
verifies: REQ_INTEROP_097

The SSE events endpoint returns text/event-stream content type.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L260 (Test: test_10_sse_stream_returns_correct_headers)

Test Case: test_11_sse_stream_delivers_data_events TEST_TestTriggersData_test_11_sse_stream_delivers_data_events
status: verified
verifies: REQ_INTEROP_097

The temp_sensor publishes at ~1Hz (Float64), so OnChange triggers should fire on each new message.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L280 (Test: test_11_sse_stream_delivers_data_events)

Test Case: test_12_sse_stream_closes_on_trigger_delete TEST_TestTriggersData_test_12_sse_stream_closes_on_trigger_delete
status: verified

When a trigger is deleted, the SSE stream closes gracefully.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L330 (Test: test_12_sse_stream_closes_on_trigger_delete)

Test Case: test_27_events_for_nonexistent_trigger_returns_404 TEST_TestTriggersData_test_27_events_for_nonexistent_trigger_returns_404
status: verified
verifies: REQ_INTEROP_097

GET /events for a non-existent trigger returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L561 (Test: test_27_events_for_nonexistent_trigger_returns_404)

Test Case: test_08_spec_declares_the_gated_status TEST_TestTriggersDisabled_test_08_spec_declares_the_gated_status
status: verified
verifies: REQ_INTEROP_002

Every documented trigger operation declares the 501 the gate returns.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_data.test.py#L734 (Test: test_08_spec_declares_the_gated_status)

Test Case: test_01_create_fault_trigger_returns_201 TEST_TestTriggersFaults_test_01_create_fault_trigger_returns_201
status: verified
verifies: REQ_INTEROP_029

POST creates a trigger on faults collection with correct schema.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L91 (Test: test_01_create_fault_trigger_returns_201)

Test Case: test_02_list_fault_triggers TEST_TestTriggersFaults_test_02_list_fault_triggers
status: verified
verifies: REQ_INTEROP_030

GET /triggers lists fault triggers for the entity.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L109 (Test: test_02_list_fault_triggers)

Test Case: test_03_get_fault_trigger TEST_TestTriggersFaults_test_03_get_fault_trigger
status: verified
verifies: REQ_INTEROP_096

GET /triggers/{id} returns fault trigger details.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L125 (Test: test_03_get_fault_trigger)

Test Case: test_04_update_fault_trigger_lifetime TEST_TestTriggersFaults_test_04_update_fault_trigger_lifetime
status: verified
verifies: REQ_INTEROP_031

PUT /triggers/{id} updates fault trigger lifetime.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L140 (Test: test_04_update_fault_trigger_lifetime)

Test Case: test_05_delete_fault_trigger TEST_TestTriggersFaults_test_05_delete_fault_trigger
status: verified
verifies: REQ_INTEROP_032

DELETE /triggers/{id} removes the fault trigger.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L154 (Test: test_05_delete_fault_trigger)

Test Case: test_10_sse_endpoint_connects_and_streams TEST_TestTriggersFaults_test_10_sse_endpoint_connects_and_streams
status: verified
verifies: REQ_INTEROP_097

Verifies the SSE transport works for fault triggers - the connection is established and the server sends keepalive comments. Actual fault events depend on the fault subscriber’s entity_id matching the trigger’s entity_id, which requires correct reporting_source mapping.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L175 (Test: test_10_sse_endpoint_connects_and_streams)

Test Case: test_11_sse_fault_event_has_correct_headers TEST_TestTriggersFaults_test_11_sse_fault_event_has_correct_headers
status: verified
verifies: REQ_INTEROP_097

SSE events endpoint for faults returns correct headers.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_faults.test.py#L217 (Test: test_11_sse_fault_event_has_correct_headers)

Test Case: test_01_component_trigger_created_successfully TEST_TestTriggersHierarchy_test_01_component_trigger_created_successfully
status: verified
verifies: REQ_INTEROP_029

Create trigger on component that hosts apps.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_hierarchy.test.py#L113 (Test: test_01_component_trigger_created_successfully)

Test Case: test_05_list_triggers_on_area TEST_TestTriggersHierarchy_test_05_list_triggers_on_area
status: verified
verifies: REQ_INTEROP_030

GET /areas/{id}/triggers returns triggers for the area.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_hierarchy.test.py#L268 (Test: test_05_list_triggers_on_area)

Test Case: test_06_delete_trigger_on_function TEST_TestTriggersHierarchy_test_06_delete_trigger_on_function
status: verified
verifies: REQ_INTEROP_032

DELETE removes trigger from function entity.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_hierarchy.test.py#L299 (Test: test_06_delete_trigger_on_function)

Test Case: test_01_create_logs_trigger TEST_TestTriggersLogs_test_01_create_logs_trigger
status: verified
verifies: REQ_INTEROP_029

POST creates a trigger on logs collection.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L86 (Test: test_01_create_logs_trigger)

Test Case: test_02_list_logs_triggers TEST_TestTriggersLogs_test_02_list_logs_triggers
status: verified
verifies: REQ_INTEROP_030

GET /triggers lists log triggers for the entity.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L110 (Test: test_02_list_logs_triggers)

Test Case: test_03_get_logs_trigger TEST_TestTriggersLogs_test_03_get_logs_trigger
status: verified
verifies: REQ_INTEROP_096

GET /triggers/{id} returns log trigger details.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L126 (Test: test_03_get_logs_trigger)

Test Case: test_04_update_logs_trigger_lifetime TEST_TestTriggersLogs_test_04_update_logs_trigger_lifetime
status: verified
verifies: REQ_INTEROP_031

PUT /triggers/{id} updates log trigger lifetime.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L145 (Test: test_04_update_logs_trigger_lifetime)

Test Case: test_05_delete_logs_trigger TEST_TestTriggersLogs_test_05_delete_logs_trigger
status: verified
verifies: REQ_INTEROP_032

DELETE /triggers/{id} removes the log trigger.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L161 (Test: test_05_delete_logs_trigger)

Test Case: test_10_sse_endpoint_connects_for_log_trigger TEST_TestTriggersLogs_test_10_sse_endpoint_connects_for_log_trigger
status: verified
verifies: REQ_INTEROP_097

Verifies the SSE transport works for log-collection triggers. The LogManager currently only notifies ResourceChangeNotifier via the programmatic add_log_entry() path (used by trigger log_settings), not from /rosout ingestion. This test validates the SSE plumbing by verifying the connection is accepted and the stream is active.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L195 (Test: test_10_sse_endpoint_connects_for_log_trigger)

Test Case: test_11_sse_log_event_headers TEST_TestTriggersLogs_test_11_sse_log_event_headers
status: verified
verifies: REQ_INTEROP_097

SSE events endpoint for logs returns correct headers.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_logs.test.py#L234 (Test: test_11_sse_log_event_headers)

Test Case: test_01_create_persistent_trigger TEST_TestTriggersPersistent_test_01_create_persistent_trigger
status: verified
verifies: REQ_INTEROP_029

Creates the trigger that will later be verified on the secondary (restarted) gateway instance.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_persistent.test.py#L213 (Test: test_01_create_persistent_trigger)

Test Case: test_02_trigger_listed_on_primary TEST_TestTriggersPersistent_test_02_trigger_listed_on_primary
status: verified
verifies: REQ_INTEROP_030

Persistent trigger appears in the listing on the primary gateway.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_persistent.test.py#L254 (Test: test_02_trigger_listed_on_primary)

Test Case: test_04_restored_trigger_fields_match TEST_TestTriggersPersistent_test_04_restored_trigger_fields_match
status: verified
verifies: REQ_INTEROP_096

Fields of the restored trigger match what was originally created.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_persistent.test.py#L321 (Test: test_04_restored_trigger_fields_match)

Test Case: test_06_delete_via_secondary_removes_from_store TEST_TestTriggersPersistent_test_06_delete_via_secondary_removes_from_store
status: verified
verifies: REQ_INTEROP_032

After deletion, the trigger must also be absent when listed on the primary gateway (they share the same SQLite file).

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_persistent.test.py#L386 (Test: test_06_delete_via_secondary_removes_from_store)

status: verified
verifies: REQ_INTEROP_029

The faults trigger carries no subscription, so it only exercises the record. The data trigger needs a live topic subscription behind it, which is what the later window puts under strain.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_restore_before_discovery.test.py#L329 (Test: test_01_create_persistent_triggers)

Test Case: test_02_restored_trigger_survives_until_entity_is_discovered TEST_TestTriggersRestoreBeforeDiscovery_test_02_restored_trigger_survives_until_entity_is_discovered
status: verified
verifies: REQ_INTEROP_096

The restarted gateway sweeps for orphaned triggers throughout a window in which its entity does not exist on its domain at all. The trigger must outlive that window: nothing has disappeared from this gateway’s discovery, so nothing is orphaned.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_restore_before_discovery.test.py#L347 (Test: test_02_restored_trigger_survives_until_entity_is_discovered)

Test Case: test_03_restored_data_trigger_fires_after_late_discovery TEST_TestTriggersRestoreBeforeDiscovery_test_03_restored_data_trigger_fires_after_late_discovery
status: verified
verifies: REQ_INTEROP_097

Its entity turned up later than the budget a single subscription attempt gets, so this is the case in which a trigger that keeps only its record goes quiet. Being listed is not evidence here - the trigger has to put a real sample on its event stream.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_restore_before_discovery.test.py#L404 (Test: test_03_restored_data_trigger_fires_after_late_discovery)

Test Case: test_01_create_updates_trigger TEST_TestTriggersUpdates_test_01_create_updates_trigger
status: verified
verifies: REQ_INTEROP_029

POST creates a trigger on updates collection.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L89 (Test: test_01_create_updates_trigger)

Test Case: test_02_list_updates_triggers TEST_TestTriggersUpdates_test_02_list_updates_triggers
status: verified
verifies: REQ_INTEROP_030

GET /triggers lists updates triggers for the entity.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L107 (Test: test_02_list_updates_triggers)

Test Case: test_03_get_updates_trigger TEST_TestTriggersUpdates_test_03_get_updates_trigger
status: verified
verifies: REQ_INTEROP_096

GET /triggers/{id} returns updates trigger details.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L126 (Test: test_03_get_updates_trigger)

Test Case: test_04_update_updates_trigger_lifetime TEST_TestTriggersUpdates_test_04_update_updates_trigger_lifetime
status: verified
verifies: REQ_INTEROP_031

PUT /triggers/{id} updates the trigger lifetime.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L148 (Test: test_04_update_updates_trigger_lifetime)

Test Case: test_05_delete_updates_trigger TEST_TestTriggersUpdates_test_05_delete_updates_trigger
status: verified
verifies: REQ_INTEROP_032

DELETE /triggers/{id} removes the updates trigger.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L165 (Test: test_05_delete_updates_trigger)

Test Case: test_10_events_endpoint_returns_sse_headers TEST_TestTriggersUpdates_test_10_events_endpoint_returns_sse_headers
status: verified
verifies: REQ_INTEROP_097

SSE events endpoint returns correct content-type headers.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L199 (Test: test_10_events_endpoint_returns_sse_headers)

Test Case: test_11_events_for_nonexistent_trigger_returns_404 TEST_TestTriggersUpdates_test_11_events_for_nonexistent_trigger_returns_404
status: verified
verifies: REQ_INTEROP_097

GET /events for a nonexistent trigger returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_triggers_updates.test.py#L218 (Test: test_11_events_for_nonexistent_trigger_returns_404)

status: verified
verifies: REQ_INTEROP_003

A bad value is a warning, so hybrid mode survives it.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L481 (Test: test_manifest_still_loads)

Test Case: test_policy_falls_back_to_warn_so_the_orphan_is_visible TEST_TestUnknownPolicyValueNonStrict_test_policy_falls_back_to_warn_so_the_orphan_is_visible
status: verified
verifies: REQ_INTEROP_003

Fallback is warn, which keeps unmanifested nodes in the tree.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L487 (Test: test_policy_falls_back_to_warn_so_the_orphan_is_visible)

Test Case: test_manifest_entities_are_served TEST_TestUnknownPolicyValueStrict_test_manifest_entities_are_served
status: verified
verifies: REQ_INTEROP_003

The manifest loaded, so its entities are in the tree.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L527 (Test: test_manifest_entities_are_served)

Test Case: test_manifest_still_loads_and_discovery_stays_hybrid TEST_TestUnknownPolicyValueStrict_test_manifest_still_loads_and_discovery_stays_hybrid
status: verified
verifies: REQ_INTEROP_003

The advisory notice does not fail the load, even under strict.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L515 (Test: test_manifest_still_loads_and_discovery_stays_hybrid)

Test Case: test_the_documented_fallback_still_applies TEST_TestUnknownPolicyValueStrict_test_the_documented_fallback_still_applies
status: verified
verifies: REQ_INTEROP_003

Advisory does not mean ignored: the value still falls back to warn.

Implementation: src/ros2_medkit_integration_tests/test/features/test_manifest_config_key.test.py#L535 (Test: test_the_documented_fallback_still_applies)

Test Case: test_01_automated_completes TEST_TestUpdatesAutomated_test_01_automated_completes
status: verified
verifies: REQ_INTEROP_093

Automated update runs prepare + execute and completes.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L491 (Test: test_01_automated_completes)

Test Case: test_02_automated_on_non_automated_returns_400 TEST_TestUpdatesAutomated_test_02_automated_on_non_automated_returns_400
status: verified
verifies: REQ_INTEROP_093

Automated on non-automated package returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L507 (Test: test_02_automated_on_non_automated_returns_400)

Test Case: test_01_list_updates_empty TEST_TestUpdatesCRUD_test_01_list_updates_empty
status: verified
verifies: REQ_INTEROP_082

GET /updates returns empty list initially.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L250 (Test: test_01_list_updates_empty)

Test Case: test_02_register_update TEST_TestUpdatesCRUD_test_02_register_update
status: verified
verifies: REQ_INTEROP_083

POST /updates registers a new package.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L257 (Test: test_02_register_update)

Test Case: test_03_list_after_register TEST_TestUpdatesCRUD_test_03_list_after_register
status: verified
verifies: REQ_INTEROP_082

GET /updates includes registered package.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L263 (Test: test_03_list_after_register)

Test Case: test_04_get_update_metadata TEST_TestUpdatesCRUD_test_04_get_update_metadata
status: verified
verifies: REQ_INTEROP_085

GET /updates/{id} returns full metadata.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L270 (Test: test_04_get_update_metadata)

Test Case: test_05_get_nonexistent_returns_404 TEST_TestUpdatesCRUD_test_05_get_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_085

GET /updates/{id} returns 404 for unknown package.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L296 (Test: test_05_get_nonexistent_returns_404)

Test Case: test_06_delete_update TEST_TestUpdatesCRUD_test_06_delete_update
status: verified
verifies: REQ_INTEROP_084

DELETE /updates/{id} removes the package.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L304 (Test: test_06_delete_update)

Test Case: test_07_delete_nonexistent_returns_404 TEST_TestUpdatesCRUD_test_07_delete_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_084

DELETE /updates/{id} returns 404 for unknown package.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L320 (Test: test_07_delete_nonexistent_returns_404)

Test Case: test_08_register_duplicate_returns_400 TEST_TestUpdatesCRUD_test_08_register_duplicate_returns_400
status: verified
verifies: REQ_INTEROP_083

POST /updates returns 400 when ID already exists.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L328 (Test: test_08_register_duplicate_returns_400)

Test Case: test_09_list_with_origin_filter TEST_TestUpdatesCRUD_test_09_list_with_origin_filter
status: verified
verifies: REQ_INTEROP_082

GET /updates?origin=remote filters by origin.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L344 (Test: test_09_list_with_origin_filter)

Test Case: test_10_list_with_target_version_filter TEST_TestUpdatesCRUD_test_10_list_with_target_version_filter
status: verified
verifies: REQ_INTEROP_082

GET /updates?target-version=X filters by target version.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L358 (Test: test_10_list_with_target_version_filter)

Test Case: test_01_delete_during_prepare_returns_409 TEST_TestUpdatesErrorCases_test_01_delete_during_prepare_returns_409
status: verified
verifies: REQ_INTEROP_084

Cannot delete a package while prepare is in progress.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L523 (Test: test_01_delete_during_prepare_returns_409)

Test Case: test_02_prepare_nonexistent_returns_404 TEST_TestUpdatesErrorCases_test_02_prepare_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_091

Cannot prepare a package that doesn’t exist.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L539 (Test: test_02_prepare_nonexistent_returns_404)

Test Case: test_03_execute_nonexistent_returns_404 TEST_TestUpdatesErrorCases_test_03_execute_nonexistent_returns_404
status: verified
verifies: REQ_INTEROP_092

Cannot execute a package that doesn’t exist.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L550 (Test: test_03_execute_nonexistent_returns_404)

Test Case: test_04_register_missing_required_fields TEST_TestUpdatesErrorCases_test_04_register_missing_required_fields
status: verified
verifies: REQ_INTEROP_083

POST /updates with missing required fields returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L561 (Test: test_04_register_missing_required_fields)

Test Case: test_05_register_malformed_json TEST_TestUpdatesErrorCases_test_05_register_malformed_json
status: verified
verifies: REQ_INTEROP_083

POST /updates with broken JSON returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L574 (Test: test_05_register_malformed_json)

Test Case: test_01_list_updates_returns_501 TEST_TestUpdatesNoPlugin_test_01_list_updates_returns_501
status: verified
verifies: REQ_INTEROP_082

GET /updates returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L135 (Test: test_01_list_updates_returns_501)

Test Case: test_02_get_update_returns_501 TEST_TestUpdatesNoPlugin_test_02_get_update_returns_501
status: verified
verifies: REQ_INTEROP_085

GET /updates/{id} returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L142 (Test: test_02_get_update_returns_501)

Test Case: test_03_register_update_returns_501 TEST_TestUpdatesNoPlugin_test_03_register_update_returns_501
status: verified
verifies: REQ_INTEROP_083

POST /updates returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L149 (Test: test_03_register_update_returns_501)

Test Case: test_04_prepare_returns_501 TEST_TestUpdatesNoPlugin_test_04_prepare_returns_501
status: verified
verifies: REQ_INTEROP_091

PUT /updates/{id}/prepare returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L165 (Test: test_04_prepare_returns_501)

Test Case: test_05_execute_returns_501 TEST_TestUpdatesNoPlugin_test_05_execute_returns_501
status: verified
verifies: REQ_INTEROP_092

PUT /updates/{id}/execute returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L174 (Test: test_05_execute_returns_501)

Test Case: test_06_automated_returns_501 TEST_TestUpdatesNoPlugin_test_06_automated_returns_501
status: verified
verifies: REQ_INTEROP_093

PUT /updates/{id}/automated returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L183 (Test: test_06_automated_returns_501)

Test Case: test_07_status_returns_501 TEST_TestUpdatesNoPlugin_test_07_status_returns_501
status: verified
verifies: REQ_INTEROP_094

GET /updates/{id}/status returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L192 (Test: test_07_status_returns_501)

Test Case: test_08_delete_returns_501 TEST_TestUpdatesNoPlugin_test_08_delete_returns_501
status: verified
verifies: REQ_INTEROP_084

DELETE /updates/{id} returns 501 when no plugin loaded.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L201 (Test: test_08_delete_returns_501)

Test Case: test_09_malformed_json_returns_400_not_501 TEST_TestUpdatesNoPlugin_test_09_malformed_json_returns_400_not_501
status: verified
verifies: REQ_INTEROP_083

The gate runs inside the typed wrapper, after body parsing, so a broken payload is still reported as the client’s own error. Moving the guard ahead of the parse would answer 501 here and hide the real problem.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L208 (Test: test_09_malformed_json_returns_400_not_501)

Test Case: test_disabled_feature_returns_501_and_declares_it TEST_TestUpdatesNoPlugin_test_disabled_feature_returns_501_and_declares_it
status: verified
verifies: REQ_INTEROP_002

The eight tests above prove the gateway answers 501 with the feature off. This one proves the generated document says so, which is what a generated client needs to handle the response instead of treating it as an undeclared surprise.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L225 (Test: test_disabled_feature_returns_501_and_declares_it)

Test Case: test_00_status_pending_right_after_register TEST_TestUpdatesPrepareExecute_test_00_status_pending_right_after_register
status: verified
verifies: REQ_INTEROP_094

GET /status returns 200 pending immediately after POST /updates.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L378 (Test: test_00_status_pending_right_after_register)

Test Case: test_01_prepare_returns_202 TEST_TestUpdatesPrepareExecute_test_01_prepare_returns_202
status: verified
verifies: REQ_INTEROP_091

PUT /updates/{id}/prepare returns 202 Accepted.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L392 (Test: test_01_prepare_returns_202)

Test Case: test_02_prepare_completes TEST_TestUpdatesPrepareExecute_test_02_prepare_completes
status: verified
verifies: REQ_INTEROP_091

Prepare workflow completes successfully with status polling.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L403 (Test: test_02_prepare_completes)

Test Case: test_03_execute_after_prepare TEST_TestUpdatesPrepareExecute_test_03_execute_after_prepare
status: verified
verifies: REQ_INTEROP_092

Execute succeeds after prepare completes.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L413 (Test: test_03_execute_after_prepare)

Test Case: test_04_execute_without_prepare_returns_400 TEST_TestUpdatesPrepareExecute_test_04_execute_without_prepare_returns_400
status: verified
verifies: REQ_INTEROP_092

Execute before prepare returns 400.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L431 (Test: test_04_execute_without_prepare_returns_400)

Test Case: test_05_status_shows_progress TEST_TestUpdatesPrepareExecute_test_05_status_shows_progress
status: verified
verifies: REQ_INTEROP_094

Status endpoint shows progress during prepare.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L440 (Test: test_05_status_shows_progress)

Test Case: test_06_status_not_found_for_unknown TEST_TestUpdatesPrepareExecute_test_06_status_not_found_for_unknown
status: verified
verifies: REQ_INTEROP_094

GET /status for unknown package returns 404.

Implementation: src/ros2_medkit_integration_tests/test/features/test_updates.test.py#L476 (Test: test_06_status_not_found_for_unknown)

Test Case: TokenTypeToString TEST_TokenTypeTest_TokenTypeToString
status: verified
verifies: REQ_INTEROP_087

Implementation: src/ros2_medkit_gateway/test/test_auth_manager.cpp#L198 (Test: TokenTypeToString)

Test Case: DefaultTopicsUsedAsFallback TEST_TopicResolutionTest_DefaultTopicsUsedAsFallback
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L140 (Test: DefaultTopicsUsedAsFallback)

Test Case: FaultSpecificHasHighestPriority TEST_TopicResolutionTest_FaultSpecificHasHighestPriority
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L110 (Test: FaultSpecificHasHighestPriority)

Test Case: PatternMatchUsedWhenNoFaultSpecific TEST_TopicResolutionTest_PatternMatchUsedWhenNoFaultSpecific
status: verified
verifies: REQ_INTEROP_088

Implementation: src/ros2_medkit_fault_manager/test/test_snapshot_capture.cpp#L126 (Test: PatternMatchUsedWhenNoFaultSpecific)

Test Case: RegisterAndLookup TEST_TransportRegistryTest_RegisterAndLookup
status: verified
verifies: REQ_INTEROP_089

Implementation: src/ros2_medkit_gateway/test/test_transport_registry.cpp#L56 (Test: RegisterAndLookup)

Test Case: Create_InvalidConditionType TEST_TriggerManagerTest_Create_InvalidConditionType
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L99 (Test: Create_InvalidConditionType)

Test Case: Create_InvalidParams TEST_TriggerManagerTest_Create_InvalidParams
status: verified
verifies: REQ_INTEROP_029

EnterRange requires lower_bound <= upper_bound

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L108 (Test: Create_InvalidParams)

Test Case: Create_MaxTriggersExceeded TEST_TriggerManagerTest_Create_MaxTriggersExceeded
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L119 (Test: Create_MaxTriggersExceeded)

Test Case: Create_ValidOnChangeTrigger TEST_TriggerManagerTest_Create_ValidOnChangeTrigger
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L87 (Test: Create_ValidOnChangeTrigger)

Test Case: EventEnvelopeFormat TEST_TriggerManagerTest_EventEnvelopeFormat
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L468 (Test: EventEnvelopeFormat)

Test Case: Get_Existing TEST_TriggerManagerTest_Get_Existing
status: verified
verifies: REQ_INTEROP_096

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L131 (Test: Get_Existing)

Test Case: Hierarchy_AreaToApp TEST_TriggerManagerTest_Hierarchy_AreaToApp
status: verified
verifies: REQ_INTEROP_029

Set up hierarchy: area “navigation” contains apps

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L393 (Test: Hierarchy_AreaToApp)

Test Case: Hierarchy_ComponentToApp TEST_TriggerManagerTest_Hierarchy_ComponentToApp
status: verified
verifies: REQ_INTEROP_029

Set up hierarchy: component “chassis” contains app “sensor”

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L367 (Test: Hierarchy_ComponentToApp)

Test Case: JsonPointer_ExtractsSubElement TEST_TriggerManagerTest_JsonPointer_ExtractsSubElement
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L576 (Test: JsonPointer_ExtractsSubElement)

Test Case: LifetimeExpiry TEST_TriggerManagerTest_LifetimeExpiry
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L339 (Test: LifetimeExpiry)

Test Case: List_ReturnsTriggersForEntity TEST_TriggerManagerTest_List_ReturnsTriggersForEntity
status: verified
verifies: REQ_INTEROP_030

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L147 (Test: List_ReturnsTriggersForEntity)

Test Case: Multishot_NotifyTwice TEST_TriggerManagerTest_Multishot_NotifyTwice
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L314 (Test: Multishot_NotifyTwice)

Test Case: OnRemovedCallback TEST_TriggerManagerTest_OnRemovedCallback
status: verified
verifies: REQ_INTEROP_032

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L448 (Test: OnRemovedCallback)

Test Case: Remove_ExistingTrigger TEST_TriggerManagerTest_Remove_ExistingTrigger
status: verified
verifies: REQ_INTEROP_032

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L202 (Test: Remove_ExistingTrigger)

Test Case: SingleShot_NotifyMatchingChange TEST_TriggerManagerTest_SingleShot_NotifyMatchingChange
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L219 (Test: SingleShot_NotifyMatchingChange)

Test Case: SingleShot_RemovedAfterFiring TEST_TriggerManagerTest_SingleShot_RemovedAfterFiring
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L252 (Test: SingleShot_RemovedAfterFiring)

Test Case: Update_ChangeLifetime TEST_TriggerManagerTest_Update_ChangeLifetime
status: verified
verifies: REQ_INTEROP_031

Implementation: src/ros2_medkit_gateway/test/test_trigger_manager.cpp#L163 (Test: Update_ChangeLifetime)

Test Case: ClientLimitEnforced TEST_TriggerSSETrackerTest_ClientLimitEnforced
status: verified
verifies: REQ_INTEROP_097

Implementation: src/ros2_medkit_gateway/test/test_trigger_handlers.cpp#L121 (Test: ClientLimitEnforced)

Test Case: FilePersistence TEST_TriggerStore_FilePersistence
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_store.cpp#L366 (Test: FilePersistence)

Test Case: SaveAndLoadRoundTrip TEST_TriggerStore_SaveAndLoadRoundTrip
status: verified
verifies: REQ_INTEROP_029

Implementation: src/ros2_medkit_gateway/test/test_trigger_store.cpp#L70 (Test: SaveAndLoadRoundTrip)

Test Case: VendorExtensionCollection_Accepted TEST_TriggerValidationTest_VendorExtensionCollection_Accepted
status: verified
verifies: REQ_INTEROP_029

x-* vendor extension collections must pass parse_resource_uri and the collection guard. Verify parse_resource_uri accepts x-* collections (the URI parse step).

Implementation: src/ros2_medkit_gateway/test/test_trigger_handlers.cpp#L150 (Test: VendorExtensionCollection_Accepted)

Test Case: ExecuteExceptionSetsFailedStatus TEST_UpdateManagerFailureTest_ExecuteExceptionSetsFailedStatus
status: verified
verifies: REQ_INTEROP_092

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L584 (Test: ExecuteExceptionSetsFailedStatus)

Test Case: ExecuteFailureSetsFailedStatus TEST_UpdateManagerFailureTest_ExecuteFailureSetsFailedStatus
status: verified
verifies: REQ_INTEROP_092

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L551 (Test: ExecuteFailureSetsFailedStatus)

Test Case: PrepareExceptionSetsFailedStatus TEST_UpdateManagerFailureTest_PrepareExceptionSetsFailedStatus
status: verified
verifies: REQ_INTEROP_091

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L506 (Test: PrepareExceptionSetsFailedStatus)

Test Case: PrepareFailureSetsFailedStatus TEST_UpdateManagerFailureTest_PrepareFailureSetsFailedStatus
status: verified
verifies: REQ_INTEROP_091

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L417 (Test: PrepareFailureSetsFailedStatus)

Test Case: AutomatedCompletes TEST_UpdateManagerTest_AutomatedCompletes
status: verified
verifies: REQ_INTEROP_093

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L261 (Test: AutomatedCompletes)

Test Case: AutomatedRejectsNonAutomated TEST_UpdateManagerTest_AutomatedRejectsNonAutomated
status: verified
verifies: REQ_INTEROP_093

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L286 (Test: AutomatedRejectsNonAutomated)

Test Case: ConcurrentPrepareOnSamePackageRejected TEST_UpdateManagerTest_ConcurrentPrepareOnSamePackageRejected
status: verified
verifies: REQ_INTEROP_091

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L342 (Test: ConcurrentPrepareOnSamePackageRejected)

Test Case: DeleteDuringOperationFails TEST_UpdateManagerTest_DeleteDuringOperationFails
status: verified
verifies: REQ_INTEROP_084

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L296 (Test: DeleteDuringOperationFails)

Test Case: DeleteUpdate TEST_UpdateManagerTest_DeleteUpdate
status: verified
verifies: REQ_INTEROP_084

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L169 (Test: DeleteUpdate)

Test Case: DuplicateRegistration TEST_UpdateManagerTest_DuplicateRegistration
status: verified
verifies: REQ_INTEROP_083

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L331 (Test: DuplicateRegistration)

Test Case: ExecuteAfterPrepare TEST_UpdateManagerTest_ExecuteAfterPrepare
status: verified
verifies: REQ_INTEROP_092

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L217 (Test: ExecuteAfterPrepare)

Test Case: ExecuteRequiresPrepare TEST_UpdateManagerTest_ExecuteRequiresPrepare
status: verified
verifies: REQ_INTEROP_092

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L207 (Test: ExecuteRequiresPrepare)

Test Case: GetUpdate TEST_UpdateManagerTest_GetUpdate
status: verified
verifies: REQ_INTEROP_085

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L148 (Test: GetUpdate)

Test Case: GetUpdateNotFound TEST_UpdateManagerTest_GetUpdateNotFound
status: verified
verifies: REQ_INTEROP_085

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L162 (Test: GetUpdateNotFound)

Test Case: HasBackend TEST_UpdateManagerTest_HasBackend
status: verified
verifies: REQ_INTEROP_082

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L123 (Test: HasBackend)

Test Case: NoBackendMode TEST_UpdateManagerTest_NoBackendMode
status: verified
verifies: REQ_INTEROP_082

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L128 (Test: NoBackendMode)

Test Case: PrepareAndPollStatus TEST_UpdateManagerTest_PrepareAndPollStatus
status: verified
verifies: REQ_INTEROP_091

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L181 (Test: PrepareAndPollStatus)

Test Case: RegisterAndList TEST_UpdateManagerTest_RegisterAndList
status: verified
verifies: REQ_INTEROP_082

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L136 (Test: RegisterAndList)

Test Case: StatusNotFoundForUnknown TEST_UpdateManagerTest_StatusNotFoundForUnknown
status: verified
verifies: REQ_INTEROP_094

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L308 (Test: StatusNotFoundForUnknown)

Test Case: StatusPendingRightAfterRegister TEST_UpdateManagerTest_StatusPendingRightAfterRegister
status: verified
verifies: REQ_INTEROP_094

Registering an update must immediately yield a Pending status so the UpdatesDashboard (which gates action buttons on a non-null status response) can render Prepare / Execute / Delete without waiting for a separate prepare call.

Implementation: src/ros2_medkit_gateway/test/test_update_manager.cpp#L315 (Test: StatusPendingRightAfterRegister)

Test Case: LoadValidFile TEST_YamlLoadTest_LoadValidFile
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L173 (Test: LoadValidFile)

Test Case: MalformedYamlReturnsEmpty TEST_YamlLoadTest_MalformedYamlReturnsEmpty
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L210 (Test: MalformedYamlReturnsEmpty)

Test Case: MissingFileReturnsEmpty TEST_YamlLoadTest_MissingFileReturnsEmpty
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L204 (Test: MissingFileReturnsEmpty)

Test Case: PositiveConfirmationThresholdAutoNegated TEST_YamlLoadTest_PositiveConfirmationThresholdAutoNegated
status: verified
verifies: REQ_INTEROP_095

Implementation: src/ros2_medkit_fault_manager/test/test_entity_thresholds.cpp#L222 (Test: PositiveConfirmationThresholdAutoNegated)

ID

Title

Status

Verifies

TEST_AggregationClassification_hierarchical_parent_drops_routing_across_multiple_peers

hierarchical_parent_drops_routing_across_multiple_peers

verified

REQ_INTEROP_003

TEST_AggregationClassification_hierarchical_parent_drops_routing_when_local_subcomponents_exist

hierarchical_parent_drops_routing_when_local_subcomponents_exist

verified

REQ_INTEROP_003

TEST_AggregationClassification_hierarchical_parent_drops_routing_when_remote_subcomponents_exist

hierarchical_parent_drops_routing_when_remote_subcomponents_exist

verified

REQ_INTEROP_003

TEST_AggregationClassification_leaf_collision_across_multiple_peers_emits_warning

leaf_collision_across_multiple_peers_emits_warning

verified

REQ_INTEROP_003

TEST_AggregationClassification_leaf_collision_keeps_routing_to_peer

leaf_collision_keeps_routing_to_peer

verified

REQ_INTEROP_003

TEST_AggregationClassification_leaf_collision_routing_respects_input_order

leaf_collision_routing_respects_input_order

verified

REQ_INTEROP_003

TEST_AggregationClassification_parent_references_nonexistent_component_falls_back_to_leaf

parent_references_nonexistent_component_falls_back_to_leaf

verified

REQ_INTEROP_003

TEST_AggregationClassification_self_parent_is_ignored_and_warned

self_parent_is_ignored_and_warned

verified

REQ_INTEROP_003

TEST_AggregationClassification_subcomponents_of_hierarchical_parent_still_route_to_peer

subcomponents_of_hierarchical_parent_still_route_to_peer

verified

REQ_INTEROP_003

TEST_AggregationClassification_two_way_parent_cycle_falls_back_to_leaves_with_warning

two_way_parent_cycle_falls_back_to_leaves_with_warning

verified

REQ_INTEROP_003

TEST_AggregationManager_fan_out_returns_partial_when_peers_unreachable

fan_out_returns_partial_when_peers_unreachable

verified

REQ_INTEROP_003

TEST_AggregationManager_forward_returns_502_for_unknown_peer

forward_returns_502_for_unknown_peer

verified

REQ_INTEROP_003

TEST_AggregationManager_forward_strips_peer_prefix_from_path

forward_strips_peer_prefix_from_path

verified

REQ_INTEROP_003

TEST_AggregationManager_routing_table_update_and_find

routing_table_update_and_find

verified

REQ_INTEROP_003

TEST_AppModelTest_ToCapabilities_ContainsRelationshipLinks

ToCapabilities_ContainsRelationshipLinks

verified

REQ_INTEROP_105; REQ_INTEROP_106

TEST_AppModelTest_ToJson_ContainsRequiredFields

ToJson_ContainsRequiredFields

verified

REQ_INTEROP_003

TEST_AreaModelTest_ToJson_ContainsRequiredFields

ToJson_ContainsRequiredFields

verified

REQ_INTEROP_003

TEST_AuthConfigResidualPermissionsTest_AdminWildcardsCoverEveryMethod

AdminWildcardsCoverEveryMethod

verified

REQ_INTEROP_086

TEST_AuthHandlersAuthorizeTest_ErrorCodeIsOAuth2Identifier

ErrorCodeIsOAuth2Identifier

verified

REQ_INTEROP_086

TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForEmptyClientId

ReturnsBadRequestForEmptyClientId

verified

REQ_INTEROP_086

TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForEmptyClientSecret

ReturnsBadRequestForEmptyClientSecret

verified

REQ_INTEROP_086

TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForMissingClientId

ReturnsBadRequestForMissingClientId

verified

REQ_INTEROP_086

TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForMissingClientSecret

ReturnsBadRequestForMissingClientSecret

verified

REQ_INTEROP_086

TEST_AuthHandlersAuthorizeTest_ReturnsBadRequestForWrongGrantType

ReturnsBadRequestForWrongGrantType

verified

REQ_INTEROP_086

TEST_AuthHandlersDisabledTest_AuthorizeReturns404WhenAuthDisabled

AuthorizeReturns404WhenAuthDisabled

verified

REQ_INTEROP_086

TEST_AuthHandlersDisabledTest_RevokeReturns404WhenAuthDisabled

RevokeReturns404WhenAuthDisabled

verified

REQ_INTEROP_086

TEST_AuthHandlersDisabledTest_TokenReturns404WhenAuthDisabled

TokenReturns404WhenAuthDisabled

verified

REQ_INTEROP_087

TEST_AuthHandlersRevokeTest_ReturnsBadRequestForInvalidJson

ReturnsBadRequestForInvalidJson

verified

REQ_INTEROP_086

TEST_AuthHandlersRevokeTest_ReturnsBadRequestForMissingTokenField

ReturnsBadRequestForMissingTokenField

verified

REQ_INTEROP_086

TEST_AuthHandlersRevokeTest_ReturnsBadRequestForNonStringToken

ReturnsBadRequestForNonStringToken

verified

REQ_INTEROP_086

TEST_AuthHandlersTokenTest_ReturnsBadRequestForEmptyRefreshToken

ReturnsBadRequestForEmptyRefreshToken

verified

REQ_INTEROP_087

TEST_AuthHandlersTokenTest_ReturnsBadRequestForMissingRefreshToken

ReturnsBadRequestForMissingRefreshToken

verified

REQ_INTEROP_087

TEST_AuthHandlersTokenTest_ReturnsBadRequestForWrongGrantType

ReturnsBadRequestForWrongGrantType

verified

REQ_INTEROP_087

TEST_AuthHandlersWithManagerTest_AuthorizeReturnsTokensForValidCredentials

AuthorizeReturnsTokensForValidCredentials

verified

REQ_INTEROP_086

TEST_AuthHandlersWithManagerTest_AuthorizeReturnsUnauthorizedForInvalidCredentials

AuthorizeReturnsUnauthorizedForInvalidCredentials

verified

REQ_INTEROP_086

TEST_AuthHandlersWithManagerTest_RevokeRevokesRefreshTokenForSubsequentTokenRequest

RevokeRevokesRefreshTokenForSubsequentTokenRequest

verified

REQ_INTEROP_086

TEST_AuthHandlersWithManagerTest_TokenReturnsNewAccessTokenForValidRefreshToken

TokenReturnsNewAccessTokenForValidRefreshToken

verified

REQ_INTEROP_087

TEST_AuthHandlersWithManagerTest_TokenReturnsUnauthorizedForInvalidRefreshToken

TokenReturnsUnauthorizedForInvalidRefreshToken

verified

REQ_INTEROP_087

TEST_AuthManagerPermissionTableTest_AddedPermissionsMergeRatherThanReplace

AddedPermissionsMergeRatherThanReplace

verified

REQ_INTEROP_086

TEST_AuthManagerPermissionTableTest_AManagerWithNoTableAuthorizesNothing

AManagerWithNoTableAuthorizesNothing

verified

REQ_INTEROP_086

TEST_AuthManagerRS256Test_RS256WithMissingPrivateKeyThrows

RS256WithMissingPrivateKeyThrows

verified

REQ_INTEROP_087

TEST_AuthManagerTest_AuthenticateValidCredentials

AuthenticateValidCredentials

verified

REQ_INTEROP_086

TEST_AuthManagerTest_AuthorizeViewerCanRead

AuthorizeViewerCanRead

verified

REQ_INTEROP_086

TEST_AuthManagerTest_DisabledClientTokenBecomesInvalid

DisabledClientTokenBecomesInvalid

verified

REQ_INTEROP_087

TEST_AuthManagerTest_RefreshAccessToken

RefreshAccessToken

verified

REQ_INTEROP_087

TEST_AuthManagerTest_RefreshRevocationPropagatestoAccessToken

RefreshRevocationPropagatestoAccessToken

verified

REQ_INTEROP_087

TEST_AuthManagerTest_RefreshWithAccessTokenFails

RefreshWithAccessTokenFails

verified

REQ_INTEROP_087

TEST_AuthManagerTest_ValidateTokenWithCorrectType

ValidateTokenWithCorrectType

verified

REQ_INTEROP_087

TEST_AuthManagerTest_ValidateTokenWithWrongTypeRejectsToken

ValidateTokenWithWrongTypeRejectsToken

verified

REQ_INTEROP_087

TEST_AuthManagerTest_ValidateValidToken

ValidateValidToken

verified

REQ_INTEROP_087

TEST_AuthMiddlewareTest_AuthEndpointsNeverRequireAuth

AuthEndpointsNeverRequireAuth

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_DisabledMiddlewareAllowsAll

DisabledMiddlewareAllowsAll

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ExtractBearerToken_CaseInsensitive

ExtractBearerToken_CaseInsensitive

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ExtractBearerToken_EmptyHeader

ExtractBearerToken_EmptyHeader

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ExtractBearerToken_EmptyToken

ExtractBearerToken_EmptyToken

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ExtractBearerToken_InvalidPrefix

ExtractBearerToken_InvalidPrefix

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ExtractBearerToken_ValidToken

ExtractBearerToken_ValidToken

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ProcessGetRequestWithoutAuth

ProcessGetRequestWithoutAuth

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ProcessWriteRequestWithInsufficientPermissions

ProcessWriteRequestWithInsufficientPermissions

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ProcessWriteRequestWithInvalidToken

ProcessWriteRequestWithInvalidToken

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ProcessWriteRequestWithoutAuth

ProcessWriteRequestWithoutAuth

verified

REQ_INTEROP_086

TEST_AuthMiddlewareTest_ProcessWriteRequestWithValidToken

ProcessWriteRequestWithValidToken

verified

REQ_INTEROP_086; REQ_INTEROP_087

TEST_AuthorizeRequestTest_ParseRequestFormUrlEncoded

ParseRequestFormUrlEncoded

verified

REQ_INTEROP_086

TEST_AuthorizeRequestTest_ParseRequestInvalidContentType

ParseRequestInvalidContentType

verified

REQ_INTEROP_086

TEST_AuthorizeRequestTest_ParseRequestInvalidJson

ParseRequestInvalidJson

verified

REQ_INTEROP_086

TEST_AuthorizeRequestTest_ParseRequestJson

ParseRequestJson

verified

REQ_INTEROP_086

TEST_AuthorizeRequestTest_ParseRequestJsonWithCharset

ParseRequestJsonWithCharset

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_AllAuthPolicyAlwaysRequiresAuth

AllAuthPolicyAlwaysRequiresAuth

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_ConfigurablePolicyExactMatch

ConfigurablePolicyExactMatch

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_ConfigurablePolicyLongestMatchWins

ConfigurablePolicyLongestMatchWins

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_ConfigurablePolicyMultipleWildcards

ConfigurablePolicyMultipleWildcards

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_ConfigurablePolicyUnknownPathsRequireAuth

ConfigurablePolicyUnknownPathsRequireAuth

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_ConfigurablePolicyWildcardMatch

ConfigurablePolicyWildcardMatch

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_FactoryCreatesAllAuthFromConfig

FactoryCreatesAllAuthFromConfig

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_FactoryCreatesNoAuthPolicy

FactoryCreatesNoAuthPolicy

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_FactoryCreatesWriteOnlyFromConfig

FactoryCreatesWriteOnlyFromConfig

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_NoAuthPolicyNeverRequiresAuth

NoAuthPolicyNeverRequiresAuth

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_PolicyDescriptions

PolicyDescriptions

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_WriteOnlyPolicyForGetRequests

WriteOnlyPolicyForGetRequests

verified

REQ_INTEROP_086

TEST_AuthRequirementPolicyTest_WriteOnlyPolicyForWriteRequests

WriteOnlyPolicyForWriteRequests

verified

REQ_INTEROP_086

TEST_BulkDataHandlersTest_DescriptorToJsonConversion

DescriptorToJsonConversion

verified

REQ_INTEROP_074

TEST_BulkDataHandlersTest_DescriptorToJsonWithMetadata

DescriptorToJsonWithMetadata

verified

REQ_INTEROP_074

TEST_BulkDataHandlersTest_DescriptorToJsonWithoutDescription

DescriptorToJsonWithoutDescription

verified

REQ_INTEROP_074

TEST_BulkDataHandlersTest_FormatTimestampNsEpoch

FormatTimestampNsEpoch

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_FormatTimestampNsNegativeFallback

FormatTimestampNsNegativeFallback

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_FormatTimestampNsValidTimestamp

FormatTimestampNsValidTimestamp

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_FormatTimestampNsWithMilliseconds

FormatTimestampNsWithMilliseconds

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_GetRosbagMimetypeCasesSensitive

GetRosbagMimetypeCasesSensitive

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_GetRosbagMimetypeDb3

GetRosbagMimetypeDb3

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_GetRosbagMimetypeEmpty

GetRosbagMimetypeEmpty

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_GetRosbagMimetypeMcap

GetRosbagMimetypeMcap

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_GetRosbagMimetypeSqlite3

GetRosbagMimetypeSqlite3

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_GetRosbagMimetypeUnknown

GetRosbagMimetypeUnknown

verified

REQ_INTEROP_071

TEST_BulkDataHandlersTest_PayloadTooLargeErrorCodeDefined

PayloadTooLargeErrorCodeDefined

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_EmptyCategories

EmptyCategories

verified

REQ_INTEROP_071

TEST_BulkDataStoreTest_GenerateUniqueIds

GenerateUniqueIds

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_GetFilePath

GetFilePath

verified

REQ_INTEROP_073

TEST_BulkDataStoreTest_GetFilePathNonexistent

GetFilePathNonexistent

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_IdFormatIsReadable

IdFormatIsReadable

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_ListCategories

ListCategories

verified

REQ_INTEROP_071

TEST_BulkDataStoreTest_ListItemsEmptyCategory

ListItemsEmptyCategory

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_ListItemsInCategory

ListItemsInCategory

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_ListItemsWrongEntity

ListItemsWrongEntity

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_MaxUploadSizeEnforced

MaxUploadSizeEnforced

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_MaxUploadZeroMeansUnlimited

MaxUploadZeroMeansUnlimited

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_PathTraversalRejected

PathTraversalRejected

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_RemoveItem

RemoveItem

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_RemoveNonexistent

RemoveNonexistent

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_RemoveThenListDoesNotInclude

RemoveThenListDoesNotInclude

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreAndRetrieve

StoreAndRetrieve

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreAtomicWriteDescriptorExists

StoreAtomicWriteDescriptorExists

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreCreatesDirectoryStructure

StoreCreatesDirectoryStructure

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreEmptyFile

StoreEmptyFile

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreEmptyFilename

StoreEmptyFilename

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreLargeFile

StoreLargeFile

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreUnknownCategoryRejected

StoreUnknownCategoryRejected

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_StoreWithMetadata

StoreWithMetadata

verified

REQ_INTEROP_074

TEST_BulkDataStoreTest_UnknownCategory

UnknownCategory

verified

REQ_INTEROP_074

TEST_CapabilityGeneratorTest_EntityCollectionDetailPathHasParameters

EntityCollectionDetailPathHasParameters

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateEntityCollectionReturnsSpec

GenerateEntityCollectionReturnsSpec

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateInvalidPathReturnsNullopt

GenerateInvalidPathReturnsNullopt

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateRootContainsEntityCollections

GenerateRootContainsEntityCollections

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateRootContainsEntityDetailPaths

GenerateRootContainsEntityDetailPaths

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateRootContainsGlobalFaults

GenerateRootContainsGlobalFaults

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateRootContainsHealthEndpoint

GenerateRootContainsHealthEndpoint

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateRootContainsVersionInfo

GenerateRootContainsVersionInfo

verified

REQ_INTEROP_002

TEST_CapabilityGeneratorTest_GenerateRootReturnsValidOpenApiSpec

GenerateRootReturnsValidOpenApiSpec

verified

REQ_INTEROP_002

TEST_CgroupReader_CgroupLimitHoldsValueOnlyWhenLimited

CgroupLimitHoldsValueOnlyWhenLimited

verified

REQ_INTEROP_003

TEST_CgroupReader_DetectRuntime

DetectRuntime

verified

REQ_INTEROP_003

TEST_CgroupReader_ExtractContainerdContainerId

ExtractContainerdContainerId

verified

REQ_INTEROP_003

TEST_CgroupReader_ExtractDockerContainerId

ExtractDockerContainerId

verified

REQ_INTEROP_003

TEST_CgroupReader_ExtractDockerOldStyleContainerId

ExtractDockerOldStyleContainerId

verified

REQ_INTEROP_003

TEST_CgroupReader_ExtractNoContainerId

ExtractNoContainerId

verified

REQ_INTEROP_003

TEST_CgroupReader_ExtractPodmanContainerId

ExtractPodmanContainerId

verified

REQ_INTEROP_003

TEST_CgroupReader_LimitStateStrings

LimitStateStrings

verified

REQ_INTEROP_003

TEST_CgroupTree_AbsentLimitFilesAreUnavailable

AbsentLimitFilesAreUnavailable

verified

REQ_INTEROP_003

TEST_CgroupTree_CgroupPathIdWinsOverMarker

CgroupPathIdWinsOverMarker

verified

REQ_INTEROP_003

TEST_CgroupTree_ContainerIdIsFoundOnANonPreferredHierarchy

ContainerIdIsFoundOnANonPreferredHierarchy

verified

REQ_INTEROP_003

TEST_CgroupTree_CpuMaxWithATrailingTokenIsUnreadable

CpuMaxWithATrailingTokenIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_CpuMaxWithoutPeriodIsUnreadable

CpuMaxWithoutPeriodIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_CpuMaxWithZeroPeriodIsUnreadable

CpuMaxWithZeroPeriodIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_EmptyLimitFilesAreUnreadable

EmptyLimitFilesAreUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_FirstLineLongerThanOneReadIsAccumulated

FirstLineLongerThanOneReadIsAccumulated

verified

REQ_INTEROP_003

TEST_CgroupTree_HostProcessIsNotContainerized

HostProcessIsNotContainerized

verified

REQ_INTEROP_003

TEST_CgroupTree_HybridUnifiedMountedBesideLegacyControllers

HybridUnifiedMountedBesideLegacyControllers

verified

REQ_INTEROP_003

TEST_CgroupTree_HybridUnifiedRootFallsBackToV1Path

HybridUnifiedRootFallsBackToV1Path

verified

REQ_INTEROP_003

TEST_CgroupTree_LegacyOwnedControllerAnswersEvenWhenUnifiedIsReadable

LegacyOwnedControllerAnswersEvenWhenUnifiedIsReadable

verified

REQ_INTEROP_003

TEST_CgroupTree_LegacyOwnedControllerReportsUnlimitedOverAUnifiedNumber

LegacyOwnedControllerReportsUnlimitedOverAUnifiedNumber

verified

REQ_INTEROP_003

TEST_CgroupTree_LimitFileWithoutALineEndingWithinTheCapIsUnreadable

LimitFileWithoutALineEndingWithinTheCapIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_LimitFileWithoutATrailingNewlineIsRead

LimitFileWithoutATrailingNewlineIsRead

verified

REQ_INTEROP_003

TEST_CgroupTree_LimitPathThatIsAFifoDoesNotBlock

LimitPathThatIsAFifoDoesNotBlock

verified

REQ_INTEROP_003

TEST_CgroupTree_MalformedProcCgroupLinesAreIgnored

MalformedProcCgroupLinesAreIgnored

verified

REQ_INTEROP_003

TEST_CgroupTree_MarkerAtTheReadersRootDoesNotContainerizeAHostProcess

MarkerAtTheReadersRootDoesNotContainerizeAHostProcess

verified

REQ_INTEROP_003

TEST_CgroupTree_MissingCgroupFileIsAnError

MissingCgroupFileIsAnError

verified

REQ_INTEROP_003

TEST_CgroupTree_MountRootMatchesOnlyWholePathComponents

MountRootMatchesOnlyWholePathComponents

verified

REQ_INTEROP_003

TEST_CgroupTree_MountRootWithATrailingSlashStillMatches

MountRootWithATrailingSlashStillMatches

verified

REQ_INTEROP_003

TEST_CgroupTree_NegativeMemoryLimitIsUnreadable

NegativeMemoryLimitIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_OpenFailureOtherThanMissingIsUnreadable

OpenFailureOtherThanMissingIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_OverlayBelowRootIsNotAContainer

OverlayBelowRootIsNotAContainer

verified

REQ_INTEROP_003

TEST_CgroupTree_OverlayRootWithAHostCgroupPathIsNotAContainer

OverlayRootWithAHostCgroupPathIsNotAContainer

verified

REQ_INTEROP_003

TEST_CgroupTree_PresentButUnreadableLimitFileIsNotReportedAsAbsent

PresentButUnreadableLimitFileIsNotReportedAsAbsent

verified

REQ_INTEROP_003

TEST_CgroupTree_PrivateNamespaceDetectedByDockerMarker

PrivateNamespaceDetectedByDockerMarker

verified

REQ_INTEROP_003

TEST_CgroupTree_PrivateNamespaceDetectedByOverlayRoot

PrivateNamespaceDetectedByOverlayRoot

verified

REQ_INTEROP_003

TEST_CgroupTree_PrivateNamespaceDetectedByPodmanMarker

PrivateNamespaceDetectedByPodmanMarker

verified

REQ_INTEROP_003

TEST_CgroupTree_StackedOverlayRootIsStillDetected

StackedOverlayRootIsStillDetected

verified

REQ_INTEROP_003

TEST_CgroupTree_SystemdNspawnMarkerIsDetected

SystemdNspawnMarkerIsDetected

verified

REQ_INTEROP_003

TEST_CgroupTree_TrailingGarbageAfterNumberIsUnreadable

TrailingGarbageAfterNumberIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_UnifiedHierarchyAtACustomMountPointWithASubtreeRoot

UnifiedHierarchyAtACustomMountPointWithASubtreeRoot

verified

REQ_INTEROP_003

TEST_CgroupTree_UnlimitedUnifiedCpuDoesNotOutrankALimitedLegacyQuota

UnlimitedUnifiedCpuDoesNotOutrankALimitedLegacyQuota

verified

REQ_INTEROP_003

TEST_CgroupTree_UnlimitedUnifiedDoesNotOutrankALimitedLegacyController

UnlimitedUnifiedDoesNotOutrankALimitedLegacyController

verified

REQ_INTEROP_003

TEST_CgroupTree_UnlimitedUnreadableAndAbsentAreThreeResults

UnlimitedUnreadableAndAbsentAreThreeResults

verified

REQ_INTEROP_003

TEST_CgroupTree_UnreadableOwnCgroupIsNotMaskedByAnUnlimitedFallback

UnreadableOwnCgroupIsNotMaskedByAnUnlimitedFallback

verified

REQ_INTEROP_003

TEST_CgroupTree_V1ControllerAtACustomMountPoint

V1ControllerAtACustomMountPoint

verified

REQ_INTEROP_003

TEST_CgroupTree_V1CpuControllerMountedWithoutCpuacct

V1CpuControllerMountedWithoutCpuacct

verified

REQ_INTEROP_003

TEST_CgroupTree_V1HostNamespaceJoinedPath

V1HostNamespaceJoinedPath

verified

REQ_INTEROP_003

TEST_CgroupTree_V1InsideContainerBareMountPoint

V1InsideContainerBareMountPoint

verified

REQ_INTEROP_003

TEST_CgroupTree_V1IsContainerized

V1IsContainerized

verified

REQ_INTEROP_003

TEST_CgroupTree_V1MountExposingASubtreeStripsItFromThePath

V1MountExposingASubtreeStripsItFromThePath

verified

REQ_INTEROP_003

TEST_CgroupTree_V1QuotaMinusOneIsUnlimited

V1QuotaMinusOneIsUnlimited

verified

REQ_INTEROP_003

TEST_CgroupTree_V1QuotaWithoutPeriodFileIsUnreadable

V1QuotaWithoutPeriodFileIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_V1RootFilesDoNotMaskContainerLimit

V1RootFilesDoNotMaskContainerLimit

verified

REQ_INTEROP_003

TEST_CgroupTree_V1UnlimitedSentinelBoundary

V1UnlimitedSentinelBoundary

verified

REQ_INTEROP_003

TEST_CgroupTree_V1ZeroPeriodIsUnreadable

V1ZeroPeriodIsUnreadable

verified

REQ_INTEROP_003

TEST_CgroupTree_V2HostNamespaceJoinedPath

V2HostNamespaceJoinedPath

verified

REQ_INTEROP_003

TEST_CgroupTree_V2PrivateNamespaceNestedPathPrefersOwnCgroup

V2PrivateNamespaceNestedPathPrefersOwnCgroup

verified

REQ_INTEROP_003

TEST_CgroupTree_V2PrivateNamespaceNonRootPath

V2PrivateNamespaceNonRootPath

verified

REQ_INTEROP_003

TEST_CgroupTree_V2PrivateNamespaceRootPath

V2PrivateNamespaceRootPath

verified

REQ_INTEROP_003

TEST_CgroupTree_V2UnlimitedIsNotAbsent

V2UnlimitedIsNotAbsent

verified

REQ_INTEROP_003

TEST_CgroupTree_V2UnreadableIsNotUnlimited

V2UnreadableIsNotUnlimited

verified

REQ_INTEROP_003

TEST_CgroupTree_ValueBeyondTypeRangeIsUnreadable

ValueBeyondTypeRangeIsUnreadable

verified

REQ_INTEROP_003

TEST_ClassifyFaultFailureTest_ARefusalWordedAnyOtherWayIsStillAClientError

ARefusalWordedAnyOtherWayIsStillAClientError

verified

REQ_INTEROP_013; REQ_INTEROP_015

TEST_ClassifyFaultFailureTest_DeclinedIsAClientError

DeclinedIsAClientError

verified

REQ_INTEROP_013; REQ_INTEROP_015

TEST_ClassifyFaultFailureTest_UnavailableIsAServerError

UnavailableIsAServerError

verified

REQ_INTEROP_013; REQ_INTEROP_015

TEST_CommonTypesTest_SortedContributors_EmptyStaysEmpty

SortedContributors_EmptyStaysEmpty

verified

REQ_INTEROP_003

TEST_CommonTypesTest_SortedContributors_LocalFirstThenAlphabetical

SortedContributors_LocalFirstThenAlphabetical

verified

REQ_INTEROP_003

TEST_CommonTypesTest_SortedContributors_NoLocalIsAlphabetical

SortedContributors_NoLocalIsAlphabetical

verified

REQ_INTEROP_003

TEST_ComponentModelTest_ToJson_ContainsRequiredFields

ToJson_ContainsRequiredFields

verified

REQ_INTEROP_003

TEST_ConditionEvaluator_EnterRange_NonNumericReturnsFalse

EnterRange_NonNumericReturnsFalse

verified

REQ_INTEROP_097

TEST_ConditionEvaluator_LeaveRange_NonNumericReturnsFalse

LeaveRange_NonNumericReturnsFalse

verified

REQ_INTEROP_097

TEST_ConditionEvaluator_OnChange_ValidateParams

OnChange_ValidateParams

verified

REQ_INTEROP_029

TEST_ConditionEvaluator_OnChangeTo_ValidateParams_MissingTarget

OnChangeTo_ValidateParams_MissingTarget

verified

REQ_INTEROP_029

TEST_ConditionEvaluator_OnChangeTo_ValidateParams_Valid

OnChangeTo_ValidateParams_Valid

verified

REQ_INTEROP_029

TEST_ContainerPlugin_CgroupInfoToJsonAllFields

CgroupInfoToJsonAllFields

verified

REQ_INTEROP_003

TEST_ContainerPlugin_CgroupInfoToJsonMissingOptionals

CgroupInfoToJsonMissingOptionals

verified

REQ_INTEROP_003

TEST_ContainerPlugin_CgroupInfoToJsonUnlimitedIsNotUnreadable

CgroupInfoToJsonUnlimitedIsNotUnreadable

verified

REQ_INTEROP_003

TEST_ContainerPlugin_NotContainerizedSkipped

NotContainerizedSkipped

verified

REQ_INTEROP_003

TEST_DataAccessManagerWithPublisherTest_set_topic_data_provider_nullptr_detaches_provider

set_topic_data_provider_nullptr_detaches_provider

verified

REQ_INTEROP_019

TEST_DataHandlersTest_DataCategoriesErrorBodyContainsFeatureParameter

DataCategoriesErrorBodyContainsFeatureParameter

verified

REQ_INTEROP_016

TEST_DataHandlersTest_DataCategoriesErrorBodyContainsMessage

DataCategoriesErrorBodyContainsMessage

verified

REQ_INTEROP_016

TEST_DataHandlersTest_DataCategoriesErrorCodeIsNotImplemented

DataCategoriesErrorCodeIsNotImplemented

verified

REQ_INTEROP_016

TEST_DataHandlersTest_DataCategoriesReturns501

DataCategoriesReturns501

verified

REQ_INTEROP_016

TEST_DataHandlersTest_DataGroupsErrorBodyContainsFeatureParameter

DataGroupsErrorBodyContainsFeatureParameter

verified

REQ_INTEROP_017

TEST_DataHandlersTest_DataGroupsErrorBodyContainsMessage

DataGroupsErrorBodyContainsMessage

verified

REQ_INTEROP_017

TEST_DataHandlersTest_DataGroupsErrorCodeIsNotImplemented

DataGroupsErrorCodeIsNotImplemented

verified

REQ_INTEROP_017

TEST_DataHandlersTest_DataGroupsReturns501

DataGroupsReturns501

verified

REQ_INTEROP_017

TEST_DataHandlersTest_GetDataItemBadRequestBodyContainsInvalidRequestErrorCode

GetDataItemBadRequestBodyContainsInvalidRequestErrorCode

verified

REQ_INTEROP_019

TEST_DataHandlersTest_GetDataItemReturnsBadRequestWhenMatchesMissing

GetDataItemReturnsBadRequestWhenMatchesMissing

verified

REQ_INTEROP_019

TEST_DataHandlersTest_ListDataBadRequestBodyContainsErrorCode

ListDataBadRequestBodyContainsErrorCode

verified

REQ_INTEROP_018

TEST_DataHandlersTest_ListDataReturnsBadRequestWhenMatchesMissing

ListDataReturnsBadRequestWhenMatchesMissing

verified

REQ_INTEROP_018

TEST_DataHandlersTest_PutDataItemBadRequestBodyContainsInvalidRequestErrorCode

PutDataItemBadRequestBodyContainsInvalidRequestErrorCode

verified

REQ_INTEROP_020

TEST_DataHandlersTest_PutDataItemReturnsBadRequestWhenMatchesMissing

PutDataItemReturnsBadRequestWhenMatchesMissing

verified

REQ_INTEROP_020

TEST_DefaultScriptProviderTest_ConcurrencyLimit

ConcurrencyLimit

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_ControlCompletedExecutionReturnsNotRunning

ControlCompletedExecutionReturnsNotRunning

verified

REQ_INTEROP_047

TEST_DefaultScriptProviderTest_ControlStopExecution

ControlStopExecution

verified

REQ_INTEROP_047

TEST_DefaultScriptProviderTest_CrossEntityExecutionAccessRejected

CrossEntityExecutionAccessRejected

verified

REQ_INTEROP_046

TEST_DefaultScriptProviderTest_DeleteManifestScriptFails

DeleteManifestScriptFails

verified

REQ_INTEROP_043

TEST_DefaultScriptProviderTest_DeleteNonexistentScriptFails

DeleteNonexistentScriptFails

verified

REQ_INTEROP_043

TEST_DefaultScriptProviderTest_DeleteScriptWithRunningExecutionBlocked

DeleteScriptWithRunningExecutionBlocked

verified

REQ_INTEROP_043

TEST_DefaultScriptProviderTest_DeleteUploadedScript

DeleteUploadedScript

verified

REQ_INTEROP_043

TEST_DefaultScriptProviderTest_EnvVars

EnvVars

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_ExecutionNotFound

ExecutionNotFound

verified

REQ_INTEROP_046

TEST_DefaultScriptProviderTest_FlagArgs

FlagArgs

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_GetManifestScript

GetManifestScript

verified

REQ_INTEROP_042

TEST_DefaultScriptProviderTest_GetNonexistentScript

GetNonexistentScript

verified

REQ_INTEROP_042

TEST_DefaultScriptProviderTest_GetUploadedScript

GetUploadedScript

verified

REQ_INTEROP_042

TEST_DefaultScriptProviderTest_ListMergesManifestAndUploaded

ListMergesManifestAndUploaded

verified

REQ_INTEROP_041

TEST_DefaultScriptProviderTest_ManifestScriptsLoaded

ManifestScriptsLoaded

verified

REQ_INTEROP_041

TEST_DefaultScriptProviderTest_ManifestScriptWithParametersSchema

ManifestScriptWithParametersSchema

verified

REQ_INTEROP_042

TEST_DefaultScriptProviderTest_NamedArgs

NamedArgs

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_PositionalArgs

PositionalArgs

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_ScriptNotFoundExecution

ScriptNotFoundExecution

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_StdinJsonFallback

StdinJsonFallback

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_SubprocessExecutionBash

SubprocessExecutionBash

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_SubprocessExecutionPython

SubprocessExecutionPython

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_SubprocessExecutionSh

SubprocessExecutionSh

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_SubprocessFailure

SubprocessFailure

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_SubprocessTimeout

SubprocessTimeout

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_UnsupportedExecutionType

UnsupportedExecutionType

verified

REQ_INTEROP_044

TEST_DefaultScriptProviderTest_UploadDisabledReturnsError

UploadDisabledReturnsError

verified

REQ_INTEROP_040

TEST_DefaultScriptProviderTest_UploadedScriptsIsolatedByEntity

UploadedScriptsIsolatedByEntity

verified

REQ_INTEROP_041

TEST_DefaultScriptProviderTest_UploadExceedingFileSizeRejected

UploadExceedingFileSizeRejected

verified

REQ_INTEROP_040

TEST_DefaultScriptProviderTest_UploadToFilesystem

UploadToFilesystem

verified

REQ_INTEROP_040

TEST_DefaultScriptProviderTest_UploadWithoutMetadata

UploadWithoutMetadata

verified

REQ_INTEROP_040

TEST_DefaultScriptProviderTest_UploadWithParametersSchema

UploadWithParametersSchema

verified

REQ_INTEROP_040

TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsEmptyWhenAppHasNoComponent

AppBelongsToReturnsEmptyWhenAppHasNoComponent

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsEmptyWhenComponentHasNoArea

AppBelongsToReturnsEmptyWhenComponentHasNoArea

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsMissingItemWhenAreaUnresolved

AppBelongsToReturnsMissingItemWhenAreaUnresolved

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsMissingItemWhenParentComponentUnresolved

AppBelongsToReturnsMissingItemWhenParentComponentUnresolved

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersFixtureTest_AppBelongsToReturnsParentArea

AppBelongsToReturnsParentArea

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersFixtureTest_AppBelongsToUnknownAppReturns404

AppBelongsToUnknownAppReturns404

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersFixtureTest_AppDependsOnReturnsResolvedAndMissingDependencies

AppDependsOnReturnsResolvedAndMissingDependencies

verified

REQ_INTEROP_009

TEST_DiscoveryHandlersFixtureTest_AppDependsOnUnknownAppReturns404

AppDependsOnUnknownAppReturns404

verified

REQ_INTEROP_009

TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnReturnsEmptyWhenAppHasNoComponent

AppIsLocatedOnReturnsEmptyWhenAppHasNoComponent

verified

REQ_INTEROP_105

TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnReturnsMissingItemWhenHostComponentUnresolved

AppIsLocatedOnReturnsMissingItemWhenHostComponentUnresolved

verified

REQ_INTEROP_105

TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnReturnsParentComponent

AppIsLocatedOnReturnsParentComponent

verified

REQ_INTEROP_105

TEST_DiscoveryHandlersFixtureTest_AppIsLocatedOnUnknownAppReturns404

AppIsLocatedOnUnknownAppReturns404

verified

REQ_INTEROP_105

TEST_DiscoveryHandlersFixtureTest_AreaComponentsReturnsMatchingComponentsOnly

AreaComponentsReturnsMatchingComponentsOnly

verified

REQ_INTEROP_006

TEST_DiscoveryHandlersFixtureTest_AreaComponentsUnknownAreaReturns404

AreaComponentsUnknownAreaReturns404

verified

REQ_INTEROP_006

TEST_DiscoveryHandlersFixtureTest_ComponentDependsOnReturnsResolvedAndMissingDependencies

ComponentDependsOnReturnsResolvedAndMissingDependencies

verified

REQ_INTEROP_008

TEST_DiscoveryHandlersFixtureTest_ComponentDependsOnUnknownComponentReturns404

ComponentDependsOnUnknownComponentReturns404

verified

REQ_INTEROP_008

TEST_DiscoveryHandlersFixtureTest_FunctionHostsReturnsHostingApps

FunctionHostsReturnsHostingApps

verified

REQ_INTEROP_007

TEST_DiscoveryHandlersFixtureTest_FunctionHostsUnknownFunctionReturns404

FunctionHostsUnknownFunctionReturns404

verified

REQ_INTEROP_007

TEST_DiscoveryHandlersFixtureTest_GetAppReturnsLinksAndCapabilities

GetAppReturnsLinksAndCapabilities

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetAppUnknownIdReturns404

GetAppUnknownIdReturns404

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetAreaReturnsCapabilitiesAndLinks

GetAreaReturnsCapabilitiesAndLinks

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetAreaUnknownIdReturns404

GetAreaUnknownIdReturns404

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetComponentReturnsRelationshipsAndCapabilities

GetComponentReturnsRelationshipsAndCapabilities

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetContainsReturnsAreaComponents

GetContainsReturnsAreaComponents

verified

REQ_INTEROP_006

TEST_DiscoveryHandlersFixtureTest_GetContainsUnknownAreaReturns404

GetContainsUnknownAreaReturns404

verified

REQ_INTEROP_006

TEST_DiscoveryHandlersFixtureTest_GetFunctionOmitsGraphLinkWithoutAPlugin

GetFunctionOmitsGraphLinkWithoutAPlugin

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetFunctionUnknownIdReturns404

GetFunctionUnknownIdReturns404

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_GetHostsReturnsHostedApps

GetHostsReturnsHostedApps

verified

REQ_INTEROP_007

TEST_DiscoveryHandlersFixtureTest_GetHostsUnknownComponentReturns404

GetHostsUnknownComponentReturns404

verified

REQ_INTEROP_007

TEST_DiscoveryHandlersFixtureTest_GetSubareasReturnsChildAreas

GetSubareasReturnsChildAreas

verified

REQ_INTEROP_004

TEST_DiscoveryHandlersFixtureTest_GetSubareasUnknownAreaReturns404

GetSubareasUnknownAreaReturns404

verified

REQ_INTEROP_004

TEST_DiscoveryHandlersFixtureTest_GetSubcomponentsReturnsChildren

GetSubcomponentsReturnsChildren

verified

REQ_INTEROP_005

TEST_DiscoveryHandlersFixtureTest_GetSubcomponentsUnknownComponentReturns404

GetSubcomponentsUnknownComponentReturns404

verified

REQ_INTEROP_005

TEST_DiscoveryHandlersFixtureTest_ListAppsReturnsSeededMetadata

ListAppsReturnsSeededMetadata

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_ListAreasReturnsSeededItems

ListAreasReturnsSeededItems

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_ListComponentsReturnsMetadata

ListComponentsReturnsMetadata

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersFixtureTest_ListFunctionsReturnsSeededFunctions

ListFunctionsReturnsSeededFunctions

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersValidationTest_AppBelongsToInvalidIdReturns400

AppBelongsToInvalidIdReturns400

verified

REQ_INTEROP_106

TEST_DiscoveryHandlersValidationTest_AppDependsOnInvalidIdReturns400

AppDependsOnInvalidIdReturns400

verified

REQ_INTEROP_009

TEST_DiscoveryHandlersValidationTest_AppIsLocatedOnInvalidIdReturns400

AppIsLocatedOnInvalidIdReturns400

verified

REQ_INTEROP_105

TEST_DiscoveryHandlersValidationTest_AreaComponentsInvalidIdReturns400

AreaComponentsInvalidIdReturns400

verified

REQ_INTEROP_006

TEST_DiscoveryHandlersValidationTest_ComponentDependsOnInvalidIdReturns400

ComponentDependsOnInvalidIdReturns400

verified

REQ_INTEROP_008

TEST_DiscoveryHandlersValidationTest_FunctionHostsInvalidIdReturns400

FunctionHostsInvalidIdReturns400

verified

REQ_INTEROP_007

TEST_DiscoveryHandlersValidationTest_GetAppInvalidIdReturns400

GetAppInvalidIdReturns400

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersValidationTest_GetAreaInvalidIdReturns400

GetAreaInvalidIdReturns400

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersValidationTest_GetAreaMissingMatchesReturns400

GetAreaMissingMatchesReturns400

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersValidationTest_GetComponentInvalidIdReturns400

GetComponentInvalidIdReturns400

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersValidationTest_GetContainsInvalidIdReturns400

GetContainsInvalidIdReturns400

verified

REQ_INTEROP_006

TEST_DiscoveryHandlersValidationTest_GetFunctionInvalidIdReturns400

GetFunctionInvalidIdReturns400

verified

REQ_INTEROP_003

TEST_DiscoveryHandlersValidationTest_GetHostsInvalidIdReturns400

GetHostsInvalidIdReturns400

verified

REQ_INTEROP_007

TEST_DiscoveryHandlersValidationTest_GetSubareasInvalidIdReturns400

GetSubareasInvalidIdReturns400

verified

REQ_INTEROP_004

TEST_DiscoveryHandlersValidationTest_GetSubcomponentsInvalidIdReturns400

GetSubcomponentsInvalidIdReturns400

verified

REQ_INTEROP_005

TEST_DiscoveryManagerTest_SetTopicDataProviderNullptrIsAcceptedAfterAttach

SetTopicDataProviderNullptrIsAcceptedAfterAttach

verified

REQ_INTEROP_018

TEST_DocsHandlersTest_DocsAnyPathReturns200ForEntityCollection

DocsAnyPathReturns200ForEntityCollection

verified

REQ_INTEROP_002

TEST_DocsHandlersTest_DocsAnyPathReturns404ForInvalidPath

DocsAnyPathReturns404ForInvalidPath

verified

REQ_INTEROP_002

TEST_DocsHandlersTest_DocsDisabledReturns501

DocsDisabledReturns501

verified

REQ_INTEROP_002

TEST_DocsHandlersTest_DocsRootReturnsValidJson

DocsRootReturnsValidJson

verified

REQ_INTEROP_002

TEST_EntityDefaultCaptureTest_BarePluginIdNeverMatchesSameNamedNode

BarePluginIdNeverMatchesSameNamedNode

verified

REQ_INTEROP_088

TEST_EntityDefaultCaptureTest_EntityDefaultCapturesSourceNodeTopics

EntityDefaultCapturesSourceNodeTopics

verified

REQ_INTEROP_088

TEST_EntityDefaultCaptureTest_EntityDefaultDisabledWritesNoFreezeFrame

EntityDefaultDisabledWritesNoFreezeFrame

verified

REQ_INTEROP_088

TEST_EntityDefaultCaptureTest_ExplicitConfigWinsOverEntityDefault

ExplicitConfigWinsOverEntityDefault

verified

REQ_INTEROP_088

TEST_EntityDefaultCaptureTest_ExplicitEmptyConfigEntryOptsOutOfEntityDefault

ExplicitEmptyConfigEntryOptsOutOfEntityDefault

verified

REQ_INTEROP_088

TEST_EntityDefaultCaptureTest_UnresolvableSourceWritesNoRow

UnresolvableSourceWritesNoRow

verified

REQ_INTEROP_088

TEST_EntityMerger_apps_collision_prefixed_gets_peer_contributor_only

apps_collision_prefixed_gets_peer_contributor_only

verified

REQ_INTEROP_003

TEST_EntityMerger_apps_collision_sets_original_id

apps_collision_sets_original_id

verified

REQ_INTEROP_003

TEST_EntityMerger_apps_prefix_on_collision

apps_prefix_on_collision

verified

REQ_INTEROP_003

TEST_EntityMerger_areas_merge_by_id

areas_merge_by_id

verified

REQ_INTEROP_003

TEST_EntityMerger_builds_routing_table_for_remote_entities

builds_routing_table_for_remote_entities

verified

REQ_INTEROP_003

TEST_EntityMerger_components_collision_appends_peer_contributor

components_collision_appends_peer_contributor

verified

REQ_INTEROP_003

TEST_EntityMerger_components_merge_by_id

components_merge_by_id

verified

REQ_INTEROP_003

TEST_EntityMerger_components_remote_only_gets_peer_contributor_only

components_remote_only_gets_peer_contributor_only

verified

REQ_INTEROP_003

TEST_EntityMerger_contributors_no_duplicate_on_repeat_merge

contributors_no_duplicate_on_repeat_merge

verified

REQ_INTEROP_003

TEST_EntityMerger_functions_merge_by_id_combining_hosts

functions_merge_by_id_combining_hosts

verified

REQ_INTEROP_003

TEST_EntityMerger_merged_component_hybrid_synthetic_collision_routes_to_peer

merged_component_hybrid_synthetic_collision_routes_to_peer

verified

REQ_INTEROP_003

TEST_EntityMerger_multi_peer_overlapping_app_ids_no_data_loss

multi_peer_overlapping_app_ids_no_data_loss

verified

REQ_INTEROP_003

TEST_FaultEventPublishingTest_ListFaultsForEntityEmptyResult

ListFaultsForEntityEmptyResult

verified

REQ_INTEROP_012

TEST_FaultEventPublishingTest_ListFaultsForEntitySuccess

ListFaultsForEntitySuccess

verified

REQ_INTEROP_012

TEST_FaultEventPublishingTest_ListFaultsForEntityWithEmptyId

ListFaultsForEntityWithEmptyId

verified

REQ_INTEROP_012

TEST_FaultHandlersTest_BuildSovdFaultResponseBasicFields

BuildSovdFaultResponseBasicFields

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseExtendedDataRecords

BuildSovdFaultResponseExtendedDataRecords

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseMixedSnapshots

BuildSovdFaultResponseMixedSnapshots

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseMultipleSources

BuildSovdFaultResponseMultipleSources

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseNestedEntityPath

BuildSovdFaultResponseNestedEntityPath

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponsePrimaryValueExtraction

BuildSovdFaultResponsePrimaryValueExtraction

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponsePropagatesCaptureOrigin

BuildSovdFaultResponsePropagatesCaptureOrigin

verified

REQ_INTEROP_088

TEST_FaultHandlersTest_BuildSovdFaultResponseStatusCleared

BuildSovdFaultResponseStatusCleared

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseStatusPassive

BuildSovdFaultResponseStatusPassive

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseWithFreezeFrame

BuildSovdFaultResponseWithFreezeFrame

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseWithInvalidJson

BuildSovdFaultResponseWithInvalidJson

verified

REQ_INTEROP_013

TEST_FaultHandlersTest_BuildSovdFaultResponseWithRosbag

BuildSovdFaultResponseWithRosbag

verified

REQ_INTEROP_013

TEST_FaultManagerTest_GetFaultRefusedByTheStoreReportsDeclined

GetFaultRefusedByTheStoreReportsDeclined

verified

REQ_INTEROP_013

TEST_FaultManagerTest_GetFaultWithNoServiceReportsUnavailable

GetFaultWithNoServiceReportsUnavailable

verified

REQ_INTEROP_013

TEST_FaultManagerTest_GetRosbagNotFound

GetRosbagNotFound

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetRosbagServiceNotAvailable

GetRosbagServiceNotAvailable

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetRosbagSuccess

GetRosbagSuccess

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetRosbagUsesConfiguredFaultManagerNamespace

GetRosbagUsesConfiguredFaultManagerNamespace

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsEmptyResponse

GetSnapshotsEmptyResponse

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsErrorResponse

GetSnapshotsErrorResponse

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsInvalidJsonFallback

GetSnapshotsInvalidJsonFallback

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsServiceNotAvailable

GetSnapshotsServiceNotAvailable

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsSuccessWithTopicFilter

GetSnapshotsSuccessWithTopicFilter

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsSuccessWithValidJson

GetSnapshotsSuccessWithValidJson

verified

REQ_INTEROP_088

TEST_FaultManagerTest_GetSnapshotsUsesConfiguredFaultManagerNamespace

GetSnapshotsUsesConfiguredFaultManagerNamespace

verified

REQ_INTEROP_088

TEST_FunctionModelTest_ToJson_ContainsRequiredFields

ToJson_ContainsRequiredFields

verified

REQ_INTEROP_003

TEST_FunctionResourceCollections_AreaSupportsFaults

AreaSupportsFaults

verified

REQ_INTEROP_003

TEST_FunctionResourceCollections_FunctionChildAppIds

FunctionChildAppIds

verified

REQ_INTEROP_003

TEST_FunctionResourceCollections_FunctionDataAggregatesFromHostedApps

FunctionDataAggregatesFromHostedApps

verified

REQ_INTEROP_003

TEST_FunctionResourceCollections_FunctionSupportsFaults

FunctionSupportsFaults

verified

REQ_INTEROP_003

TEST_GapFillConfigTest_DefaultAllowsAll

DefaultAllowsAll

verified

REQ_INTEROP_003

TEST_GapFillConfigTest_NamespaceBlacklistFiltersAreas

NamespaceBlacklistFiltersAreas

verified

REQ_INTEROP_003

TEST_GapFillConfigTest_NamespaceWhitelistFiltersAreas

NamespaceWhitelistFiltersAreas

verified

REQ_INTEROP_003

TEST_GraphProviderPluginRouteTest_RegistersFunctionCapabilityOnContext

RegistersFunctionCapabilityOnContext

verified

REQ_INTEROP_003

TEST_GraphProviderPluginRouteTest_RegistersSamplerForCyclicSubscriptions

RegistersSamplerForCyclicSubscriptions

verified

REQ_INTEROP_003

TEST_GraphProviderPluginRouteTest_ServesFunctionGraphFromCachedSnapshot

ServesFunctionGraphFromCachedSnapshot

verified

REQ_INTEROP_003

TEST_HealthHandlersTest_HandleRootAuthDisabledNoAuthEndpoints

HandleRootAuthDisabledNoAuthEndpoints

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootAuthEnabledAddsAuthEndpoints

HandleRootAuthEnabledAddsAuthEndpoints

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootAuthEnabledIncludesAuthMetadataBlock

HandleRootAuthEnabledIncludesAuthMetadataBlock

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootCapabilitiesAuthDisabled

HandleRootCapabilitiesAuthDisabled

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootCapabilitiesContainsDiscovery

HandleRootCapabilitiesContainsDiscovery

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootCapabilitiesTlsDisabled

HandleRootCapabilitiesTlsDisabled

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootEndpointsIsNonEmptyArray

HandleRootEndpointsIsNonEmptyArray

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootResponseContainsRequiredTopLevelFields

HandleRootResponseContainsRequiredTopLevelFields

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleRootTlsEnabledIncludesTlsMetadataBlock

HandleRootTlsEnabledIncludesTlsMetadataBlock

verified

REQ_INTEROP_010

TEST_HealthHandlersTest_HandleVersionInfoContainsItemsArray

HandleVersionInfoContainsItemsArray

verified

REQ_INTEROP_001

TEST_HealthHandlersTest_HandleVersionInfoItemsEntryHasBaseUri

HandleVersionInfoItemsEntryHasBaseUri

verified

REQ_INTEROP_001

TEST_HealthHandlersTest_HandleVersionInfoItemsEntryHasVendorInfo

HandleVersionInfoItemsEntryHasVendorInfo

verified

REQ_INTEROP_001

TEST_HealthHandlersTest_HandleVersionInfoItemsEntryHasVersionField

HandleVersionInfoItemsEntryHasVersionField

verified

REQ_INTEROP_001

TEST_HostInfoProviderTest_creates_default_component

creates_default_component

verified

REQ_INTEROP_003

TEST_HostInfoProviderTest_sanitizes_hostname_to_valid_entity_id

sanitizes_hostname_to_valid_entity_id

verified

REQ_INTEROP_003

TEST_IntervalParsingTest_ParsesValidIntervals

ParsesValidIntervals

verified

REQ_INTEROP_089

TEST_LoadPersistentTriggers_ExpiredTriggerMarkedTerminatedOnLoad

ExpiredTriggerMarkedTerminatedOnLoad

verified

REQ_INTEROP_029

TEST_LoadPersistentTriggers_NewTriggerIdIsHigherThanRestoredId

NewTriggerIdIsHigherThanRestoredId

verified

REQ_INTEROP_029

TEST_LoadPersistentTriggers_ResetBehaviorDoesNotRestoreTriggers

ResetBehaviorDoesNotRestoreTriggers

verified

REQ_INTEROP_029

TEST_LoadPersistentTriggers_RestoreBehaviorLoadsActiveTrigger

RestoreBehaviorLoadsActiveTrigger

verified

REQ_INTEROP_029

TEST_LockManagerTest_test_acquire_already_locked

test_acquire_already_locked

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_break_lock

test_acquire_break_lock

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_break_lock_not_breakable

test_acquire_break_lock_not_breakable

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_invalid_expiration

test_acquire_invalid_expiration

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_invalid_scope

test_acquire_invalid_scope

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_lock_basic

test_acquire_lock_basic

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_lock_full

test_acquire_lock_full

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_acquire_lock_scoped

test_acquire_lock_scoped

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_area_propagation

test_check_access_area_propagation

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_not_owner

test_check_access_not_owner

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_owner

test_check_access_owner

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_parent_propagation

test_check_access_parent_propagation

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_partial_scope_propagation

test_check_access_partial_scope_propagation

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_scoped_match

test_check_access_scoped_match

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_scoped_no_match

test_check_access_scoped_no_match

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_check_access_unlocked

test_check_access_unlocked

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_cleanup_expired

test_cleanup_expired

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_cleanup_not_expired

test_cleanup_not_expired

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_config_disabled

test_config_disabled

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_extend_lock

test_extend_lock

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_extend_not_found

test_extend_not_found

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_extend_not_owner

test_extend_not_owner

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_get_lock

test_get_lock

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_get_lock_by_id

test_get_lock_by_id

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_lock_required_different_collection_not_blocked

test_lock_required_different_collection_not_blocked

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_lock_required_has_lock

test_lock_required_has_lock

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_lock_required_no_lock_held

test_lock_required_no_lock_held

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_release_lock

test_release_lock

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_release_not_found

test_release_not_found

verified

REQ_INTEROP_100

TEST_LockManagerTest_test_release_not_owner

test_release_not_owner

verified

REQ_INTEROP_100

TEST_LogHandlersTest_GetLogsConfigurationErrorCarriesInvalidRequestCode

GetLogsConfigurationErrorCarriesInvalidRequestCode

verified

REQ_INTEROP_063

TEST_LogHandlersTest_GetLogsConfigurationReturnsBadRequestWhenCaptureMissing

GetLogsConfigurationReturnsBadRequestWhenCaptureMissing

verified

REQ_INTEROP_063

TEST_LogHandlersTest_GetLogsErrorCarriesInvalidRequestCode

GetLogsErrorCarriesInvalidRequestCode

verified

REQ_INTEROP_061

TEST_LogHandlersTest_GetLogsReturnsBadRequestWhenCaptureMissing

GetLogsReturnsBadRequestWhenCaptureMissing

verified

REQ_INTEROP_061

TEST_LogHandlersTest_PutLogsConfigurationErrorCarriesInvalidRequestCode

PutLogsConfigurationErrorCarriesInvalidRequestCode

verified

REQ_INTEROP_064

TEST_LogHandlersTest_PutLogsConfigurationReturnsBadRequestWhenCaptureMissing

PutLogsConfigurationReturnsBadRequestWhenCaptureMissing

verified

REQ_INTEROP_064

TEST_LogManagerBufferTest_AddLogEntry_EmptyMetadataNoSuffix

AddLogEntry_EmptyMetadataNoSuffix

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_AddLogEntry_EntryRetrievable

AddLogEntry_EntryRetrievable

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_AddLogEntry_InvalidSeverityFallsBackToInfo

AddLogEntry_InvalidSeverityFallsBackToInfo

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_AddLogEntry_MetadataAppendedToMessage

AddLogEntry_MetadataAppendedToMessage

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_BufferCapDropsNewNodesWhenFull

BufferCapDropsNewNodesWhenFull

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_ContextFilterMatchesSubstring

ContextFilterMatchesSubstring

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_FqnWithLeadingSlashMatchesBuffer

FqnWithLeadingSlashMatchesBuffer

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_GetConfigReturnsDefaultsForUnknownEntity

GetConfigReturnsDefaultsForUnknownEntity

verified

REQ_INTEROP_063

TEST_LogManagerBufferTest_GetLogsMatchesDotNotationLoggerNames

GetLogsMatchesDotNotationLoggerNames

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_GetLogsPrefixMatchesDotNotationLoggerNames

GetLogsPrefixMatchesDotNotationLoggerNames

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_MaxEntriesCapsMostRecentEntries

MaxEntriesCapsMostRecentEntries

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_PartialConfigUpdatePreservesOtherField

PartialConfigUpdatePreservesOtherField

verified

REQ_INTEROP_064

TEST_LogManagerBufferTest_PrefixMatchDoesNotFalsePositiveOnSubstring

PrefixMatchDoesNotFalsePositiveOnSubstring

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_PrefixMatchIncludesChildNamespaces

PrefixMatchIncludesChildNamespaces

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_RingBufferEvictsOldestEntryWhenFull

RingBufferEvictsOldestEntryWhenFull

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_SeverityFilterExcludesLowerLevels

SeverityFilterExcludesLowerLevels

verified

REQ_INTEROP_061

TEST_LogManagerBufferTest_UpdateConfigRejectsInvalidSeverity

UpdateConfigRejectsInvalidSeverity

verified

REQ_INTEROP_064

TEST_LogManagerBufferTest_UpdateConfigRejectsZeroMaxEntries

UpdateConfigRejectsZeroMaxEntries

verified

REQ_INTEROP_064

TEST_LogManagerEntryToJsonTest_AllSeverityLevels

AllSeverityLevels

verified

REQ_INTEROP_061

TEST_LogManagerEntryToJsonTest_BasicFields

BasicFields

verified

REQ_INTEROP_061

TEST_LogManagerEntryToJsonTest_EmptyOptionalFieldsOmitted

EmptyOptionalFieldsOmitted

verified

REQ_INTEROP_061

TEST_LogManagerFqnTest_NormalizeEmptyStringUnchanged

NormalizeEmptyStringUnchanged

verified

REQ_INTEROP_061

TEST_LogManagerFqnTest_NormalizeNoLeadingSlashUnchanged

NormalizeNoLeadingSlashUnchanged

verified

REQ_INTEROP_061

TEST_LogManagerFqnTest_NormalizeStripsLeadingSlash

NormalizeStripsLeadingSlash

verified

REQ_INTEROP_061

TEST_LogManagerIngestionTest_DefaultManagesIngestionPreservesCurrentBehavior

DefaultManagesIngestionPreservesCurrentBehavior

verified

REQ_INTEROP_061

TEST_LogManagerIngestionTest_ManagesIngestionDelegatesToPlugin

ManagesIngestionDelegatesToPlugin

verified

REQ_INTEROP_061

TEST_LogManagerIngestionTest_ManagesIngestionGetConfigDelegatesToPlugin

ManagesIngestionGetConfigDelegatesToPlugin

verified

REQ_INTEROP_063

TEST_LogManagerIngestionTest_ManagesIngestionLocalBufferBypassed

ManagesIngestionLocalBufferBypassed

verified

REQ_INTEROP_061

TEST_LogManagerIngestionTest_ManagesIngestionStillValidatesBeforeDelegation

ManagesIngestionStillValidatesBeforeDelegation

verified

REQ_INTEROP_064

TEST_LogManagerIngestionTest_ManagesIngestionUpdateConfigDelegatesToPlugin

ManagesIngestionUpdateConfigDelegatesToPlugin

verified

REQ_INTEROP_064

TEST_LogManagerIngestionTest_NoPluginPreservesDefaultBehavior

NoPluginPreservesDefaultBehavior

verified

REQ_INTEROP_061

TEST_LogManagerIngestionTest_PluginGetConfigThrowReturnsError

PluginGetConfigThrowReturnsError

verified

REQ_INTEROP_063

TEST_LogManagerIngestionTest_PluginGetLogsThrowReturnsError

PluginGetLogsThrowReturnsError

verified

REQ_INTEROP_061

TEST_LogManagerResolverTest_ResolverMatchesBareNameReturnsEntityId

ResolverMatchesBareNameReturnsEntityId

verified

REQ_INTEROP_061

TEST_LogManagerResolverTest_ResolverMatchesWithSlashPrefixReturnsEntityId

ResolverMatchesWithSlashPrefixReturnsEntityId

verified

REQ_INTEROP_061

TEST_LogManagerResolverTest_ResolverReturnsEmptyFallsBackToLastSegment

ResolverReturnsEmptyFallsBackToLastSegment

verified

REQ_INTEROP_061

TEST_LogManagerSeverityTest_IsValidSeverity

IsValidSeverity

verified

REQ_INTEROP_061

TEST_LogManagerSeverityTest_LevelToSeverityMapping

LevelToSeverityMapping

verified

REQ_INTEROP_061

TEST_LogManagerSeverityTest_SeverityToLevelMapping

SeverityToLevelMapping

verified

REQ_INTEROP_061

TEST_ManifestLayerTest_DefaultPolicies

DefaultPolicies

verified

REQ_INTEROP_003

TEST_ManifestParserTest_ParseScripts

ParseScripts

verified

REQ_INTEROP_041

TEST_ManifestParserTest_ParseScriptsMissingFormat

ParseScriptsMissingFormat

verified

REQ_INTEROP_041

TEST_ManifestParserTest_ParseScriptsMissingId

ParseScriptsMissingId

verified

REQ_INTEROP_041

TEST_ManifestParserTest_ParseScriptsMissingPath

ParseScriptsMissingPath

verified

REQ_INTEROP_041

TEST_ManifestParserTest_ParseScriptsTimeoutClampedToMinimum

ParseScriptsTimeoutClampedToMinimum

verified

REQ_INTEROP_041

TEST_MdnsDiscovery_default_config_values

default_config_values

verified

REQ_INTEROP_003

TEST_MdnsDiscovery_instance_name_returns_explicit_name

instance_name_returns_explicit_name

verified

REQ_INTEROP_003

TEST_MdnsDiscovery_respects_announce_flag

respects_announce_flag

verified

REQ_INTEROP_003

TEST_MdnsDiscovery_start_announce_on_ephemeral_port_does_not_crash

start_announce_on_ephemeral_port_does_not_crash

verified

REQ_INTEROP_003

TEST_MergePipelineTest_AppStatusMerge_BoolOrSemantics

AppStatusMerge_BoolOrSemantics

verified

REQ_INTEROP_003

TEST_MergePipelineTest_LayerExceptionDoesNotCrashPipeline

LayerExceptionDoesNotCrashPipeline

verified

REQ_INTEROP_003

TEST_MergePipelineTest_PluginReceivesDiscoveryContext

PluginReceivesDiscoveryContext

verified

REQ_INTEROP_003

TEST_MergePipelineTest_ThreeLayerMerge_PerFieldGroupOwnerTracking

ThreeLayerMerge_PerFieldGroupOwnerTracking

verified

REQ_INTEROP_003

TEST_MergePipelineTest_ThreeLayerMerge_PluginEnrichesManifestEntity

ThreeLayerMerge_PluginEnrichesManifestEntity

verified

REQ_INTEROP_003

TEST_MergeTypesTest_MergePolicyValues

MergePolicyValues

verified

REQ_INTEROP_003

TEST_OpenApiSpecBuilderTest_AlwaysIncludesGenericErrorResponse

AlwaysIncludesGenericErrorResponse

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_BuildContainsComponentsSchemas

BuildContainsComponentsSchemas

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_BuildContainsInfoBlock

BuildContainsInfoBlock

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_BuildContainsPathsObject

BuildContainsPathsObject

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_BuildContainsServersArray

BuildContainsServersArray

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_BuildContainsSovdVersion

BuildContainsSovdVersion

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_BuildProducesOpenApi310Version

BuildProducesOpenApi310Version

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_FluentInterfaceChaining

FluentInterfaceChaining

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_GenericErrorSchemaAlwaysPresent

GenericErrorSchemaAlwaysPresent

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_NonEmptySchemasArePresentInOutput

NonEmptySchemasArePresentInOutput

verified

REQ_INTEROP_002

TEST_OpenApiSpecBuilderTest_SecuritySchemeAddsToComponents

SecuritySchemeAddsToComponents

verified

REQ_INTEROP_002

TEST_ParseResourceUriTest_DataCollectionWithTopic

DataCollectionWithTopic

verified

REQ_INTEROP_089

TEST_ParseResourceUriTest_UpdateStatusUri

UpdateStatusUri

verified

REQ_INTEROP_089

TEST_PathBuilderTest_ActionOperationHasGetOnly

ActionOperationHasGetOnly

verified

REQ_INTEROP_002

TEST_PathBuilderTest_DataItemGetAlwaysPresent

DataItemGetAlwaysPresent

verified

REQ_INTEROP_002

TEST_PathBuilderTest_DataItemPutForSubscribeTopic

DataItemPutForSubscribeTopic

verified

REQ_INTEROP_002

TEST_PathBuilderTest_ErrorResponsesWithoutAuth

ErrorResponsesWithoutAuth

verified

REQ_INTEROP_002

TEST_PathBuilderTest_ServiceOperationHasGetOnly

ServiceOperationHasGetOnly

verified

REQ_INTEROP_002

TEST_PathResolverTest_DeepNestedPath

DeepNestedPath

verified

REQ_INTEROP_002

TEST_PathResolverTest_EntityCollection

EntityCollection

verified

REQ_INTEROP_002

TEST_PathResolverTest_HostsIsResourceCollection

HostsIsResourceCollection

verified

REQ_INTEROP_002

TEST_PathResolverTest_HostsUnderFunctionsIsResourceCollection

HostsUnderFunctionsIsResourceCollection

verified

REQ_INTEROP_002

TEST_PathResolverTest_MultiSegmentResourceId

MultiSegmentResourceId

verified

REQ_INTEROP_002

TEST_PathResolverTest_NestedEntityCollection

NestedEntityCollection

verified

REQ_INTEROP_002

TEST_PathResolverTest_ResourceCollection

ResourceCollection

verified

REQ_INTEROP_002

TEST_PathResolverTest_RootPath

RootPath

verified

REQ_INTEROP_002

TEST_PathResolverTest_SpecificEntity

SpecificEntity

verified

REQ_INTEROP_002

TEST_PathResolverTest_SpecificResource

SpecificResource

verified

REQ_INTEROP_002

TEST_PeerClient_fetch_entities_returns_error_on_connection_refused

fetch_entities_returns_error_on_connection_refused

verified

REQ_INTEROP_003

TEST_PeerClient_forward_sets_502_on_connection_error

forward_sets_502_on_connection_error

verified

REQ_INTEROP_003

TEST_PeerClientHappyPath_fetch_entities_parses_collections

fetch_entities_parses_collections

verified

REQ_INTEROP_003

TEST_PeerClientHappyPath_fetch_entities_parses_is_located_on_without_vendor_extension

fetch_entities_parses_is_located_on_without_vendor_extension

verified

REQ_INTEROP_018

TEST_PeerClientHappyPath_fetch_entities_parses_relationship_fields

fetch_entities_parses_relationship_fields

verified

REQ_INTEROP_003

TEST_PeerClientHappyPath_fetch_entities_parses_vendor_only_component_id_fallback

fetch_entities_parses_vendor_only_component_id_fallback

verified

REQ_INTEROP_018

TEST_PeerClientHappyPath_fetch_entities_rejects_malicious_component_id_in_located_on

fetch_entities_rejects_malicious_component_id_in_located_on

verified

REQ_INTEROP_018

TEST_PeerClientHappyPath_forward_and_get_json_returns_parsed_json

forward_and_get_json_returns_parsed_json

verified

REQ_INTEROP_018

TEST_PeerClientHappyPath_forward_request_proxies_response_with_auth

forward_request_proxies_response_with_auth

verified

REQ_INTEROP_018

TEST_PeerClientHappyPath_forward_request_rejects_oversized_response

forward_request_rejects_oversized_response

verified

REQ_INTEROP_003

TEST_PerEntityStorageTest_BackwardCompatibleWithoutResolver

BackwardCompatibleWithoutResolver

verified

REQ_INTEROP_095

TEST_PerEntityStorageTest_DifferentEntitiesSameFaultCode

DifferentEntitiesSameFaultCode

verified

REQ_INTEROP_095

TEST_PerEntityStorageTest_LidarFaultConfirmsImmediately

LidarFaultConfirmsImmediately

verified

REQ_INTEROP_095

TEST_PerEntityStorageTest_LidarHealingWithThreshold1

LidarHealingWithThreshold1

verified

REQ_INTEROP_095

TEST_PerEntityStorageTest_MotorFaultNeedsDebouncing

MotorFaultNeedsDebouncing

verified

REQ_INTEROP_095

TEST_PerEntityStorageTest_UnknownEntityUsesGlobalConfig

UnknownEntityUsesGlobalConfig

verified

REQ_INTEROP_095

TEST_PidCacheTest_AutoRefreshOnTTLExpiry

AutoRefreshOnTTLExpiry

verified

REQ_INTEROP_003

TEST_PidCacheTest_ConcurrentLookupDoesNotCrash

ConcurrentLookupDoesNotCrash

verified

REQ_INTEROP_003

TEST_PidCacheTest_EmptyProcDir

EmptyProcDir

verified

REQ_INTEROP_003

TEST_PidCacheTest_LookupAfterRefresh

LookupAfterRefresh

verified

REQ_INTEROP_003

TEST_PidCacheTest_LookupMissingNode

LookupMissingNode

verified

REQ_INTEROP_003

TEST_PidCacheTest_LookupRootNamespaceNode

LookupRootNamespaceNode

verified

REQ_INTEROP_003

TEST_PidCacheTest_NonexistentProcDir

NonexistentProcDir

verified

REQ_INTEROP_003

TEST_PidCacheTest_NoRefreshWithinTTL

NoRefreshWithinTTL

verified

REQ_INTEROP_003

TEST_PluginContextFailingPeerTest_ListAllFaults_FailingPeerPreservesLocalFaults

ListAllFaults_FailingPeerPreservesLocalFaults

verified

REQ_INTEROP_013

TEST_PluginContextFailingPeerTest_ListEntityFaults_FailingPeerPreservesLocalFaults

ListEntityFaults_FailingPeerPreservesLocalFaults

verified

REQ_INTEROP_013

TEST_PluginContextNoAggTest_ListEntityFaults_AreaResolvesToDescendantApps

ListEntityFaults_AreaResolvesToDescendantApps

verified

REQ_INTEROP_013

TEST_PluginContextNoAggTest_ListEntityFaults_FunctionResolvesToHostAppFaults

ListEntityFaults_FunctionResolvesToHostAppFaults

verified

REQ_INTEROP_013

TEST_PluginContextNoAggTest_ListEntityFaults_LocalFaultManager_IncludesScopedFaultOnly

ListEntityFaults_LocalFaultManager_IncludesScopedFaultOnly

verified

REQ_INTEROP_013

TEST_PluginContextWithPeerTest_ListAllFaults_IncludesPeerFault

ListAllFaults_IncludesPeerFault

verified

REQ_INTEROP_013

TEST_PluginContextWithPeerTest_ListAllFaults_MergesLocalAndPeerFaults

ListAllFaults_MergesLocalAndPeerFaults

verified

REQ_INTEROP_013

TEST_PluginContextWithPeerTest_ListEntityFaults_IncludesPeerFault

ListEntityFaults_IncludesPeerFault

verified

REQ_INTEROP_013

TEST_PluginContextWithPeerTest_ListEntityFaults_MergesLocalAndPeerFaults

ListEntityFaults_MergesLocalAndPeerFaults

verified

REQ_INTEROP_013

TEST_PluginLayerTest_DefaultPolicies

DefaultPolicies

verified

REQ_INTEROP_003

TEST_ProcfsPlugin_ProcessInfoToJsonAllFields

ProcessInfoToJsonAllFields

verified

REQ_INTEROP_003

TEST_ProcfsPlugin_ProcessInfoToJsonNegativeUptimeClamped

ProcessInfoToJsonNegativeUptimeClamped

verified

REQ_INTEROP_003

TEST_ProcfsPlugin_ProcessInfoToJsonZeroUptime

ProcessInfoToJsonZeroUptime

verified

REQ_INTEROP_003

TEST_ProcReader_ReadNonexistentPidFails

ReadNonexistentPidFails

verified

REQ_INTEROP_003

TEST_ProcReader_ReadSelfProcess

ReadSelfProcess

verified

REQ_INTEROP_003

TEST_ProcReader_ReadSystemUptime

ReadSystemUptime

verified

REQ_INTEROP_003

TEST_ProcReader_ReadSystemUptimeMissingFile

ReadSystemUptimeMissingFile

verified

REQ_INTEROP_003

TEST_ProcReader_StateFieldPopulated

StateFieldPopulated

verified

REQ_INTEROP_003

TEST_ResolverTest_EmptyResolverReturnsGlobal

EmptyResolverReturnsGlobal

verified

REQ_INTEROP_095

TEST_ResolverTest_ExactMatch

ExactMatch

verified

REQ_INTEROP_095

TEST_ResolverTest_LongestPrefixWins

LongestPrefixWins

verified

REQ_INTEROP_095

TEST_ResolverTest_NoMatchReturnsGlobal

NoMatchReturnsGlobal

verified

REQ_INTEROP_095

TEST_ResolverTest_PartialOverrideMergesWithGlobal

PartialOverrideMergesWithGlobal

verified

REQ_INTEROP_095

TEST_ResolverTest_PrefixMatch

PrefixMatch

verified

REQ_INTEROP_095

TEST_ResolverTest_PrefixMatchRequiresPathBoundary

PrefixMatchRequiresPathBoundary

verified

REQ_INTEROP_095

TEST_ResolverTest_SizeReturnsEntryCount

SizeReturnsEntryCount

verified

REQ_INTEROP_095

TEST_ResourceChangeNotifier_AsyncDispatchNonBlocking

AsyncDispatchNonBlocking

verified

REQ_INTEROP_097

TEST_ResourceChangeNotifier_SubscribeAndNotify

SubscribeAndNotify

verified

REQ_INTEROP_097

TEST_Ros2TopicDataProviderTest_ColdWaitCapExceededReturns503

ColdWaitCapExceededReturns503

verified

REQ_INTEROP_019

TEST_Ros2TopicDataProviderTest_DiscoverByNamespaceGroupsTopics

DiscoverByNamespaceGroupsTopics

verified

REQ_INTEROP_018

TEST_Ros2TopicDataProviderTest_DiscoverFindsPublisher

DiscoverFindsPublisher

verified

REQ_INTEROP_018

TEST_Ros2TopicDataProviderTest_InterfacePolymorphismWorks

InterfacePolymorphismWorks

verified

REQ_INTEROP_019

TEST_Ros2TopicDataProviderTest_SampleHitReturnsDataAfterPublish

SampleHitReturnsDataAfterPublish

verified

REQ_INTEROP_019

TEST_Ros2TopicDataProviderTest_SampleMatchesReliablePublisherQoS

SampleMatchesReliablePublisherQoS

verified

REQ_INTEROP_019

TEST_Ros2TopicDataProviderTest_SampleParallelEmbedsPerTopicErrorInsteadOfFailingBatch

SampleParallelEmbedsPerTopicErrorInsteadOfFailingBatch

verified

REQ_INTEROP_019

TEST_Ros2TopicDataProviderTest_SampleParallelHonorsMaxParallelSamplesAndPreservesOrder

SampleParallelHonorsMaxParallelSamplesAndPreservesOrder

verified

REQ_INTEROP_019

TEST_Ros2TopicDataProviderTest_SampleParallelReturnsOneResultPerTopic

SampleParallelReturnsOneResultPerTopic

verified

REQ_INTEROP_018

TEST_Ros2TopicDataProviderTest_SampleWithoutPublishersReturnsMetadataOnly

SampleWithoutPublishersReturnsMetadataOnly

verified

REQ_INTEROP_019

TEST_RosbagCaptureTest_ConfiguredFormatUnavailableFallsBackToSqlite3

ConfiguredFormatUnavailableFallsBackToSqlite3

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConfiguredSqlite3UnavailableFallsBackToMcap

ConfiguredSqlite3UnavailableFallsBackToMcap

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConstructorAcceptsMcapFormat

ConstructorAcceptsMcapFormat

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConstructorFallsBackOnUnknownFormat

ConstructorFallsBackOnUnknownFormat

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConstructorRequiresValidNode

ConstructorRequiresValidNode

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConstructorRequiresValidStorage

ConstructorRequiresValidStorage

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConstructorSucceedsWithValidParams

ConstructorSucceedsWithValidParams

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_ConstructorWithDisabledRosbag

ConstructorWithDisabledRosbag

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_DefaultFormatIsMcap

DefaultFormatIsMcap

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_IsEnabledReturnsConfigState

IsEnabledReturnsConfigState

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_NoUsableBackendDisablesCaptureWithoutCrashing

NoUsableBackendDisablesCaptureWithoutCrashing

verified

REQ_INTEROP_088

TEST_RosbagCaptureTest_Sqlite3BaselineUnavailableDisablesCapture

Sqlite3BaselineUnavailableDisablesCapture

verified

REQ_INTEROP_088

TEST_RouteDescriptionsTest_EmptyBuilderProducesEmptyDescriptions

EmptyBuilderProducesEmptyDescriptions

verified

REQ_INTEROP_002

TEST_RouteDescriptionsTest_MultipleEndpoints

MultipleEndpoints

verified

REQ_INTEROP_002

TEST_RouteDescriptionsTest_PostWithRequestBody

PostWithRequestBody

verified

REQ_INTEROP_002

TEST_RouteDescriptionsTest_SchemaTypes

SchemaTypes

verified

REQ_INTEROP_002

TEST_RouteDescriptionsTest_SingleGetEndpoint

SingleGetEndpoint

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_AuthEnabledAdds401And403Responses

AuthEnabledAdds401And403Responses

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_DerivedCreatedResponseDeclaresLocationHeader

DerivedCreatedResponseDeclaresLocationHeader

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_ErrorResponsesUseGenericErrorRef

ErrorResponsesUseGenericErrorRef

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_OperationIdIsGenerated

OperationIdIsGenerated

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_PathParamDescriptionsArePresent

PathParamDescriptionsArePresent

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_PerEntityFaultsQueryAdvertisesStatusOnly

PerEntityFaultsQueryAdvertisesStatusOnly

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_ToOpenapiPathsContainsRegisteredRoute

ToOpenapiPathsContainsRegisteredRoute

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_ToOpenapiPathsEmitsQueryParameters

ToOpenapiPathsEmitsQueryParameters

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_ToOpenapiPathsMultipleMethodsSamePath

ToOpenapiPathsMultipleMethodsSamePath

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_ToRegexPathRootBecomesRootAnchored

ToRegexPathRootBecomesRootAnchored

verified

REQ_INTEROP_002

TEST_RouteRegistryTest_TypedQueryDeclaresParametersFromDto

TypedQueryDeclaresParametersFromDto

verified

REQ_INTEROP_002

TEST_RuntimeDiscoveryMultiNsTest_DiscoverFunctions_GroupsByNamespace

DiscoverFunctions_GroupsByNamespace

verified

REQ_INTEROP_003

TEST_RuntimeDiscoveryTest_DiscoverFunctions_DefaultCreatesFromNamespaces

DiscoverFunctions_DefaultCreatesFromNamespaces

verified

REQ_INTEROP_003

TEST_RuntimeLayerTest_DefaultPolicies

DefaultPolicies

verified

REQ_INTEROP_003

TEST_RuntimeLinkerTest_ExactMatch_NodeNameAndNamespace

ExactMatch_NodeNameAndNamespace

verified

REQ_INTEROP_003

TEST_RuntimeLinkerTest_OrphanPolicy_IncludeAsOrphan_NoError

OrphanPolicy_IncludeAsOrphan_NoError

verified

REQ_INTEROP_003

TEST_RuntimeLinkerTest_OrphanPolicy_Warn_NoError

OrphanPolicy_Warn_NoError

verified

REQ_INTEROP_003

TEST_SchemaBuilderRuntimeTest_FromRosMsgKnownType

FromRosMsgKnownType

verified

REQ_INTEROP_002

TEST_SchemaBuilderRuntimeTest_FromRosMsgUnknownType

FromRosMsgUnknownType

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_AcquireLockRequestSchemaComesFromDto

AcquireLockRequestSchemaComesFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_BulkDataCategoryListSchema

BulkDataCategoryListSchema

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_BulkDataDescriptorSchema

BulkDataDescriptorSchema

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ConfigurationMetaDataSchemaFromDto

ConfigurationMetaDataSchemaFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ConfigurationMetaDataXMedkitDtoDeclaresSourceAndNode

ConfigurationMetaDataXMedkitDtoDeclaresSourceAndNode

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ConfigurationReadValueSchemaFromDto

ConfigurationReadValueSchemaFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ConfigurationWriteRequestSchemaFromDto

ConfigurationWriteRequestSchemaFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_CyclicSubscriptionCreateRequestSchema

CyclicSubscriptionCreateRequestSchema

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_DataWriteRequestSchemaComesFromDto

DataWriteRequestSchemaComesFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ExecutionUpdateRequestSchemaComesFromDto

ExecutionUpdateRequestSchemaComesFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ExtendLockRequestSchemaComesFromDto

ExtendLockRequestSchemaComesFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_LockSchemaComesFromDto

LockSchemaComesFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_LogConfigurationSchemaFieldsOptional

LogConfigurationSchemaFieldsOptional

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_OperationDetailSchemaComeFromDto

OperationDetailSchemaComeFromDto

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ScriptControlRequestSchema

ScriptControlRequestSchema

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_ScriptUploadResponseSchema

ScriptUploadResponseSchema

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_TriggerCreateRequestSchema

TriggerCreateRequestSchema

verified

REQ_INTEROP_002

TEST_SchemaBuilderStaticTest_TriggerUpdateRequestSchema

TriggerUpdateRequestSchema

verified

REQ_INTEROP_002

TEST_SchemaConsistencyTest_AllRefsResolveToRegisteredSchemas

AllRefsResolveToRegisteredSchemas

verified

REQ_INTEROP_002

TEST_SchemaConsistencyTest_ListSchemasReferenceExistingItemSchemas

ListSchemasReferenceExistingItemSchemas

verified

REQ_INTEROP_002

TEST_SchemaConsistencyTest_RequiredFieldsExistInProperties

RequiredFieldsExistInProperties

verified

REQ_INTEROP_002

TEST_ScriptHandlersErrorMappingTest_AlreadyRunningMapsTo409

AlreadyRunningMapsTo409

verified

REQ_INTEROP_044

TEST_ScriptHandlersErrorMappingTest_ConcurrencyLimitMapsTo429

ConcurrencyLimitMapsTo429

verified

REQ_INTEROP_044

TEST_ScriptHandlersErrorMappingTest_DeleteReturns204

DeleteReturns204

verified

REQ_INTEROP_043

TEST_ScriptHandlersErrorMappingTest_FileTooLargeMapsTo413

FileTooLargeMapsTo413

verified

REQ_INTEROP_040

TEST_ScriptHandlersErrorMappingTest_ListEmitsTypedHateoasLinks

ListEmitsTypedHateoasLinks

verified

REQ_INTEROP_040

TEST_ScriptHandlersErrorMappingTest_ManagedScriptMapsTo409

ManagedScriptMapsTo409

verified

REQ_INTEROP_043

TEST_ScriptHandlersErrorMappingTest_NotFoundMapsTo404

NotFoundMapsTo404

verified

REQ_INTEROP_042

TEST_ScriptHandlersErrorMappingTest_StartExecutionReturns202WithLocation

StartExecutionReturns202WithLocation

verified

REQ_INTEROP_044

TEST_ScriptHandlersErrorMappingTest_UploadRejectsWrongContentType

UploadRejectsWrongContentType

verified

REQ_INTEROP_040

TEST_ScriptHandlersErrorMappingTest_UploadReturns201WithLocation

UploadReturns201WithLocation

verified

REQ_INTEROP_040

TEST_ScriptHandlersNoBackendTest_ControlExecutionReturns501WhenNoBackend

ControlExecutionReturns501WhenNoBackend

verified

REQ_INTEROP_047

TEST_ScriptHandlersNoBackendTest_DeleteReturns501WhenNoBackend

DeleteReturns501WhenNoBackend

verified

REQ_INTEROP_043

TEST_ScriptHandlersNoBackendTest_GetExecutionReturns501WhenNoBackend

GetExecutionReturns501WhenNoBackend

verified

REQ_INTEROP_046

TEST_ScriptHandlersNoBackendTest_GetReturns501WhenNoBackend

GetReturns501WhenNoBackend

verified

REQ_INTEROP_042

TEST_ScriptHandlersNoBackendTest_ListReturns501WhenNoBackend

ListReturns501WhenNoBackend

verified

REQ_INTEROP_041

TEST_ScriptHandlersNoBackendTest_StartExecutionReturns501WhenNoBackend

StartExecutionReturns501WhenNoBackend

verified

REQ_INTEROP_044

TEST_ScriptHandlersNoBackendTest_UploadReturns501WhenNoBackend

UploadReturns501WhenNoBackend

verified

REQ_INTEROP_040

TEST_ScriptManagerTest_ControlExecution

ControlExecution

verified

REQ_INTEROP_047

TEST_ScriptManagerTest_DeleteManifestScript

DeleteManifestScript

verified

REQ_INTEROP_043

TEST_ScriptManagerTest_DeleteScript

DeleteScript

verified

REQ_INTEROP_043

TEST_ScriptManagerTest_GetExecution

GetExecution

verified

REQ_INTEROP_046

TEST_ScriptManagerTest_GetScript

GetScript

verified

REQ_INTEROP_042

TEST_ScriptManagerTest_GetScriptNotFound

GetScriptNotFound

verified

REQ_INTEROP_042

TEST_ScriptManagerTest_ListScripts

ListScripts

verified

REQ_INTEROP_041

TEST_ScriptManagerTest_StartExecution

StartExecution

verified

REQ_INTEROP_044

TEST_ScriptManagerTest_UploadScript

UploadScript

verified

REQ_INTEROP_040

TEST_SnapshotCaptureTest_BackgroundCaptureCachesFreezeFrame

BackgroundCaptureCachesFreezeFrame

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_BackgroundCaptureInitializesSubscriptions

BackgroundCaptureInitializesSubscriptions

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_CaptureWritesFreezeFrameFromConfiguredTopic

CaptureWritesFreezeFrameFromConfiguredTopic

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_ConfigAccessorReturnsCorrectValues

ConfigAccessorReturnsCorrectValues

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_ConstructorRequiresValidNode

ConstructorRequiresValidNode

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_ConstructorRequiresValidStorage

ConstructorRequiresValidStorage

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_ConstructorSucceedsWithValidParams

ConstructorSucceedsWithValidParams

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_DisabledCaptureSkipsProcessing

DisabledCaptureSkipsProcessing

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_DisabledCaptureWritesNoFreezeFrame

DisabledCaptureWritesNoFreezeFrame

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_EmptyConfigurationHandledGracefully

EmptyConfigurationHandledGracefully

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_EmptyRecaptureKeepsRetainedFreezeFrame

EmptyRecaptureKeepsRetainedFreezeFrame

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_InvalidRegexPatternIsSkipped

InvalidRegexPatternIsSkipped

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_IsEnabledReturnsConfigState

IsEnabledReturnsConfigState

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_MultipleValidPatternsCompiled

MultipleValidPatternsCompiled

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_OnDemandCaptureHandlesNonExistentTopic

OnDemandCaptureHandlesNonExistentTopic

verified

REQ_INTEROP_088

TEST_SnapshotCaptureTest_UnconfiguredFaultWritesNoFreezeFrame

UnconfiguredFaultWritesNoFreezeFrame

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_ClearFaultDeletesAssociatedSnapshots

ClearFaultDeletesAssociatedSnapshots

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_ClearFaultKeepsSnapshotsWhenEvidenceIsRetained

ClearFaultKeepsSnapshotsWhenEvidenceIsRetained

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_FilterSnapshotsByTopic

FilterSnapshotsByTopic

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_FreezeFramePersistsAcrossReopen

FreezeFramePersistsAcrossReopen

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_FreezeFrameReplacedOnRecapture

FreezeFrameReplacedOnRecapture

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_FreezeFrameSurvivesClearFault

FreezeFrameSurvivesClearFault

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_GetAllRosbagFilesReturnsSortedByCreatedAt

GetAllRosbagFilesReturnsSortedByCreatedAt

verified

REQ_INTEROP_073

TEST_SqliteFaultStorageTest_ListRosbagsForEntityFiltersCorrectly

ListRosbagsForEntityFiltersCorrectly

verified

REQ_INTEROP_071

TEST_SqliteFaultStorageTest_MultipleSnapshotsForSameFault

MultipleSnapshotsForSameFault

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_NoFreezeFrameForUnknownFault

NoFreezeFrameForUnknownFault

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_NoSnapshotsForUnknownFault

NoSnapshotsForUnknownFault

verified

REQ_INTEROP_088

TEST_SqliteFaultStorageTest_StoreAndRetrieveSnapshot

StoreAndRetrieveSnapshot

verified

REQ_INTEROP_088

TEST_SSEStreamProxyIntegration_receives_events_from_mock_server

receives_events_from_mock_server

verified

REQ_INTEROP_090

TEST_SseTransportProviderTest_ProtocolReturnsSse

ProtocolReturnsSse

verified

REQ_INTEROP_090

TEST_SseTransportProviderTest_StartReturnsEventsUrl

StartReturnsEventsUrl

verified

REQ_INTEROP_090

TEST_SseTransportProviderTest_StopRemovesStream

StopRemovesStream

verified

REQ_INTEROP_090

TEST_StreamProxy_parse_sse_multiple_events

parse_sse_multiple_events

verified

REQ_INTEROP_090

TEST_StreamProxy_parse_sse_single_event

parse_sse_single_event

verified

REQ_INTEROP_090

TEST_StreamProxy_parse_sse_with_event_type

parse_sse_with_event_type

verified

REQ_INTEROP_090

TEST_SyntheticProcTest_EmptyStatFile

EmptyStatFile

verified

REQ_INTEROP_003

TEST_SyntheticProcTest_FindPidForNodeInSyntheticProc

FindPidForNodeInSyntheticProc

verified

REQ_INTEROP_003

TEST_SyntheticProcTest_MalformedStatMissingComm

MalformedStatMissingComm

verified

REQ_INTEROP_003

TEST_SyntheticProcTest_ReadSyntheticProc

ReadSyntheticProc

verified

REQ_INTEROP_003

TEST_SyntheticProcTest_ReadSystemUptimeSynthetic

ReadSystemUptimeSynthetic

verified

REQ_INTEROP_003

TEST_SyntheticProcTest_TruncatedStatAfterComm

TruncatedStatAfterComm

verified

REQ_INTEROP_003

TEST_SystemdUtils_ComponentEndpointEmptyUnitsArray

ComponentEndpointEmptyUnitsArray

verified

REQ_INTEROP_003

TEST_SystemdUtils_EscapeAtSignInTemplateUnit

EscapeAtSignInTemplateUnit

verified

REQ_INTEROP_003

TEST_SystemdUtils_EscapeDotInServiceExtension

EscapeDotInServiceExtension

verified

REQ_INTEROP_003

TEST_SystemdUtils_EscapeEmptyString

EscapeEmptyString

verified

REQ_INTEROP_003

TEST_SystemdUtils_EscapeHyphenInUnitName

EscapeHyphenInUnitName

verified

REQ_INTEROP_003

TEST_SystemdUtils_EscapeSimpleServiceName

EscapeSimpleServiceName

verified

REQ_INTEROP_003

TEST_SystemdUtils_EscapeSlashInPath

EscapeSlashInPath

verified

REQ_INTEROP_003

TEST_TestAuthenticationIntegration_test_03_authenticate_valid_credentials

test_03_authenticate_valid_credentials

verified

REQ_INTEROP_086

TEST_TestAuthenticationIntegration_test_06_authenticate_form_urlencoded

test_06_authenticate_form_urlencoded

verified

REQ_INTEROP_086

TEST_TestAuthenticationIntegration_test_07_refresh_token

test_07_refresh_token

verified

REQ_INTEROP_087

TEST_TestAutoConfirmVisibility_test_03_timer_confirmation_captures_a_snapshot

test_03_timer_confirmation_captures_a_snapshot

verified

REQ_INTEROP_088

TEST_TestBulkDataApi_test_bulk_data_component_aggregates_child_apps

test_bulk_data_component_aggregates_child_apps

verified

REQ_INTEROP_072

TEST_TestBulkDataApi_test_bulk_data_download_not_found

test_bulk_data_download_not_found

verified

REQ_INTEROP_073

TEST_TestBulkDataApi_test_bulk_data_list_categories_all_entity_types

test_bulk_data_list_categories_all_entity_types

verified

REQ_INTEROP_071

TEST_TestBulkDataApi_test_bulk_data_list_categories_entity_not_found

test_bulk_data_list_categories_entity_not_found

verified

REQ_INTEROP_071

TEST_TestBulkDataApi_test_bulk_data_list_categories_success

test_bulk_data_list_categories_success

verified

REQ_INTEROP_071

TEST_TestBulkDataApi_test_bulk_data_list_descriptors_empty_result

test_bulk_data_list_descriptors_empty_result

verified

REQ_INTEROP_072

TEST_TestBulkDataApi_test_bulk_data_list_descriptors_structure

test_bulk_data_list_descriptors_structure

verified

REQ_INTEROP_072

TEST_TestBulkDataApi_test_bulk_data_nested_entity_path

test_bulk_data_nested_entity_path

verified

REQ_INTEROP_071

TEST_TestBulkDataApi_test_bulk_data_unknown_category_returns_404

test_bulk_data_unknown_category_returns_404

verified

REQ_INTEROP_072

TEST_TestConfigKeyAppliesUnmanifestedPolicy_test_health_reports_hybrid_mode

test_health_reports_hybrid_mode

verified

REQ_INTEROP_003

TEST_TestConfigKeyAppliesUnmanifestedPolicy_test_late_unmanifested_node_never_enters_the_entity_tree

test_late_unmanifested_node_never_enters_the_entity_tree

verified

REQ_INTEROP_003

TEST_TestConfigKeyAppliesUnmanifestedPolicy_test_manifest_declared_nodes_are_linked

test_manifest_declared_nodes_are_linked

verified

REQ_INTEROP_003

TEST_TestConfigurationApi_test_01_list_configurations

test_01_list_configurations

verified

REQ_INTEROP_048

TEST_TestConfigurationApi_test_02_get_configuration

test_02_get_configuration

verified

REQ_INTEROP_049

TEST_TestConfigurationApi_test_03_set_configuration

test_03_set_configuration

verified

REQ_INTEROP_050

TEST_TestConfigurationApi_test_04_delete_configuration_resets_to_default

test_04_delete_configuration_resets_to_default

verified

REQ_INTEROP_052

TEST_TestConfigurationApi_test_05_configurations_nonexistent_app

test_05_configurations_nonexistent_app

verified

REQ_INTEROP_048

TEST_TestConfigurationApi_test_06_configuration_nonexistent_parameter

test_06_configuration_nonexistent_parameter

verified

REQ_INTEROP_049

TEST_TestConfigurationApi_test_06b_every_verb_rejects_an_oversized_config_id

test_06b_every_verb_rejects_an_oversized_config_id

verified

REQ_INTEROP_050; REQ_INTEROP_052; REQ_INTEROP_049

TEST_TestConfigurationApi_test_07_set_configuration_missing_value

test_07_set_configuration_missing_value

verified

REQ_INTEROP_050

TEST_TestConfigurationApi_test_07b_set_configuration_unconvertible_value

test_07b_set_configuration_unconvertible_value

verified

REQ_INTEROP_050

TEST_TestConfigurationApi_test_08_root_endpoint_includes_configurations

test_08_root_endpoint_includes_configurations

verified

REQ_INTEROP_048

TEST_TestContainerAppEndpoint_test_all_apps_same_container

test_all_apps_same_container

verified

REQ_INTEROP_003

TEST_TestContainerAppEndpoint_test_container_id_reflects_the_namespace_mode

test_container_id_reflects_the_namespace_mode

verified

REQ_INTEROP_003

TEST_TestContainerAppEndpoint_test_cpu_quota_detected

test_cpu_quota_detected

verified

REQ_INTEROP_003

TEST_TestContainerAppEndpoint_test_memory_limit_detected

test_memory_limit_detected

verified

REQ_INTEROP_003

TEST_TestContainerAppEndpoint_test_returns_container_info

test_returns_container_info

verified

REQ_INTEROP_003

TEST_TestContainerAppEndpoint_test_runtime_is_docker

test_runtime_is_docker

verified

REQ_INTEROP_003

TEST_TestContainerCgroupLayouts_test_09_hidden_ids_group_by_mount_namespace

test_09_hidden_ids_group_by_mount_namespace

verified

REQ_INTEROP_003

TEST_TestContainerComponentEndpoint_test_containers_include_node_ids

test_containers_include_node_ids

verified

REQ_INTEROP_003

TEST_TestContainerComponentEndpoint_test_containers_include_runtime

test_containers_include_runtime

verified

REQ_INTEROP_003

TEST_TestContainerComponentEndpoint_test_returns_containers_aggregation

test_returns_containers_aggregation

verified

REQ_INTEROP_003

TEST_TestContainerErrorHandling_test_nonexistent_app_returns_404

test_nonexistent_app_returns_404

verified

REQ_INTEROP_003

TEST_TestContainerErrorHandling_test_nonexistent_component_returns_404

test_nonexistent_component_returns_404

verified

REQ_INTEROP_003

TEST_TestCrossEcuFanout_test_logs_include_peer_entries

test_logs_include_peer_entries

verified

REQ_INTEROP_061

TEST_TestCrossEcuFanout_test_logs_severity_filter_forwarded

test_logs_severity_filter_forwarded

verified

REQ_INTEROP_061

TEST_TestDaisyChainAggregation_test_primary_forwards_ecu_b_detail_one_hop

test_primary_forwards_ecu_b_detail_one_hop

verified

REQ_INTEROP_003

TEST_TestDaisyChainAggregation_test_primary_forwards_ecu_c_detail_two_hops

test_primary_forwards_ecu_c_detail_two_hops

verified

REQ_INTEROP_003

TEST_TestDaisyChainAggregation_test_primary_sees_all_ecus_as_subcomponents_of_robot_x

test_primary_sees_all_ecus_as_subcomponents_of_robot_x

verified

REQ_INTEROP_003

TEST_TestDaisyChainAggregation_test_primary_serves_robot_x_detail_locally_with_contributors

test_primary_serves_robot_x_detail_locally_with_contributors

verified

REQ_INTEROP_003

TEST_TestDataRead_test_app_data_body_door

test_app_data_body_door

verified

REQ_INTEROP_018

TEST_TestDataRead_test_app_data_chassis_brakes

test_app_data_chassis_brakes

verified

REQ_INTEROP_018

TEST_TestDataRead_test_app_data_powertrain_engine

test_app_data_powertrain_engine

verified

REQ_INTEROP_018

TEST_TestDataRead_test_app_data_structure

test_app_data_structure

verified

REQ_INTEROP_018

TEST_TestDataRead_test_app_no_topics

test_app_no_topics

verified

REQ_INTEROP_018

TEST_TestDataRead_test_app_nonexistent_error

test_app_nonexistent_error

verified

REQ_INTEROP_018

TEST_TestDataRead_test_component_nonexistent_topic_metadata_only

test_component_nonexistent_topic_metadata_only

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_data_structure

test_component_topic_data_structure

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_nonexistent_component_error

test_component_topic_nonexistent_component_error

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_pressure

test_component_topic_pressure

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_rpm

test_component_topic_rpm

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_temperature

test_component_topic_temperature

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_valid_names

test_component_topic_valid_names

verified

REQ_INTEROP_019

TEST_TestDataRead_test_component_topic_with_slashes

test_component_topic_with_slashes

verified

REQ_INTEROP_019

TEST_TestDataRead_test_list_function_data

test_list_function_data

verified

REQ_INTEROP_018

TEST_TestDataRead_test_list_function_data_invalid_id

test_list_function_data_invalid_id

verified

REQ_INTEROP_018

TEST_TestDataRead_test_list_function_data_nonexistent

test_list_function_data_nonexistent

verified

REQ_INTEROP_018

TEST_TestDataWrite_test_publish_brake_command

test_publish_brake_command

verified

REQ_INTEROP_020

TEST_TestDataWrite_test_publish_invalid_json_body

test_publish_invalid_json_body

verified

REQ_INTEROP_020

TEST_TestDataWrite_test_publish_nonexistent_component

test_publish_nonexistent_component

verified

REQ_INTEROP_020

TEST_TestDataWrite_test_publish_validation_invalid_type_format

test_publish_validation_invalid_type_format

verified

REQ_INTEROP_020

TEST_TestDataWrite_test_publish_validation_missing_data

test_publish_validation_missing_data

verified

REQ_INTEROP_020

TEST_TestDataWrite_test_publish_validation_missing_type

test_publish_validation_missing_type

verified

REQ_INTEROP_020

TEST_TestDeprecatedDiscoveryKeyIsAnAlias_test_entity_detail_documents_match_the_canonical_key

test_entity_detail_documents_match_the_canonical_key

verified

REQ_INTEROP_003

TEST_TestDeprecatedDiscoveryKeyIsAnAlias_test_entity_tree_matches_the_canonical_key

test_entity_tree_matches_the_canonical_key

verified

REQ_INTEROP_003

TEST_TestDeprecatedDiscoveryKeyIsAnAlias_test_health_reports_hybrid_mode

test_health_reports_hybrid_mode

verified

REQ_INTEROP_003

TEST_TestDeprecatedDiscoveryKeyIsAnAlias_test_late_unmanifested_node_never_enters_the_entity_tree

test_late_unmanifested_node_never_enters_the_entity_tree

verified

REQ_INTEROP_003

TEST_TestDocsEndpoint_test_apps_docs_returns_entity_collection_spec

test_apps_docs_returns_entity_collection_spec

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_areas_docs_returns_entity_collection_spec

test_areas_docs_returns_entity_collection_spec

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_components_docs_returns_entity_collection_spec

test_components_docs_returns_entity_collection_spec

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_data_collection_docs

test_data_collection_docs

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_logs_configuration_schema_field_names

test_logs_configuration_schema_field_names

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_nested_entity_docs_describes_nothing_rather_than_fabricating

test_nested_entity_docs_describes_nothing_rather_than_fabricating

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_nonexistent_entity_docs_returns_404

test_nonexistent_entity_docs_returns_404

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_nonexistent_path_docs_returns_404

test_nonexistent_path_docs_returns_404

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_operations_collection_docs

test_operations_collection_docs

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_root_docs_returns_openapi_spec

test_root_docs_returns_openapi_spec

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_spec_contains_components

test_spec_contains_components

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_spec_contains_server_info

test_spec_contains_server_info

verified

REQ_INTEROP_002

TEST_TestDocsEndpoint_test_specific_app_docs

test_specific_app_docs

verified

REQ_INTEROP_002

TEST_TestEntityFreezeFrame_test_plugin_entity_fault_carries_entity_values

test_plugin_entity_fault_carries_entity_values

verified

REQ_INTEROP_088

TEST_TestEntityFreezeFrame_test_ros_entity_fault_carries_own_topic_data

test_ros_entity_fault_carries_own_topic_data

verified

REQ_INTEROP_088

TEST_TestEntityFreezeFrame_test_route_only_plugin_disconnected_entity_carries_last_known_values

test_route_only_plugin_disconnected_entity_carries_last_known_values

verified

REQ_INTEROP_088

TEST_TestEntityFreezeFrame_test_route_only_plugin_fault_carries_entity_values

test_route_only_plugin_fault_carries_entity_values

verified

REQ_INTEROP_088

TEST_TestEntityListing_test_area_components_nonexistent_error

test_area_components_nonexistent_error

verified

REQ_INTEROP_006

TEST_TestEntityListing_test_function_detail_accessible

test_function_detail_accessible

verified

REQ_INTEROP_003

TEST_TestEntityListing_test_invalid_app_id_special_chars

test_invalid_app_id_special_chars

verified

REQ_INTEROP_018

TEST_TestEntityListing_test_invalid_area_id_special_chars

test_invalid_area_id_special_chars

verified

REQ_INTEROP_006

TEST_TestEntityListing_test_invalid_ids_with_special_chars

test_invalid_ids_with_special_chars

verified

REQ_INTEROP_018

TEST_TestEntityListing_test_list_areas_empty_in_runtime_mode

test_list_areas_empty_in_runtime_mode

verified

REQ_INTEROP_003

TEST_TestEntityListing_test_list_components

test_list_components

verified

REQ_INTEROP_003

TEST_TestEntityListing_test_list_functions

test_list_functions

verified

REQ_INTEROP_003

TEST_TestEntityListing_test_valid_ids_with_underscores

test_valid_ids_with_underscores

verified

REQ_INTEROP_018

TEST_TestEntityModelRuntime_test_app_is_located_on_endpoint

test_app_is_located_on_endpoint

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_apps_linked_to_default_component

test_apps_linked_to_default_component

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_areas_empty_in_runtime_mode

test_areas_empty_in_runtime_mode

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_default_component_detail

test_default_component_detail

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_default_component_from_host

test_default_component_from_host

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_function_detail_shows_namespace_source

test_function_detail_shows_namespace_source

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_function_hosts_apps

test_function_hosts_apps

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_multiple_apps_same_component

test_multiple_apps_same_component

verified

REQ_INTEROP_003

TEST_TestEntityModelRuntime_test_namespaces_create_functions

test_namespaces_create_functions

verified

REQ_INTEROP_003

TEST_TestEntityRouting_test_app_routes_work_with_app_id

test_app_routes_work_with_app_id

verified

REQ_INTEROP_003

TEST_TestEntityRouting_test_component_route_rejects_app_id_configurations

test_component_route_rejects_app_id_configurations

verified

REQ_INTEROP_003

TEST_TestEntityRouting_test_component_route_rejects_app_id_data

test_component_route_rejects_app_id_data

verified

REQ_INTEROP_003

TEST_TestEntityRouting_test_component_route_rejects_app_id_faults

test_component_route_rejects_app_id_faults

verified

REQ_INTEROP_003

TEST_TestEntityRouting_test_component_route_rejects_app_id_operations

test_component_route_rejects_app_id_operations

verified

REQ_INTEROP_003

TEST_TestExternalAppFaultRollup_test_external_app_bulk_data_uris_serve_the_captured_bag

test_external_app_bulk_data_uris_serve_the_captured_bag

verified

REQ_INTEROP_072

TEST_TestExternalAppFaultRollup_test_external_app_fault_appears_on_every_rollup

test_external_app_fault_appears_on_every_rollup

verified

REQ_INTEROP_012

TEST_TestExternalComponentFaultRollup_test_external_component_owns_faults_on_every_rollup

test_external_component_owns_faults_on_every_rollup

verified

REQ_INTEROP_012

TEST_TestFaultManagerIntegration_test_16_snapshot_capture_on_fault_confirmation

test_16_snapshot_capture_on_fault_confirmation

verified

REQ_INTEROP_088

TEST_TestFaultManagerIntegration_test_17_get_snapshots_nonexistent_fault

test_17_get_snapshots_nonexistent_fault

verified

REQ_INTEROP_088

TEST_TestFaultManagerIntegration_test_18_get_snapshots_empty_fault_code

test_18_get_snapshots_empty_fault_code

verified

REQ_INTEROP_088

TEST_TestFaultManagerIntegration_test_19_snapshot_with_topic_filter

test_19_snapshot_with_topic_filter

verified

REQ_INTEROP_088

TEST_TestFaultManagerIntegration_test_20_snapshot_config_loads_patterns

test_20_snapshot_config_loads_patterns

verified

REQ_INTEROP_088

TEST_TestFaultsApi_test_a_refusal_from_the_fault_manager_is_not_a_server_error

test_a_refusal_from_the_fault_manager_is_not_a_server_error

verified

REQ_INTEROP_013; REQ_INTEROP_015

TEST_TestFaultsApi_test_both_verbs_reject_an_oversized_fault_code

test_both_verbs_reject_an_oversized_fault_code

verified

REQ_INTEROP_013; REQ_INTEROP_015

TEST_TestFaultsApi_test_both_verbs_serve_a_fault_code_up_to_the_published_bound

test_both_verbs_serve_a_fault_code_up_to_the_published_bound

verified

REQ_INTEROP_013; REQ_INTEROP_015

TEST_TestFaultsApi_test_faults_nonexistent_component

test_faults_nonexistent_component

verified

REQ_INTEROP_012

TEST_TestFaultsApi_test_get_nonexistent_fault

test_get_nonexistent_fault

verified

REQ_INTEROP_013

TEST_TestFaultsApi_test_list_faults_response_structure

test_list_faults_response_structure

verified

REQ_INTEROP_012

TEST_TestFaultsApi_test_root_endpoint_includes_faults

test_root_endpoint_includes_faults

verified

REQ_INTEROP_012

TEST_TestFaultsScopeIsolation_test_clear_fault_returns_404_on_unrelated_component

test_clear_fault_returns_404_on_unrelated_component

verified

REQ_INTEROP_015

TEST_TestFaultsScopeIsolation_test_get_fault_returns_200_on_owning_component

test_get_fault_returns_200_on_owning_component

verified

REQ_INTEROP_013

TEST_TestFaultsScopeIsolation_test_get_fault_returns_404_on_unrelated_component

test_get_fault_returns_404_on_unrelated_component

verified

REQ_INTEROP_013

TEST_TestFaultsScopeIsolation_test_zzz_clear_fault_returns_204_on_owning_component

test_zzz_clear_fault_returns_204_on_owning_component

verified

REQ_INTEROP_015

TEST_TestFlatEntityTree_test_app_accessible_without_areas

test_app_accessible_without_areas

verified

REQ_INTEROP_003

TEST_TestFlatEntityTree_test_apps_count

test_apps_count

verified

REQ_INTEROP_003

TEST_TestFlatEntityTree_test_areas_empty

test_areas_empty

verified

REQ_INTEROP_003

TEST_TestFlatEntityTree_test_components_count

test_components_count

verified

REQ_INTEROP_003

TEST_TestFlatEntityTree_test_functions_count

test_functions_count

verified

REQ_INTEROP_003

TEST_TestFlatEntityTree_test_subcomponents_count

test_subcomponents_count

verified

REQ_INTEROP_003

TEST_TestGatewayNode_test_app_is_located_on_endpoint

test_app_is_located_on_endpoint

verified

REQ_INTEROP_105

TEST_TestGatewayNode_test_area_contains_nonexistent

test_area_contains_nonexistent

verified

REQ_INTEROP_006

TEST_TestGatewayNode_test_component_hosts_nonexistent

test_component_hosts_nonexistent

verified

REQ_INTEROP_007

TEST_TestGatewayNode_test_execution_update_execution_not_found

test_execution_update_execution_not_found

verified

REQ_INTEROP_038

TEST_TestGatewayNode_test_execution_update_invalid_component_id

test_execution_update_invalid_component_id

verified

REQ_INTEROP_038

TEST_TestGatewayNode_test_execution_update_missing_capability

test_execution_update_missing_capability

verified

REQ_INTEROP_038

TEST_TestGatewayNode_test_execution_update_unsupported_capability

test_execution_update_unsupported_capability

verified

REQ_INTEROP_038

TEST_TestGatewayNode_test_list_areas_endpoint

test_list_areas_endpoint

verified

REQ_INTEROP_003

TEST_TestGatewayNode_test_list_components_endpoint

test_list_components_endpoint

verified

REQ_INTEROP_003

TEST_TestGatewayNode_test_root_endpoint

test_root_endpoint

verified

REQ_INTEROP_010

TEST_TestGatewayNode_test_version_info_endpoint

test_version_info_endpoint

verified

REQ_INTEROP_001

TEST_TestGraphProviderGreenwave_test_01_metrics_arrive_edge_becomes_active

test_01_metrics_arrive_edge_becomes_active

verified

REQ_INTEROP_003

TEST_TestGraphProviderGreenwave_test_02_uncovered_topic_stays_pending_graph_stays_healthy

test_02_uncovered_topic_stays_pending_graph_stays_healthy

verified

REQ_INTEROP_003

TEST_TestGraphProviderGreenwave_test_03_degradation_is_real

test_03_degradation_is_real

verified

REQ_INTEROP_003

TEST_TestGraphProviderGreenwave_test_04_provenance_is_greenwave_node

test_04_provenance_is_greenwave_node

verified

REQ_INTEROP_003

TEST_TestGraphProviderScoping_test_01_function_scoping_no_cross_contamination

test_01_function_scoping_no_cross_contamination

verified

REQ_INTEROP_003

TEST_TestGraphProviderScoping_test_02_empty_function_returns_valid_empty_document

test_02_empty_function_returns_valid_empty_document

verified

REQ_INTEROP_003

TEST_TestGraphProviderScoping_test_03_system_topics_never_appear_as_edges

test_03_system_topics_never_appear_as_edges

verified

REQ_INTEROP_003

TEST_TestGraphProviderScoping_test_04_nitros_segment_topic_survives_filtering

test_04_nitros_segment_topic_survives_filtering

verified

REQ_INTEROP_003

TEST_TestGraphProviderSse_test_01_sse_stream_carries_graph_document_and_pending_becomes_active

test_01_sse_stream_carries_graph_document_and_pending_becomes_active

verified

REQ_INTEROP_003

TEST_TestGraphProviderSse_test_02_delete_subscription_stops_stream_and_removes_it

test_02_delete_subscription_stops_stream_and_removes_it

verified

REQ_INTEROP_003

TEST_TestGraphProviderStale_test_01_baseline_edge_becomes_active

test_01_baseline_edge_becomes_active

verified

REQ_INTEROP_003

TEST_TestGraphProviderStale_test_02_publisher_goes_silent_edge_becomes_stale

test_02_publisher_goes_silent_edge_becomes_stale

verified

REQ_INTEROP_003

TEST_TestGraphProviderStale_test_03_publisher_resumes_edge_recovers_to_active

test_03_publisher_resumes_edge_recovers_to_active

verified

REQ_INTEROP_003

TEST_TestHateoas_test_app_detail_has_capability_uris

test_app_detail_has_capability_uris

verified

REQ_INTEROP_003

TEST_TestHateoas_test_apps_list_has_href

test_apps_list_has_href

verified

REQ_INTEROP_003

TEST_TestHateoas_test_area_detail_has_capability_uris

test_area_detail_has_capability_uris

verified

REQ_INTEROP_003

TEST_TestHateoas_test_areas_list_has_href

test_areas_list_has_href

verified

REQ_INTEROP_003

TEST_TestHateoas_test_belongs_to_app_on_area_less_component_returns_empty

test_belongs_to_app_on_area_less_component_returns_empty

verified

REQ_INTEROP_106

TEST_TestHateoas_test_belongs_to_apps_nonexistent

test_belongs_to_apps_nonexistent

verified

REQ_INTEROP_106

TEST_TestHateoas_test_belongs_to_apps_returns_parent_area

test_belongs_to_apps_returns_parent_area

verified

REQ_INTEROP_106

TEST_TestHateoas_test_belongs_to_standalone_app_returns_empty

test_belongs_to_standalone_app_returns_empty

verified

REQ_INTEROP_106

TEST_TestHateoas_test_component_detail_has_capability_uris

test_component_detail_has_capability_uris

verified

REQ_INTEROP_003

TEST_TestHateoas_test_components_list_has_href

test_components_list_has_href

verified

REQ_INTEROP_003

TEST_TestHateoas_test_contains_list_has_href

test_contains_list_has_href

verified

REQ_INTEROP_006

TEST_TestHateoas_test_depends_on_apps_has_href

test_depends_on_apps_has_href

verified

REQ_INTEROP_009

TEST_TestHateoas_test_depends_on_apps_nonexistent

test_depends_on_apps_nonexistent

verified

REQ_INTEROP_009

TEST_TestHateoas_test_depends_on_components_has_href

test_depends_on_components_has_href

verified

REQ_INTEROP_008

TEST_TestHateoas_test_function_detail_has_capability_uris

test_function_detail_has_capability_uris

verified

REQ_INTEROP_003

TEST_TestHateoas_test_functions_list_has_href

test_functions_list_has_href

verified

REQ_INTEROP_003

TEST_TestHateoas_test_hosts_list_has_href

test_hosts_list_has_href

verified

REQ_INTEROP_007

TEST_TestHateoas_test_is_located_on_apps_has_href

test_is_located_on_apps_has_href

verified

REQ_INTEROP_105

TEST_TestHateoas_test_is_located_on_apps_nonexistent

test_is_located_on_apps_nonexistent

verified

REQ_INTEROP_105

TEST_TestHateoas_test_is_located_on_standalone_app_returns_empty

test_is_located_on_standalone_app_returns_empty

verified

REQ_INTEROP_105

TEST_TestHateoas_test_subareas_list_has_href

test_subareas_list_has_href

verified

REQ_INTEROP_004

TEST_TestHateoas_test_subcomponents_list_has_href

test_subcomponents_list_has_href

verified

REQ_INTEROP_005

TEST_TestHateoas_test_x_medkit_extension_in_list_responses

test_x_medkit_extension_in_list_responses

verified

REQ_INTEROP_003

TEST_TestHealth_test_docs_endpoint

test_docs_endpoint

verified

REQ_INTEROP_002

TEST_TestHealth_test_docs_spec_completeness

test_docs_spec_completeness

verified

REQ_INTEROP_002

TEST_TestHealth_test_endpoint_list_names_each_route_once

test_endpoint_list_names_each_route_once

verified

REQ_INTEROP_010

TEST_TestHealth_test_health_endpoint_returns_200

test_health_endpoint_returns_200

verified

REQ_INTEROP_010

TEST_TestHealth_test_root_endpoint_returns_api_info

test_root_endpoint_returns_api_info

verified

REQ_INTEROP_010

TEST_TestHealth_test_root_includes_apps_endpoints

test_root_includes_apps_endpoints

verified

REQ_INTEROP_010

TEST_TestHealth_test_version_endpoint

test_version_endpoint

verified

REQ_INTEROP_001

TEST_TestHybridSuppression_test_exact_app_count

test_exact_app_count

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_exact_area_count

test_exact_area_count

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_exact_component_count

test_exact_component_count

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_exact_function_count

test_exact_function_count

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_health_shows_hybrid_mode

test_health_shows_hybrid_mode

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_manifest_apps_are_online

test_manifest_apps_are_online

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_no_root_or_synthetic_areas

test_no_root_or_synthetic_areas

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_no_underscored_app_duplicates

test_no_underscored_app_duplicates

verified

REQ_INTEROP_003

TEST_TestHybridSuppression_test_no_underscored_component_duplicates

test_no_underscored_component_duplicates

verified

REQ_INTEROP_003

TEST_TestLeafCollisionAggregation_test_health_surfaces_leaf_collision_with_both_peers

test_health_surfaces_leaf_collision_with_both_peers

verified

REQ_INTEROP_003

TEST_TestLeafCollisionAggregation_test_shared_leaf_resolves_to_exactly_one_peer

test_shared_leaf_resolves_to_exactly_one_peer

verified

REQ_INTEROP_003

TEST_TestLifecycleStatus_test_app_status_nonexistent_returns_404

test_app_status_nonexistent_returns_404

verified

REQ_INTEROP_076

TEST_TestLifecycleStatus_test_app_status_ready

test_app_status_ready

verified

REQ_INTEROP_076

TEST_TestLifecycleStatus_test_app_status_restart_returns_501

test_app_status_restart_returns_501

verified

REQ_INTEROP_076

TEST_TestLifecycleStatus_test_app_status_structure

test_app_status_structure

verified

REQ_INTEROP_076

TEST_TestLifecycleStatus_test_component_status_ready

test_component_status_ready

verified

REQ_INTEROP_076

TEST_TestLifecycleStatus_test_managed_lifecycle_activated_is_ready

test_managed_lifecycle_activated_is_ready

verified

REQ_INTEROP_076

TEST_TestLifecycleStatus_test_managed_lifecycle_unconfigured_is_not_ready

test_managed_lifecycle_unconfigured_is_not_ready

verified

REQ_INTEROP_076

TEST_TestLocking_test_acquire_lock_location_survives_a_trailing_slash

test_acquire_lock_location_survives_a_trailing_slash

verified

REQ_INTEROP_100

TEST_TestLocking_test_acquire_lock_on_app

test_acquire_lock_on_app

verified

REQ_INTEROP_100

TEST_TestLocking_test_acquire_lock_with_scopes

test_acquire_lock_with_scopes

verified

REQ_INTEROP_100

TEST_TestLocking_test_acquire_without_client_id_returns_400

test_acquire_without_client_id_returns_400

verified

REQ_INTEROP_100

TEST_TestLocking_test_acquire_without_expiration_returns_400

test_acquire_without_expiration_returns_400

verified

REQ_INTEROP_100

TEST_TestLocking_test_already_locked_returns_409

test_already_locked_returns_409

verified

REQ_INTEROP_100

TEST_TestLocking_test_break_lock

test_break_lock

verified

REQ_INTEROP_100

TEST_TestLocking_test_extend_lock

test_extend_lock

verified

REQ_INTEROP_103

TEST_TestLocking_test_get_lock_details

test_get_lock_details

verified

REQ_INTEROP_102

TEST_TestLocking_test_list_locks

test_list_locks

verified

REQ_INTEROP_101

TEST_TestLocking_test_list_locks_empty

test_list_locks_empty

verified

REQ_INTEROP_101

TEST_TestLocking_test_lock_blocks_other_client

test_lock_blocks_other_client

verified

REQ_INTEROP_100

TEST_TestLocking_test_lock_expires_automatically

test_lock_expires_automatically

verified

REQ_INTEROP_100

TEST_TestLocking_test_nonexistent_entity_returns_404

test_nonexistent_entity_returns_404

verified

REQ_INTEROP_100

TEST_TestLocking_test_owned_field_per_client

test_owned_field_per_client

verified

REQ_INTEROP_101

TEST_TestLocking_test_release_lock

test_release_lock

verified

REQ_INTEROP_104

TEST_TestLocking_test_release_not_owner_returns_403

test_release_not_owner_returns_403

verified

REQ_INTEROP_104

TEST_TestLocking_test_scoped_lock_allows_other_collections

test_scoped_lock_allows_other_collections

verified

REQ_INTEROP_100

TEST_TestLockingFaults_test_global_clear_skips_locked_entity_faults

test_global_clear_skips_locked_entity_faults

verified

REQ_INTEROP_100

TEST_TestLockingPropagation_test_component_lock_allows_owner_on_child

test_component_lock_allows_owner_on_child

verified

REQ_INTEROP_100

TEST_TestLockingPropagation_test_component_lock_blocks_child_app

test_component_lock_blocks_child_app

verified

REQ_INTEROP_100

TEST_TestMultiCollectionSubscriptions_test_configurations_subscription_create

test_configurations_subscription_create

verified

REQ_INTEROP_089

TEST_TestMultiCollectionSubscriptions_test_configurations_subscription_streams_whole_collection

test_configurations_subscription_streams_whole_collection

verified

REQ_INTEROP_090; REQ_INTEROP_089

TEST_TestMultiCollectionSubscriptions_test_data_subscription_create

test_data_subscription_create

verified

REQ_INTEROP_089

TEST_TestMultiCollectionSubscriptions_test_delete_subscription

test_delete_subscription

verified

REQ_INTEROP_028

TEST_TestMultiCollectionSubscriptions_test_faults_subscription_create

test_faults_subscription_create

verified

REQ_INTEROP_089

TEST_TestMultiCollectionSubscriptions_test_get_subscription

test_get_subscription

verified

REQ_INTEROP_026

TEST_TestMultiCollectionSubscriptions_test_list_subscriptions

test_list_subscriptions

verified

REQ_INTEROP_025

TEST_TestMultiCollectionSubscriptions_test_logs_subscription_create

test_logs_subscription_create

verified

REQ_INTEROP_089

TEST_TestMultiCollectionSubscriptions_test_logs_subscription_sse_stream

test_logs_subscription_sse_stream

verified

REQ_INTEROP_090; REQ_INTEROP_089

TEST_TestMultiCollectionSubscriptions_test_update_subscription_interval

test_update_subscription_interval

verified

REQ_INTEROP_027

TEST_TestOpenApiCallability_test_all_endpoints_accept_spec_requests

test_all_endpoints_accept_spec_requests

verified

REQ_INTEROP_002

TEST_TestOpenApiCallability_test_live_entity_responses_conform_to_spec

test_live_entity_responses_conform_to_spec

verified

REQ_INTEROP_002

TEST_TestOpenApiCallability_test_x_medkit_sub_schemas_present_in_spec

test_x_medkit_sub_schemas_present_in_spec

verified

REQ_INTEROP_002

TEST_TestOpenApiContract_test_document_is_openapi_31

test_document_is_openapi_31

verified

REQ_INTEROP_002

TEST_TestOpenApiContract_test_entity_id_parameters_follow_the_projection_naming

test_entity_id_parameters_follow_the_projection_naming

verified

REQ_INTEROP_002

TEST_TestOpenApiContract_test_every_advertised_collection_is_served

test_every_advertised_collection_is_served

verified

REQ_INTEROP_002

TEST_TestOpenApiResponseDrift_test_configurations_payload_uses_nested_x_medkit

test_configurations_payload_uses_nested_x_medkit

verified

REQ_INTEROP_002

TEST_TestOpenApiResponseDrift_test_get_responses_match_declared_schema

test_get_responses_match_declared_schema

verified

REQ_INTEROP_002

TEST_TestOpenApiResponseDrift_test_update_routes_answer_with_the_declared_status

test_update_routes_answer_with_the_declared_status

verified

REQ_INTEROP_002

TEST_TestOpenApiResponseDrift_test_update_status_payload_uses_nested_x_medkit

test_update_status_payload_uses_nested_x_medkit

verified

REQ_INTEROP_002

TEST_TestOperationsApi_test_async_execution_location_resolves

test_async_execution_location_resolves

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_cancel_nonexistent_execution

test_cancel_nonexistent_execution

verified

REQ_INTEROP_039

TEST_TestOperationsApi_test_create_execution_for_service

test_create_execution_for_service

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_execution_is_scoped_to_the_entity_that_started_it

test_execution_is_scoped_to_the_entity_that_started_it

verified

REQ_INTEROP_036

TEST_TestOperationsApi_test_execution_location_survives_a_trailing_slash

test_execution_location_survives_a_trailing_slash

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_executions_list_on_a_function

test_executions_list_on_a_function

verified

REQ_INTEROP_036

TEST_TestOperationsApi_test_get_operation_details_for_apps

test_get_operation_details_for_apps

verified

REQ_INTEROP_034

TEST_TestOperationsApi_test_get_operation_details_for_service

test_get_operation_details_for_service

verified

REQ_INTEROP_034

TEST_TestOperationsApi_test_get_operation_not_found

test_get_operation_not_found

verified

REQ_INTEROP_034

TEST_TestOperationsApi_test_list_executions_returns_items_array

test_list_executions_returns_items_array

verified

REQ_INTEROP_036

TEST_TestOperationsApi_test_list_operations

test_list_operations

verified

REQ_INTEROP_033

TEST_TestOperationsApi_test_operation_call_calibrate_service

test_operation_call_calibrate_service

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_operation_call_invalid_entity_id

test_operation_call_invalid_entity_id

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_operation_call_invalid_operation_name

test_operation_call_invalid_operation_name

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_operation_call_nonexistent_entity

test_operation_call_nonexistent_entity

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_operation_call_nonexistent_operation

test_operation_call_nonexistent_operation

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_operation_call_with_invalid_json

test_operation_call_with_invalid_json

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_operations_listed_in_app_discovery

test_operations_listed_in_app_discovery

verified

REQ_INTEROP_033

TEST_TestOperationsApi_test_rejected_goal_names_the_entity_field_the_caller_used

test_rejected_goal_names_the_entity_field_the_caller_used

verified

REQ_INTEROP_035

TEST_TestOperationsApi_test_root_endpoint_includes_operations

test_root_endpoint_includes_operations

verified

REQ_INTEROP_033

TEST_TestRosbagHistoryDownload_test_01_two_occurrences_leave_two_downloadable_recordings

test_01_two_occurrences_leave_two_downloadable_recordings

verified

REQ_INTEROP_072

TEST_TestRosbagHistoryDownload_test_02_every_recording_is_dated_by_its_own_capture

test_02_every_recording_is_dated_by_its_own_capture

verified

REQ_INTEROP_072

TEST_TestRosbagHistoryDownload_test_03_the_fault_code_url_still_serves_the_newest_recording

test_03_the_fault_code_url_still_serves_the_newest_recording

verified

REQ_INTEROP_072

TEST_TestRosbagHistoryDownload_test_04_a_shared_burst_recording_is_listed_once

test_04_a_shared_burst_recording_is_listed_once

verified

REQ_INTEROP_072

TEST_TestScenarioActionLifecycle_test_01_create_action_execution_and_poll_to_completion

test_01_create_action_execution_and_poll_to_completion

verified

REQ_INTEROP_022

TEST_TestScenarioActionLifecycle_test_02_cancel_action_execution

test_02_cancel_action_execution

verified

REQ_INTEROP_022

TEST_TestScenarioActionLifecycle_test_03_service_execution_returns_immediately

test_03_service_execution_returns_immediately

verified

REQ_INTEROP_035

TEST_TestScenarioActionLifecycle_test_04_execution_appears_in_list

test_04_execution_appears_in_list

verified

REQ_INTEROP_022

TEST_TestScenarioActionLifecycle_test_06_get_operation_details

test_06_get_operation_details

verified

REQ_INTEROP_034

TEST_TestScenarioActionLifecycle_test_07_get_execution_status

test_07_get_execution_status

verified

REQ_INTEROP_037

TEST_TestScenarioActionLifecycle_test_08_update_execution_not_implemented

test_08_update_execution_not_implemented

verified

REQ_INTEROP_038

TEST_TestScenarioBulkDataDownload_test_01_download_rosbag_success

test_01_download_rosbag_success

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataDownload_test_02_download_wrong_entity_returns_404

test_02_download_wrong_entity_returns_404

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataDownload_test_03_verify_complete_rosbag_content

test_03_verify_complete_rosbag_content

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataDownload_test_04_rosbag_media_type_is_named_in_the_document

test_04_rosbag_media_type_is_named_in_the_document

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataUpload_test_01_upload_small_file

test_01_upload_small_file

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_02_upload_returns_location_header

test_02_upload_returns_location_header

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_03_upload_with_description

test_03_upload_with_description

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_04_upload_with_metadata

test_04_upload_with_metadata

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_05_upload_missing_file_field

test_05_upload_missing_file_field

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_06_upload_unknown_category

test_06_upload_unknown_category

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_07_upload_rosbags_rejected

test_07_upload_rosbags_rejected

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_08_upload_nonexistent_entity

test_08_upload_nonexistent_entity

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_09_upload_to_areas_405

test_09_upload_to_areas_405

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_10_upload_to_functions_405

test_10_upload_to_functions_405

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_11_delete_uploaded_item

test_11_delete_uploaded_item

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_12_delete_nonexistent_item

test_12_delete_nonexistent_item

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_13_delete_rosbags_rejected

test_13_delete_rosbags_rejected

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_14_delete_to_areas_405

test_14_delete_to_areas_405

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_15_list_categories_includes_configured

test_15_list_categories_includes_configured

verified

REQ_INTEROP_071

TEST_TestScenarioBulkDataUpload_test_16_list_descriptors_after_upload

test_16_list_descriptors_after_upload

verified

REQ_INTEROP_072

TEST_TestScenarioBulkDataUpload_test_17_download_uploaded_file

test_17_download_uploaded_file

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataUpload_test_18_download_nonexistent_returns_404

test_18_download_nonexistent_returns_404

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataUpload_test_19_list_empty_after_delete

test_19_list_empty_after_delete

verified

REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_20_full_crud_cycle

test_20_full_crud_cycle

verified

REQ_INTEROP_071; REQ_INTEROP_074

TEST_TestScenarioBulkDataUpload_test_21_download_serves_a_media_type_the_document_declares

test_21_download_serves_a_media_type_the_document_declares

verified

REQ_INTEROP_073

TEST_TestScenarioBulkDataUpload_test_22_multi_range_download_serves_the_declared_206_media_type

test_22_multi_range_download_serves_the_declared_206_media_type

verified

REQ_INTEROP_073

TEST_TestScenarioConfigManagement_test_01_list_configurations

test_01_list_configurations

verified

REQ_INTEROP_048

TEST_TestScenarioConfigManagement_test_02_get_configuration_value

test_02_get_configuration_value

verified

REQ_INTEROP_049

TEST_TestScenarioConfigManagement_test_03_set_and_verify_configuration

test_03_set_and_verify_configuration

verified

REQ_INTEROP_050

TEST_TestScenarioConfigManagement_test_04_reset_all_configurations

test_04_reset_all_configurations

verified

REQ_INTEROP_051

TEST_TestScenarioConfigManagement_test_05_reset_single_configuration

test_05_reset_single_configuration

verified

REQ_INTEROP_052

TEST_TestScenarioDataPublishVerify_test_01_read_sensor_data

test_01_read_sensor_data

verified

REQ_INTEROP_018

TEST_TestScenarioDataPublishVerify_test_02_publish_command_to_actuator

test_02_publish_command_to_actuator

verified

REQ_INTEROP_020

TEST_TestScenarioDataPublishVerify_test_03_read_actuator_feedback

test_03_read_actuator_feedback

verified

REQ_INTEROP_018

TEST_TestScenarioDiscoveryHybrid_test_01_areas_from_manifest

test_01_areas_from_manifest

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_02_area_with_description

test_02_area_with_description

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_03_area_subareas_hierarchy

test_03_area_subareas_hierarchy

verified

REQ_INTEROP_004

TEST_TestScenarioDiscoveryHybrid_test_04_nested_subareas

test_04_nested_subareas

verified

REQ_INTEROP_004

TEST_TestScenarioDiscoveryHybrid_test_05_components_from_manifest

test_05_components_from_manifest

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_06_component_type_preserved

test_06_component_type_preserved

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_07_component_area_relationship

test_07_component_area_relationship

verified

REQ_INTEROP_006

TEST_TestScenarioDiscoveryHybrid_test_08_component_subcomponents

test_08_component_subcomponents

verified

REQ_INTEROP_005

TEST_TestScenarioDiscoveryHybrid_test_09_component_subcomponents_not_found

test_09_component_subcomponents_not_found

verified

REQ_INTEROP_005

TEST_TestScenarioDiscoveryHybrid_test_10_component_depends_on_returns_items

test_10_component_depends_on_returns_items

verified

REQ_INTEROP_008

TEST_TestScenarioDiscoveryHybrid_test_11_component_depends_on_empty

test_11_component_depends_on_empty

verified

REQ_INTEROP_008

TEST_TestScenarioDiscoveryHybrid_test_12_component_depends_on_not_found

test_12_component_depends_on_not_found

verified

REQ_INTEROP_008

TEST_TestScenarioDiscoveryHybrid_test_13_component_capabilities_includes_depends_on_link

test_13_component_capabilities_includes_depends_on_link

verified

REQ_INTEROP_008

TEST_TestScenarioDiscoveryHybrid_test_14_apps_from_manifest

test_14_apps_from_manifest

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_15_app_online_with_runtime_node

test_15_app_online_with_runtime_node

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_19_app_depends_on_relationship

test_19_app_depends_on_relationship

verified

REQ_INTEROP_009

TEST_TestScenarioDiscoveryHybrid_test_20_functions_from_manifest

test_20_functions_from_manifest

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryHybrid_test_21_function_hosts_relationship

test_21_function_hosts_relationship

verified

REQ_INTEROP_007

TEST_TestScenarioDiscoveryHybrid_test_24_function_with_tags

test_24_function_with_tags

verified

REQ_INTEROP_011

TEST_TestScenarioDiscoveryManifest_test_01_list_areas

test_01_list_areas

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_02_get_area_details

test_02_get_area_details

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_04_area_subareas

test_04_area_subareas

verified

REQ_INTEROP_004

TEST_TestScenarioDiscoveryManifest_test_05_area_components

test_05_area_components

verified

REQ_INTEROP_006

TEST_TestScenarioDiscoveryManifest_test_06_list_components

test_06_list_components

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_07_get_component_details

test_07_get_component_details

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_09_component_subcomponents

test_09_component_subcomponents

verified

REQ_INTEROP_005

TEST_TestScenarioDiscoveryManifest_test_10_component_subcomponents_not_found

test_10_component_subcomponents_not_found

verified

REQ_INTEROP_005

TEST_TestScenarioDiscoveryManifest_test_11_list_apps

test_11_list_apps

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_12_get_app_details

test_12_get_app_details

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_15_app_data_endpoint

test_15_app_data_endpoint

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_17_app_configurations_endpoint

test_17_app_configurations_endpoint

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_18_app_data_item_endpoint

test_18_app_data_item_endpoint

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_19_list_functions

test_19_list_functions

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_20_get_function_details

test_20_get_function_details

verified

REQ_INTEROP_003

TEST_TestScenarioDiscoveryManifest_test_22_function_hosts

test_22_function_hosts

verified

REQ_INTEROP_007

TEST_TestScenarioFaultInspection_test_01_fault_response_structure

test_01_fault_response_structure

verified

REQ_INTEROP_013

TEST_TestScenarioFaultInspection_test_02_fault_status_object_structure

test_02_fault_status_object_structure

verified

REQ_INTEROP_013

TEST_TestScenarioFaultInspection_test_03_fault_environment_data_structure

test_03_fault_environment_data_structure

verified

REQ_INTEROP_013

TEST_TestScenarioFaultInspection_test_04_fault_snapshot_freeze_frame

test_04_fault_snapshot_freeze_frame

verified

REQ_INTEROP_013

TEST_TestScenarioFaultInspection_test_05_fault_snapshot_rosbag_has_bulk_data_uri

test_05_fault_snapshot_rosbag_has_bulk_data_uri

verified

REQ_INTEROP_013

TEST_TestScenarioFaultInspection_test_06_fault_x_medkit_extensions

test_06_fault_x_medkit_extensions

verified

REQ_INTEROP_013

TEST_TestScenarioFaultLifecycle_test_01_wait_for_faults_to_appear

test_01_wait_for_faults_to_appear

verified

REQ_INTEROP_012

TEST_TestScenarioFaultLifecycle_test_02_delete_all_faults_for_component

test_02_delete_all_faults_for_component

verified

REQ_INTEROP_014

TEST_TestScenarioFaultLifecycle_test_03_delete_all_faults_for_app

test_03_delete_all_faults_for_app

verified

REQ_INTEROP_014

TEST_TestScenarioFaultLifecycle_test_04_delete_all_faults_nonexistent

test_04_delete_all_faults_nonexistent

verified

REQ_INTEROP_014

TEST_TestScenarioFaultLifecycle_test_05_delete_single_fault

test_05_delete_single_fault

verified

REQ_INTEROP_015

TEST_TestScenarioSubscriptions_test_01_create_subscription_returns_201_with_correct_schema

test_01_create_subscription_returns_201_with_correct_schema

verified

REQ_INTEROP_089

TEST_TestScenarioSubscriptions_test_02_list_subscriptions_returns_created_ones

test_02_list_subscriptions_returns_created_ones

verified

REQ_INTEROP_025

TEST_TestScenarioSubscriptions_test_03_get_single_subscription

test_03_get_single_subscription

verified

REQ_INTEROP_026

TEST_TestScenarioSubscriptions_test_04_update_subscription_interval

test_04_update_subscription_interval

verified

REQ_INTEROP_027

TEST_TestScenarioSubscriptions_test_05_update_subscription_duration

test_05_update_subscription_duration

verified

REQ_INTEROP_027

TEST_TestScenarioSubscriptions_test_06_delete_subscription_returns_204

test_06_delete_subscription_returns_204

verified

REQ_INTEROP_028

TEST_TestScenarioSubscriptions_test_07_empty_list_after_delete

test_07_empty_list_after_delete

verified

REQ_INTEROP_025

TEST_TestScenarioSubscriptions_test_10_sse_stream_returns_correct_headers

test_10_sse_stream_returns_correct_headers

verified

REQ_INTEROP_090

TEST_TestScenarioSubscriptions_test_11_sse_stream_delivers_periodic_data

test_11_sse_stream_delivers_periodic_data

verified

REQ_INTEROP_090

TEST_TestScenarioSubscriptions_test_12_sse_stream_closes_on_subscription_delete

test_12_sse_stream_closes_on_subscription_delete

verified

REQ_INTEROP_090; REQ_INTEROP_028

TEST_TestScenarioSubscriptions_test_20_create_with_invalid_interval_returns_400

test_20_create_with_invalid_interval_returns_400

verified

REQ_INTEROP_089

TEST_TestScenarioSubscriptions_test_21_create_with_zero_duration_returns_400

test_21_create_with_zero_duration_returns_400

verified

REQ_INTEROP_089

TEST_TestScenarioSubscriptions_test_22_create_with_unsupported_protocol_returns_400

test_22_create_with_unsupported_protocol_returns_400

verified

REQ_INTEROP_089

TEST_TestScenarioSubscriptions_test_23_create_with_invalid_resource_uri_returns_400

test_23_create_with_invalid_resource_uri_returns_400

verified

REQ_INTEROP_089

TEST_TestScenarioSubscriptions_test_24_get_nonexistent_subscription_returns_404

test_24_get_nonexistent_subscription_returns_404

verified

REQ_INTEROP_026

TEST_TestScenarioSubscriptions_test_25_delete_nonexistent_subscription_returns_404

test_25_delete_nonexistent_subscription_returns_404

verified

REQ_INTEROP_028

TEST_TestScenarioSubscriptions_test_26_update_nonexistent_subscription_returns_404

test_26_update_nonexistent_subscription_returns_404

verified

REQ_INTEROP_027

TEST_TestScenarioSubscriptions_test_27_create_for_nonexistent_entity_returns_404

test_27_create_for_nonexistent_entity_returns_404

verified

REQ_INTEROP_089

TEST_TestScenarioSubscriptions_test_28_sse_stream_for_nonexistent_subscription_returns_404

test_28_sse_stream_for_nonexistent_subscription_returns_404

verified

REQ_INTEROP_090

TEST_TestScenarioSubscriptions_test_30_cyclic_subscriptions_work_on_components

test_30_cyclic_subscriptions_work_on_components

verified

REQ_INTEROP_089; REQ_INTEROP_025

TEST_TestScriptsCRUD_test_01_list_scripts_empty

test_01_list_scripts_empty

verified

REQ_INTEROP_041

TEST_TestScriptsCRUD_test_01b_urls_name_the_collection_the_caller_addressed

test_01b_urls_name_the_collection_the_caller_addressed

verified

REQ_INTEROP_041

TEST_TestScriptsCRUD_test_01c_trailing_slash_location_still_resolves

test_01c_trailing_slash_location_still_resolves

verified

REQ_INTEROP_040

TEST_TestScriptsCRUD_test_02_upload_and_list

test_02_upload_and_list

verified

REQ_INTEROP_040

TEST_TestScriptsCRUD_test_03_get_script_metadata

test_03_get_script_metadata

verified

REQ_INTEROP_042

TEST_TestScriptsCRUD_test_04_get_nonexistent_returns_404

test_04_get_nonexistent_returns_404

verified

REQ_INTEROP_042

TEST_TestScriptsCRUD_test_05_delete_script

test_05_delete_script

verified

REQ_INTEROP_043

TEST_TestScriptsCRUD_test_06_delete_nonexistent_returns_404

test_06_delete_nonexistent_returns_404

verified

REQ_INTEROP_043

TEST_TestScriptsCRUD_test_07_upload_missing_file_field

test_07_upload_missing_file_field

verified

REQ_INTEROP_040

TEST_TestScriptsCRUD_test_09_upload_with_metadata

test_09_upload_with_metadata

verified

REQ_INTEROP_040

TEST_TestScriptsExecution_test_01_execute_python_script

test_01_execute_python_script

verified

REQ_INTEROP_044

TEST_TestScriptsExecution_test_02_execute_shell_script

test_02_execute_shell_script

verified

REQ_INTEROP_044

TEST_TestScriptsExecution_test_03_terminate_running_execution

test_03_terminate_running_execution

verified

REQ_INTEROP_047

TEST_TestScriptsExecution_test_06_get_nonexistent_execution

test_06_get_nonexistent_execution

verified

REQ_INTEROP_046

TEST_TestScriptsExecution_test_07_start_execution_missing_type

test_07_start_execution_missing_type

verified

REQ_INTEROP_044

TEST_TestScriptsExecution_test_08_start_execution_invalid_json

test_08_start_execution_invalid_json

verified

REQ_INTEROP_044

TEST_TestScriptsExecution_test_09_execution_has_timestamps

test_09_execution_has_timestamps

verified

REQ_INTEROP_046

TEST_TestScriptsExecution_test_10_bash_script_execution

test_10_bash_script_execution

verified

REQ_INTEROP_044

TEST_TestScriptsExecution_test_11_output_content_verified

test_11_output_content_verified

verified

REQ_INTEROP_046

TEST_TestScriptsExecution_test_12_parameters_via_stdin

test_12_parameters_via_stdin

verified

REQ_INTEROP_044

TEST_TestScriptsExecution_test_13_failed_script_execution

test_13_failed_script_execution

verified

REQ_INTEROP_046

TEST_TestScriptsExecution_test_14_full_lifecycle

test_14_full_lifecycle

verified

REQ_INTEROP_042; REQ_INTEROP_043; REQ_INTEROP_041; REQ_INTEROP_044; REQ_INTEROP_046; REQ_INTEROP_040

TEST_TestScriptsNotConfigured_test_01_list_scripts_returns_501

test_01_list_scripts_returns_501

verified

REQ_INTEROP_041

TEST_TestScriptsNotConfigured_test_02_upload_script_returns_501

test_02_upload_script_returns_501

verified

REQ_INTEROP_040

TEST_TestScriptsNotConfigured_test_03_get_script_returns_501

test_03_get_script_returns_501

verified

REQ_INTEROP_042

TEST_TestScriptsNotConfigured_test_04_delete_script_returns_501

test_04_delete_script_returns_501

verified

REQ_INTEROP_043

TEST_TestScriptsNotConfigured_test_05_start_execution_returns_501

test_05_start_execution_returns_501

verified

REQ_INTEROP_044

TEST_TestScriptsNotConfigured_test_06_get_execution_returns_501

test_06_get_execution_returns_501

verified

REQ_INTEROP_046

TEST_TestScriptsNotConfigured_test_07_control_execution_returns_501

test_07_control_execution_returns_501

verified

REQ_INTEROP_047

TEST_TestSnapshotsApi_test_root_endpoint_excludes_legacy_snapshots

test_root_endpoint_excludes_legacy_snapshots

verified

REQ_INTEROP_088

TEST_TestStandingFaultFreezeFrame_test_standing_fault_snapshot_contains_freeze_frame

test_standing_fault_snapshot_contains_freeze_frame

verified

REQ_INTEROP_088

TEST_TestSystemdAppEndpoint_test_returns_restart_count

test_returns_restart_count

verified

REQ_INTEROP_003

TEST_TestSystemdAppEndpoint_test_returns_unit_info

test_returns_unit_info

verified

REQ_INTEROP_003

TEST_TestSystemdAppEndpoint_test_returns_unit_type

test_returns_unit_type

verified

REQ_INTEROP_003

TEST_TestSystemdAppEndpoint_test_returns_watchdog_usec

test_returns_watchdog_usec

verified

REQ_INTEROP_003

TEST_TestSystemdComponentEndpoint_test_returns_units_aggregation

test_returns_units_aggregation

verified

REQ_INTEROP_003

TEST_TestSystemdComponentEndpoint_test_units_have_active_state

test_units_have_active_state

verified

REQ_INTEROP_003

TEST_TestSystemdComponentEndpoint_test_units_include_node_ids

test_units_include_node_ids

verified

REQ_INTEROP_003

TEST_TestSystemdErrorHandling_test_nonexistent_app_returns_404

test_nonexistent_app_returns_404

verified

REQ_INTEROP_003

TEST_TestSystemdErrorHandling_test_nonexistent_component_returns_404

test_nonexistent_component_returns_404

verified

REQ_INTEROP_003

TEST_TestTriggersData_test_01_create_trigger_returns_201_with_correct_schema

test_01_create_trigger_returns_201_with_correct_schema

verified

REQ_INTEROP_029

TEST_TestTriggersData_test_02_list_triggers_returns_created_trigger

test_02_list_triggers_returns_created_trigger

verified

REQ_INTEROP_030

TEST_TestTriggersData_test_03_get_single_trigger

test_03_get_single_trigger

verified

REQ_INTEROP_096

TEST_TestTriggersData_test_04_update_trigger_lifetime

test_04_update_trigger_lifetime

verified

REQ_INTEROP_031

TEST_TestTriggersData_test_05_delete_trigger_returns_204

test_05_delete_trigger_returns_204

verified

REQ_INTEROP_032

TEST_TestTriggersData_test_10_sse_stream_returns_correct_headers

test_10_sse_stream_returns_correct_headers

verified

REQ_INTEROP_097

TEST_TestTriggersData_test_11_sse_stream_delivers_data_events

test_11_sse_stream_delivers_data_events

verified

REQ_INTEROP_097

TEST_TestTriggersData_test_12_sse_stream_closes_on_trigger_delete

test_12_sse_stream_closes_on_trigger_delete

verified

REQ_INTEROP_032; REQ_INTEROP_097

TEST_TestTriggersData_test_27_events_for_nonexistent_trigger_returns_404

test_27_events_for_nonexistent_trigger_returns_404

verified

REQ_INTEROP_097

TEST_TestTriggersDisabled_test_08_spec_declares_the_gated_status

test_08_spec_declares_the_gated_status

verified

REQ_INTEROP_002

TEST_TestTriggersFaults_test_01_create_fault_trigger_returns_201

test_01_create_fault_trigger_returns_201

verified

REQ_INTEROP_029

TEST_TestTriggersFaults_test_02_list_fault_triggers

test_02_list_fault_triggers

verified

REQ_INTEROP_030

TEST_TestTriggersFaults_test_03_get_fault_trigger

test_03_get_fault_trigger

verified

REQ_INTEROP_096

TEST_TestTriggersFaults_test_04_update_fault_trigger_lifetime

test_04_update_fault_trigger_lifetime

verified

REQ_INTEROP_031

TEST_TestTriggersFaults_test_05_delete_fault_trigger

test_05_delete_fault_trigger

verified

REQ_INTEROP_032

TEST_TestTriggersFaults_test_10_sse_endpoint_connects_and_streams

test_10_sse_endpoint_connects_and_streams

verified

REQ_INTEROP_097

TEST_TestTriggersFaults_test_11_sse_fault_event_has_correct_headers

test_11_sse_fault_event_has_correct_headers

verified

REQ_INTEROP_097

TEST_TestTriggersHierarchy_test_01_component_trigger_created_successfully

test_01_component_trigger_created_successfully

verified

REQ_INTEROP_029

TEST_TestTriggersHierarchy_test_05_list_triggers_on_area

test_05_list_triggers_on_area

verified

REQ_INTEROP_030

TEST_TestTriggersHierarchy_test_06_delete_trigger_on_function

test_06_delete_trigger_on_function

verified

REQ_INTEROP_032

TEST_TestTriggersLogs_test_01_create_logs_trigger

test_01_create_logs_trigger

verified

REQ_INTEROP_029

TEST_TestTriggersLogs_test_02_list_logs_triggers

test_02_list_logs_triggers

verified

REQ_INTEROP_030

TEST_TestTriggersLogs_test_03_get_logs_trigger

test_03_get_logs_trigger

verified

REQ_INTEROP_096

TEST_TestTriggersLogs_test_04_update_logs_trigger_lifetime

test_04_update_logs_trigger_lifetime

verified

REQ_INTEROP_031

TEST_TestTriggersLogs_test_05_delete_logs_trigger

test_05_delete_logs_trigger

verified

REQ_INTEROP_032

TEST_TestTriggersLogs_test_10_sse_endpoint_connects_for_log_trigger

test_10_sse_endpoint_connects_for_log_trigger

verified

REQ_INTEROP_097

TEST_TestTriggersLogs_test_11_sse_log_event_headers

test_11_sse_log_event_headers

verified

REQ_INTEROP_097

TEST_TestTriggersPersistent_test_01_create_persistent_trigger

test_01_create_persistent_trigger

verified

REQ_INTEROP_029

TEST_TestTriggersPersistent_test_02_trigger_listed_on_primary

test_02_trigger_listed_on_primary

verified

REQ_INTEROP_030

TEST_TestTriggersPersistent_test_04_restored_trigger_fields_match

test_04_restored_trigger_fields_match

verified

REQ_INTEROP_096

TEST_TestTriggersPersistent_test_06_delete_via_secondary_removes_from_store

test_06_delete_via_secondary_removes_from_store

verified

REQ_INTEROP_032

TEST_TestTriggersRestoreBeforeDiscovery_test_01_create_persistent_triggers

test_01_create_persistent_triggers

verified

REQ_INTEROP_029

TEST_TestTriggersRestoreBeforeDiscovery_test_02_restored_trigger_survives_until_entity_is_discovered

test_02_restored_trigger_survives_until_entity_is_discovered

verified

REQ_INTEROP_096

TEST_TestTriggersRestoreBeforeDiscovery_test_03_restored_data_trigger_fires_after_late_discovery

test_03_restored_data_trigger_fires_after_late_discovery

verified

REQ_INTEROP_097

TEST_TestTriggersUpdates_test_01_create_updates_trigger

test_01_create_updates_trigger

verified

REQ_INTEROP_029

TEST_TestTriggersUpdates_test_02_list_updates_triggers

test_02_list_updates_triggers

verified

REQ_INTEROP_030

TEST_TestTriggersUpdates_test_03_get_updates_trigger

test_03_get_updates_trigger

verified

REQ_INTEROP_096

TEST_TestTriggersUpdates_test_04_update_updates_trigger_lifetime

test_04_update_updates_trigger_lifetime

verified

REQ_INTEROP_031

TEST_TestTriggersUpdates_test_05_delete_updates_trigger

test_05_delete_updates_trigger

verified

REQ_INTEROP_032

TEST_TestTriggersUpdates_test_10_events_endpoint_returns_sse_headers

test_10_events_endpoint_returns_sse_headers

verified

REQ_INTEROP_097

TEST_TestTriggersUpdates_test_11_events_for_nonexistent_trigger_returns_404

test_11_events_for_nonexistent_trigger_returns_404

verified

REQ_INTEROP_097

TEST_TestUnknownPolicyValueNonStrict_test_manifest_still_loads

test_manifest_still_loads

verified

REQ_INTEROP_003

TEST_TestUnknownPolicyValueNonStrict_test_policy_falls_back_to_warn_so_the_orphan_is_visible

test_policy_falls_back_to_warn_so_the_orphan_is_visible

verified

REQ_INTEROP_003

TEST_TestUnknownPolicyValueStrict_test_manifest_entities_are_served

test_manifest_entities_are_served

verified

REQ_INTEROP_003

TEST_TestUnknownPolicyValueStrict_test_manifest_still_loads_and_discovery_stays_hybrid

test_manifest_still_loads_and_discovery_stays_hybrid

verified

REQ_INTEROP_003

TEST_TestUnknownPolicyValueStrict_test_the_documented_fallback_still_applies

test_the_documented_fallback_still_applies

verified

REQ_INTEROP_003

TEST_TestUpdatesAutomated_test_01_automated_completes

test_01_automated_completes

verified

REQ_INTEROP_093

TEST_TestUpdatesAutomated_test_02_automated_on_non_automated_returns_400

test_02_automated_on_non_automated_returns_400

verified

REQ_INTEROP_093

TEST_TestUpdatesCRUD_test_01_list_updates_empty

test_01_list_updates_empty

verified

REQ_INTEROP_082

TEST_TestUpdatesCRUD_test_02_register_update

test_02_register_update

verified

REQ_INTEROP_083

TEST_TestUpdatesCRUD_test_03_list_after_register

test_03_list_after_register

verified

REQ_INTEROP_082

TEST_TestUpdatesCRUD_test_04_get_update_metadata

test_04_get_update_metadata

verified

REQ_INTEROP_085

TEST_TestUpdatesCRUD_test_05_get_nonexistent_returns_404

test_05_get_nonexistent_returns_404

verified

REQ_INTEROP_085

TEST_TestUpdatesCRUD_test_06_delete_update

test_06_delete_update

verified

REQ_INTEROP_084

TEST_TestUpdatesCRUD_test_07_delete_nonexistent_returns_404

test_07_delete_nonexistent_returns_404

verified

REQ_INTEROP_084

TEST_TestUpdatesCRUD_test_08_register_duplicate_returns_400

test_08_register_duplicate_returns_400

verified

REQ_INTEROP_083

TEST_TestUpdatesCRUD_test_09_list_with_origin_filter

test_09_list_with_origin_filter

verified

REQ_INTEROP_082

TEST_TestUpdatesCRUD_test_10_list_with_target_version_filter

test_10_list_with_target_version_filter

verified

REQ_INTEROP_082

TEST_TestUpdatesErrorCases_test_01_delete_during_prepare_returns_409

test_01_delete_during_prepare_returns_409

verified

REQ_INTEROP_084

TEST_TestUpdatesErrorCases_test_02_prepare_nonexistent_returns_404

test_02_prepare_nonexistent_returns_404

verified

REQ_INTEROP_091

TEST_TestUpdatesErrorCases_test_03_execute_nonexistent_returns_404

test_03_execute_nonexistent_returns_404

verified

REQ_INTEROP_092

TEST_TestUpdatesErrorCases_test_04_register_missing_required_fields

test_04_register_missing_required_fields

verified

REQ_INTEROP_083

TEST_TestUpdatesErrorCases_test_05_register_malformed_json

test_05_register_malformed_json

verified

REQ_INTEROP_083

TEST_TestUpdatesNoPlugin_test_01_list_updates_returns_501

test_01_list_updates_returns_501

verified

REQ_INTEROP_082

TEST_TestUpdatesNoPlugin_test_02_get_update_returns_501

test_02_get_update_returns_501

verified

REQ_INTEROP_085

TEST_TestUpdatesNoPlugin_test_03_register_update_returns_501

test_03_register_update_returns_501

verified

REQ_INTEROP_083

TEST_TestUpdatesNoPlugin_test_04_prepare_returns_501

test_04_prepare_returns_501

verified

REQ_INTEROP_091

TEST_TestUpdatesNoPlugin_test_05_execute_returns_501

test_05_execute_returns_501

verified

REQ_INTEROP_092

TEST_TestUpdatesNoPlugin_test_06_automated_returns_501

test_06_automated_returns_501

verified

REQ_INTEROP_093

TEST_TestUpdatesNoPlugin_test_07_status_returns_501

test_07_status_returns_501

verified

REQ_INTEROP_094

TEST_TestUpdatesNoPlugin_test_08_delete_returns_501

test_08_delete_returns_501

verified

REQ_INTEROP_084

TEST_TestUpdatesNoPlugin_test_09_malformed_json_returns_400_not_501

test_09_malformed_json_returns_400_not_501

verified

REQ_INTEROP_083

TEST_TestUpdatesNoPlugin_test_disabled_feature_returns_501_and_declares_it

test_disabled_feature_returns_501_and_declares_it

verified

REQ_INTEROP_002

TEST_TestUpdatesPrepareExecute_test_00_status_pending_right_after_register

test_00_status_pending_right_after_register

verified

REQ_INTEROP_094

TEST_TestUpdatesPrepareExecute_test_01_prepare_returns_202

test_01_prepare_returns_202

verified

REQ_INTEROP_091

TEST_TestUpdatesPrepareExecute_test_02_prepare_completes

test_02_prepare_completes

verified

REQ_INTEROP_091

TEST_TestUpdatesPrepareExecute_test_03_execute_after_prepare

test_03_execute_after_prepare

verified

REQ_INTEROP_092

TEST_TestUpdatesPrepareExecute_test_04_execute_without_prepare_returns_400

test_04_execute_without_prepare_returns_400

verified

REQ_INTEROP_092

TEST_TestUpdatesPrepareExecute_test_05_status_shows_progress

test_05_status_shows_progress

verified

REQ_INTEROP_094

TEST_TestUpdatesPrepareExecute_test_06_status_not_found_for_unknown

test_06_status_not_found_for_unknown

verified

REQ_INTEROP_094

TEST_TokenTypeTest_TokenTypeToString

TokenTypeToString

verified

REQ_INTEROP_087

TEST_TopicResolutionTest_DefaultTopicsUsedAsFallback

DefaultTopicsUsedAsFallback

verified

REQ_INTEROP_088

TEST_TopicResolutionTest_FaultSpecificHasHighestPriority

FaultSpecificHasHighestPriority

verified

REQ_INTEROP_088

TEST_TopicResolutionTest_PatternMatchUsedWhenNoFaultSpecific

PatternMatchUsedWhenNoFaultSpecific

verified

REQ_INTEROP_088

TEST_TransportRegistryTest_RegisterAndLookup

RegisterAndLookup

verified

REQ_INTEROP_089

TEST_TriggerManagerTest_Create_InvalidConditionType

Create_InvalidConditionType

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_Create_InvalidParams

Create_InvalidParams

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_Create_MaxTriggersExceeded

Create_MaxTriggersExceeded

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_Create_ValidOnChangeTrigger

Create_ValidOnChangeTrigger

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_EventEnvelopeFormat

EventEnvelopeFormat

verified

REQ_INTEROP_097

TEST_TriggerManagerTest_Get_Existing

Get_Existing

verified

REQ_INTEROP_096

TEST_TriggerManagerTest_Hierarchy_AreaToApp

Hierarchy_AreaToApp

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_Hierarchy_ComponentToApp

Hierarchy_ComponentToApp

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_JsonPointer_ExtractsSubElement

JsonPointer_ExtractsSubElement

verified

REQ_INTEROP_097

TEST_TriggerManagerTest_LifetimeExpiry

LifetimeExpiry

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_List_ReturnsTriggersForEntity

List_ReturnsTriggersForEntity

verified

REQ_INTEROP_030

TEST_TriggerManagerTest_Multishot_NotifyTwice

Multishot_NotifyTwice

verified

REQ_INTEROP_097

TEST_TriggerManagerTest_OnRemovedCallback

OnRemovedCallback

verified

REQ_INTEROP_032

TEST_TriggerManagerTest_Remove_ExistingTrigger

Remove_ExistingTrigger

verified

REQ_INTEROP_032

TEST_TriggerManagerTest_SingleShot_NotifyMatchingChange

SingleShot_NotifyMatchingChange

verified

REQ_INTEROP_097

TEST_TriggerManagerTest_SingleShot_RemovedAfterFiring

SingleShot_RemovedAfterFiring

verified

REQ_INTEROP_029

TEST_TriggerManagerTest_Update_ChangeLifetime

Update_ChangeLifetime

verified

REQ_INTEROP_031

TEST_TriggerSSETrackerTest_ClientLimitEnforced

ClientLimitEnforced

verified

REQ_INTEROP_097

TEST_TriggerStore_FilePersistence

FilePersistence

verified

REQ_INTEROP_029

TEST_TriggerStore_SaveAndLoadRoundTrip

SaveAndLoadRoundTrip

verified

REQ_INTEROP_029

TEST_TriggerValidationTest_VendorExtensionCollection_Accepted

VendorExtensionCollection_Accepted

verified

REQ_INTEROP_029

TEST_UpdateManagerFailureTest_ExecuteExceptionSetsFailedStatus

ExecuteExceptionSetsFailedStatus

verified

REQ_INTEROP_092

TEST_UpdateManagerFailureTest_ExecuteFailureSetsFailedStatus

ExecuteFailureSetsFailedStatus

verified

REQ_INTEROP_092

TEST_UpdateManagerFailureTest_PrepareExceptionSetsFailedStatus

PrepareExceptionSetsFailedStatus

verified

REQ_INTEROP_091

TEST_UpdateManagerFailureTest_PrepareFailureSetsFailedStatus

PrepareFailureSetsFailedStatus

verified

REQ_INTEROP_091

TEST_UpdateManagerTest_AutomatedCompletes

AutomatedCompletes

verified

REQ_INTEROP_093

TEST_UpdateManagerTest_AutomatedRejectsNonAutomated

AutomatedRejectsNonAutomated

verified

REQ_INTEROP_093

TEST_UpdateManagerTest_ConcurrentPrepareOnSamePackageRejected

ConcurrentPrepareOnSamePackageRejected

verified

REQ_INTEROP_091

TEST_UpdateManagerTest_DeleteDuringOperationFails

DeleteDuringOperationFails

verified

REQ_INTEROP_084

TEST_UpdateManagerTest_DeleteUpdate

DeleteUpdate

verified

REQ_INTEROP_084

TEST_UpdateManagerTest_DuplicateRegistration

DuplicateRegistration

verified

REQ_INTEROP_083

TEST_UpdateManagerTest_ExecuteAfterPrepare

ExecuteAfterPrepare

verified

REQ_INTEROP_092

TEST_UpdateManagerTest_ExecuteRequiresPrepare

ExecuteRequiresPrepare

verified

REQ_INTEROP_092

TEST_UpdateManagerTest_GetUpdate

GetUpdate

verified

REQ_INTEROP_085

TEST_UpdateManagerTest_GetUpdateNotFound

GetUpdateNotFound

verified

REQ_INTEROP_085

TEST_UpdateManagerTest_HasBackend

HasBackend

verified

REQ_INTEROP_082

TEST_UpdateManagerTest_NoBackendMode

NoBackendMode

verified

REQ_INTEROP_082

TEST_UpdateManagerTest_PrepareAndPollStatus

PrepareAndPollStatus

verified

REQ_INTEROP_091

TEST_UpdateManagerTest_RegisterAndList

RegisterAndList

verified

REQ_INTEROP_082

TEST_UpdateManagerTest_StatusNotFoundForUnknown

StatusNotFoundForUnknown

verified

REQ_INTEROP_094

TEST_UpdateManagerTest_StatusPendingRightAfterRegister

StatusPendingRightAfterRegister

verified

REQ_INTEROP_094

TEST_YamlLoadTest_LoadValidFile

LoadValidFile

verified

REQ_INTEROP_095

TEST_YamlLoadTest_MalformedYamlReturnsEmpty

MalformedYamlReturnsEmpty

verified

REQ_INTEROP_095

TEST_YamlLoadTest_MissingFileReturnsEmpty

MissingFileReturnsEmpty

verified

REQ_INTEROP_095

TEST_YamlLoadTest_PositiveConfirmationThresholdAutoNegated

PositiveConfirmationThresholdAutoNegated

verified

REQ_INTEROP_095