Add integration tests for LoLa/mw::com feature in ITF#21
Draft
Subramanian-K812 wants to merge 10 commits into
Draft
Add integration tests for LoLa/mw::com feature in ITF#21Subramanian-K812 wants to merge 10 commits into
Subramanian-K812 wants to merge 10 commits into
Conversation
…communication_feature_integration_tests
…ance-vs-process ASIL abort
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add communication (LoLa / mw::com) integration tests to ITF
Summary
Adds an ITF test suite for the communication module (LoLa /
mw::com).The suite drives its own two-process scenario —
showcases/standalone/comm_fit:fit_sender+fit_receiver, built on thesame public
com_apiRust cratecom-api-exampleuses — as two real OSprocesses communicating over real shared memory.
The tests assert on data the consumer actually observes — delivery, ordering,
and value-integrity of a sequence number the sender encodes in the payload —
rather than on log strings the application prints about its own
configuration, so a regression in the middleware is what breaks them.
The suite runs under the existing
//feature_integration_tests/itf:itftarget on both the Linux (Docker) and QNX (QEMU) configs.
What's added
showcases/standalone/comm_fit/fit_sender.rsVehicleInterfaceservice instance, publishesleft_tiresamples carrying a monotonically increasing sequence number.showcases/standalone/comm_fit/fit_receiver.rsshowcases/standalone/comm_fit/BUILDfit_sender/fit_receiverand bundles them for deployment.showcases/BUILDcomm_fitbundle into the reference image alongsidecom-api-example.patches/communication/002-expose-com-api-gen.patchcom-api-gen(the generatedVehicleInterface) outside//score/mw/com, sofit_sender/fit_receivercan depend on it.bazel_common/score_modules_target_sw.MODULE.bazelscore_communicationgit_override.known_good.jsonMODULE.bazel(required by theknown_good_correctCI check).feature_integration_tests/itf/test_communication.pyfeature_integration_tests/itf/comm_helpers.pyCommResult, ordering/integrity checks, deployment-config and ASIL-B ACL scenario helpers).feature_integration_tests/itf/test_properties.pyattribute_plugin.add_test_properties, mirroringfeature_integration_tests/test_cases/test_properties.py(verified identical).feature_integration_tests/itf/BUILDitftarget and activates the requirement-traceability plugin (-p attribute_plugin+@score_tooling//python_basics/score_pytest:attribute_plugindep).Test coverage
test_fit_binaries_are_deployedfit_sender/fit_receiverbinaries present on the target image.test_event_exchange_delivers_dataevent_type,producer_consumer,interfaces,data_driven_arch,service_discoverytest_received_samples_are_ordered_and_intactdata_corruption,data_reorderingtest_deployment_config_is_read_from_runtime_pathdepl_config_runtime-s <path>manifest, not compiled in.test_late_joining_consumer_receives_datastateless_communication,producer_consumertest_missing_config_file_fails_deterministicallydepl_config_runtimetimeout, never reaches service discovery.test_truncated_config_fails_deterministicallydepl_config_runtimeRECV_EXIT=134).test_schema_invalid_config_fails_deterministicallydepl_config_runtimetest_mixed_criticality_acl_isolationasil,acl_for_consumer,acl_for_producer,acl_per_service_instanceRequirement IDs are the published
feat_req__com__*identifiers, attached via@add_test_properties(partially_verifies=[...])so they are emitted into theJUnit XML
<properties>— the same traceability convention used by thepersistency FIT cases under
feature_integration_tests/test_cases.The negative-config tests (
missing/truncated/schema_invalid) and the ACLisolation test each run against a dedicated instance specifier that no other
test offers, so they cannot observe another test's leftover shared-memory
state (the QEMU target is session-scoped and persists across the whole test
file, unlike the Docker plugin's fresh-container-per-test model).
Limitations
allowedConsumerenforcement is ashared-memory ACL keyed on the consumer's real UID, so exercising it needs a
consumer running under a UID excluded from the allow-list (
setprivonLinux,
on -u <uid>on QNX). On QNX, LoLa'sMessagePassingServiceendpoint registration itself requires privilege, so a consumer launched
under a lower-privilege UID aborts at message-passing setup before
reaching the shared-memory ACL check. The denial therefore cannot be
attributed to the ACL on QNX, so the test skips there; it runs on Linux,
where an unprivileged UID can still bring up its endpoint and so reaches the
ACL check the assertions rely on.
Verification
--config=qnx-x86_64): confirmed 8 passed, 1skipped across multiple runs (
test_mixed_criticality_acl_isolationskips for the reason under Limitations).
--config=linux-x86_64, what CI's "Linux — Build &Integration Test" job runs): confirmed 9 passed
JUnit XML (
bazel-testlogs/.../itf/test.xml)