Repository navigation
Add integration tests for LoLa/mw::com feature in ITF - #417
Open
Subramanian-K812 wants to merge 20 commits into
Open
Subramanian-K812 wants to merge 20 commits into
Subramanian-K812 wants to merge 20 commits into
Conversation
Subramanian-K812
requested review from
AlexanderLanin,
FScholPer,
MaximilianSoerenPollak,
PiotrKorkus,
antonkri,
dcalavrezo-qorix,
lurtz,
nradakovic,
opajonk and
pawelrutkaq
as code owners
October 28, 2026 07:57
Subramanian-K812
force-pushed
the
Subramanian-K812_add_communication_feature_integration_tests
branch
2 times, most recently
from
October 28, 2026 08:06
10c3641 to
14fe808
Compare
PiotrKorkus
reviewed
Oct 28, 2026
Contributor
There was a problem hiding this comment.
this needs clarification with people from communication - can we change visibility here and patch also the test, or?
Subramanian-K812
force-pushed
the
Subramanian-K812_add_communication_feature_integration_tests
branch
3 times, most recently
from
October 29, 2026 11:18
53b4e5a to
dfa02eb
Compare
…ance-vs-process ASIL abort
- Remove test_properties.py from ITF; inline the attribute_plugin try/except import directly in test_communication.py - Inline samples ordering/integrity checks in test_received_samples_are_ordered_and_intact instead of hiding them in comm.samples_are_sequential_and_intact - Replace raise AssertionError with pytest.fail() for the manifest setup error in test_deployment_config_is_read_from_runtime_path - Add logger and log commands before target.execute() calls in comm_helpers.py for reproducibility
Subramanian-K812
force-pushed
the
Subramanian-K812_add_communication_feature_integration_tests
branch
2 times, most recently
from
October 29, 2026 13:45
2497627 to
52369e9
Compare
Subramanian-K812
force-pushed
the
Subramanian-K812_add_communication_feature_integration_tests
branch
from
October 29, 2026 13:50
52369e9 to
701c8e2
Compare
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Missing manifests do not stop runtime startup, and the ACL isolation test can pass despite repeated, reordered, or out-of-range samples.
2 open issues
What changed in this PR
Adds LoLa / mw::com communication coverage to the existing integration test framework, using separate producer and consumer processes over shared memory.
Changes:
- Adds Rust and C++ test binaries, including cross-language exchanges.
- Tests delivery, ordering, integrity, runtime configuration failures, late joining, and Linux-only ACL isolation.
- Packages the binaries, enables requirement-traceability metadata, and exposes the generated Rust interface through a dependency patch.
| File | Description |
|---|---|
showcases/standalone/comm_fit/vehicle_interface.h |
Defines the C++ service interface and payloads. |
showcases/standalone/comm_fit/fit_sender.rs |
Publishes sequence-numbered samples through Rust. |
showcases/standalone/comm_fit/fit_sender.cc |
Provides the equivalent C++ producer. |
showcases/standalone/comm_fit/fit_receiver.rs |
Discovers and receives samples through Rust. |
showcases/standalone/comm_fit/fit_receiver.cc |
Provides the equivalent C++ consumer. |
showcases/standalone/comm_fit/BUILD |
Builds and bundles all four test binaries. |
showcases/BUILD |
Includes the communication test bundle in deployment packages. |
patches/communication/002-expose-com-api-gen.patch |
Makes the generated Rust interface publicly accessible. |
known_good.json |
Registers the communication visibility patch. |
feature_integration_tests/itf/test_communication.py |
Adds communication and configuration test scenarios. |
feature_integration_tests/itf/comm_helpers.py |
Provides process orchestration, output parsing, and ACL setup. |
feature_integration_tests/itf/BUILD |
Registers the suite and traceability plugin. |
bazel_common/score_modules_target_sw.MODULE.bazel |
Reflects the patch in the generated dependency override. |
Review effort: Balanced
Comment on lines
+424
to
+431
| allowed_result, denied_result, allowed_uid = comm.run_acl_isolation_scenario(target) | ||
| logger.info("ACL scenario allowed_uid=%s", allowed_uid) | ||
| logger.info("allowed consumer stdout:\n%s", allowed_result.recv_stdout) | ||
| logger.info("denied consumer stdout:\n%s", denied_result.recv_stdout) | ||
|
|
||
| # Allowed consumer: unaffected by the concurrently-running denied one. | ||
| assert allowed_result.recv_exit_code == 0, "allowed consumer did not exit cleanly" | ||
| assert allowed_result.received_samples, "allowed consumer received no samples" |
Comment on lines
+117
to
+119
| } else { | ||
| eprintln!("FIT_RECV_CONFIG_MISSING path={}", config_path.display()); | ||
| } |
|
The created documentation from the pull request is available at: docu-html |
This branch has not been deployed
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)