Release 3.6.4#1018
Conversation
Something that should be dead since at least the introduction of the local_endpoints.
Noticed in a dirty build. Not important, but a little confusing.
For local development it helps to have these pre-filled, so that they can be modified
Refactor the local_endpoint::start method to add a very nice property to the overall class: Any public method of a local_endpoint can be called without running the risk of invoking directly any provided callbacks.
The scoped lock to all defined lock guard recursive mutexes Follow up to 269e983 Trivial changes, do not expect to have any functional impact. Motivation: Uniform , modernize code base to leverage C++17 features. Usually changing standard lock guard to std::scoped_lock is generally safe and beneficial. Note: scoped_lock type is kept defined purposely as it may help code analysis.
There was a problem hiding this comment.
Pull request overview
Release 3.6.4 focuses on improving testability and stability by introducing test-specific libraries/exports, simplifying test execution (PATH-based example binaries), and refactoring several runtime/endpoint behaviors.
Changes:
- Introduce
*-testshared libraries and update tests/benchmarks to link against them; adjust exported symbol map accordingly. - Refactor networking/endpoints and routing internals (remove
prepare_stop, adjust local endpoint start/process flow, concurrency/logging updates, debounce behavior adjustments). - Update test harness/scripts and presets (PATH setup for example binaries, CTest preset tweaks), bump version to 3.6.4, and remove the
debounce_callback_testssuite.
Reviewed changes
Copilot reviewed 298 out of 478 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| test/network_tests/debounce_filter_tests/conf/debounce_filter_test_master_starter.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/debounce_epsilon_tests/conf/debounce_epsilon_test_service.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/debounce_callback_tests/docs/debounce_callback_test_service.puml | Remove debounce-callback test documentation diagram (deleted) |
| test/network_tests/debounce_callback_tests/docs/debounce_callback_test_client.puml | Remove debounce-callback test documentation diagram (deleted) |
| test/network_tests/debounce_callback_tests/debounce_callback_test_service.hpp | Switch header guard to #pragma once |
| test/network_tests/debounce_callback_tests/debounce_callback_test_common.hpp | Switch header guard to #pragma once |
| test/network_tests/debounce_callback_tests/debounce_callback_test_client.hpp | Switch header guard to #pragma once |
| test/network_tests/debounce_callback_tests/debounce_callback_test.md | Remove debounce-callback test documentation (deleted) |
| test/network_tests/debounce_callback_tests/conf/debounce_callback_test_slave_starter.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/debounce_callback_tests/conf/debounce_callback_test_service.json.in | Remove debounce-callback service test config (deleted) |
| test/network_tests/debounce_callback_tests/conf/debounce_callback_test_master_starter.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/debounce_callback_tests/conf/debounce_callback_test_client.json.in | Remove debounce-callback client test config (deleted) |
| test/network_tests/debounce_callback_tests/CMakeLists.txt | Remove debounce-callback test build target (deleted) |
| test/network_tests/cyclic_event_tests/conf/cyclic_event_test_slave_starter.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/cyclic_event_tests/conf/cyclic_event_test_master_starter.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/cpu_load_tests/CMakeLists.txt | Remove Valgrind trace-children-skip tweak |
| test/network_tests/configuration_tests/CMakeLists.txt | Link configuration test against new *-test libraries |
| test/network_tests/conf/setup_test.sh.in | Add PATH augmentation for example binaries; update copyright years |
| test/network_tests/client_id_tests/client_id_test_globals.hpp | Switch header guard to #pragma once |
| test/network_tests/client_id_tests/CMakeLists.txt | Link utility against *-cfg-test |
| test/network_tests/cached_event_tests/conf/cached_event_test_client.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/big_payload_tests/big_payload_test_service.hpp | Switch header guard to #pragma once |
| test/network_tests/big_payload_tests/big_payload_test_globals.hpp | Switch header guard to #pragma once; reduce random message count |
| test/network_tests/big_payload_tests/big_payload_test_client.hpp | Switch header guard to #pragma once |
| test/network_tests/availability_handler_tests/availability_handler_test_globals.hpp | Switch header guard to #pragma once |
| test/network_tests/application_tests/conf/application_test_starter.sh.in | Start routingmanagerd via PATH instead of relative build path |
| test/network_tests/application_tests/application_test_globals.hpp | Switch header guard to #pragma once |
| test/network_tests/application_tests/application_test.cpp | Adjust application tests (remove sleeps, disable watchdog test, change restart test flow) |
| test/network_tests/application_tests/CMakeLists.txt | Remove Valgrind trace-children-skip tweak |
| test/network_tests/CMakeLists.txt | Link tests against *-test libs; remove debounce-callback tests; add shutdown tests; depend on example binaries |
| test/internal_routing_disabled_acceptance_test/CMakeLists.txt | Link acceptance test against vsomeip3-test |
| test/common/src/process.cpp | Stop explicitly propagating LD_LIBRARY_PATH to child processes |
| test/common/include/common/vsomeip_app_utilities.hpp | Switch header guard to #pragma once |
| test/common/include/common/timeout_detector.hpp | Add license header |
| test/common/include/common/test_timer.hpp | Switch header guard to #pragma once |
| test/common/include/common/process_manager.hpp | Rewrite process manager (synchronous spawn, stricter lifecycle rules) |
| test/common/include/common/external/process.hpp | Switch header guard to #pragma once |
| test/common/CMakeLists.txt | Convert test/common to OBJECT library; link to *-test |
| test/benchmark_tests/CMakeLists.txt | Link benchmarks against *-test libs |
| test/CMakeLists.txt | Add *-test shared libraries and update test targets to depend on them |
| libvsomeip.yaml | Bump version to 3.6.4 |
| interface/vsomeip/vsomeip.hpp | Switch header guard to #pragma once |
| interface/vsomeip/trace.hpp | Switch header guard to #pragma once |
| interface/vsomeip/structured_types.hpp | Switch header guard to #pragma once; simplify !=; mark send_current_value_after_ as ignored |
| interface/vsomeip/runtime.hpp | Switch header guard to #pragma once |
| interface/vsomeip/primitive_types.hpp | Switch header guard to #pragma once |
| interface/vsomeip/plugins/pre_configuration_plugin.hpp | Switch header guard to #pragma once |
| interface/vsomeip/plugins/application_plugin.hpp | Switch header guard to #pragma once |
| interface/vsomeip/plugin.hpp | Switch header guard to #pragma once |
| interface/vsomeip/payload.hpp | Switch header guard to #pragma once |
| interface/vsomeip/message_base.hpp | Switch header guard to #pragma once |
| interface/vsomeip/message.hpp | Switch header guard to #pragma once |
| interface/vsomeip/internal/serializable.hpp | Switch header guard to #pragma once |
| interface/vsomeip/internal/policy_manager.hpp | Switch header guard to #pragma once |
| interface/vsomeip/internal/plugin_manager.hpp | Switch header guard to #pragma once |
| interface/vsomeip/internal/logger.hpp | Switch header guard to #pragma once |
| interface/vsomeip/internal/deserializable.hpp | Switch header guard to #pragma once |
| interface/vsomeip/handler.hpp | Switch header guard to #pragma once |
| interface/vsomeip/function_types.hpp | Switch header guard to #pragma once |
| interface/vsomeip/export.hpp | Switch header guard to #pragma once |
| interface/vsomeip/error.hpp | Switch header guard to #pragma once |
| interface/vsomeip/enumeration_types.hpp | Switch header guard to #pragma once |
| interface/vsomeip/deprecated.hpp | Add license header; switch to #pragma once |
| interface/vsomeip/defines.hpp | Switch header guard to #pragma once |
| interface/vsomeip/constants.hpp | Switch header guard to #pragma once |
| interface/vsomeip/application.hpp | Switch header guard to #pragma once |
| implementation/utility/include/utility.hpp | Switch header guard; adjust export qualifiers on is_file/is_folder |
| implementation/utility/include/service_instance_map.hpp | Switch header guard to #pragma once |
| implementation/utility/include/qnx_helper.hpp | Switch header guard to #pragma once inside __QNX__ |
| implementation/utility/include/is_value.hpp | Switch header guard to #pragma once |
| implementation/utility/include/criticalsection.hpp | Switch header guard to #pragma once |
| implementation/utility/include/byteorder.hpp | Switch header guard to #pragma once |
| implementation/utility/include/bithelper.hpp | Switch header guard to #pragma once |
| implementation/tracing/include/header.hpp | Switch header guard to #pragma once |
| implementation/tracing/include/enumeration_types.hpp | Switch header guard to #pragma once |
| implementation/tracing/include/defines.hpp | Switch header guard to #pragma once |
| implementation/tracing/include/connector_impl.hpp | Switch header guard to #pragma once |
| implementation/tracing/include/channel_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/src/service_discovery_impl.cpp | Adjust SD init (remove max message sizing); switch several locks to std::scoped_lock; fix entry type in resubscription branch |
| implementation/service_discovery/include/unknown_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/subscription.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/serviceentry_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/service_discovery_impl.hpp | Switch header guard; remove max_message_size_ member |
| implementation/service_discovery/include/service_discovery_host.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/service_discovery.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/selective_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/runtime_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/runtime.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/request.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/remote_subscription_ack.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/protection_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/primitive_types.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/message_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/message_element_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/load_balancing_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/ipv6_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/ipv4_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/ip_option_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/eventgroupentry_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/enumeration_types.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/entry_impl.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/deserializer.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/defines.hpp | Switch header guard; remove TCP SD payload define and some unused constants |
| implementation/service_discovery/include/constants.hpp | Switch header guard to #pragma once |
| implementation/service_discovery/include/configuration_option_impl.hpp | Switch header guard to #pragma once |
| implementation/security/include/security.hpp | Switch header guard to #pragma once |
| implementation/security/include/policy_manager_impl.hpp | Switch header guard to #pragma once |
| implementation/security/include/policy.hpp | Switch header guard to #pragma once |
| implementation/runtime/src/application_impl.cpp | Store plugin manager in application_impl; avoid singleton use during teardown; use cached runtime pointer |
| implementation/runtime/include/runtime_impl.hpp | Switch header guard to #pragma once |
| implementation/runtime/include/application_impl.hpp | Switch header guard; add member plugin_manager_ |
| implementation/routing/src/routing_client_state_machine.cpp | Improve logging (include client id); adjust assignment transition to accept client id |
| implementation/routing/src/event.cpp | Drop debounce timer integration; log unsupported send_current_value_after_ |
| implementation/routing/include/types.hpp | Switch header guard to #pragma once |
| implementation/routing/include/serviceinfo.hpp | Switch header guard to #pragma once |
| implementation/routing/include/routing_manager_stub_host.hpp | Switch header guard to #pragma once |
| implementation/routing/include/routing_manager_stub.hpp | Switch header guard to #pragma once |
| implementation/routing/include/routing_manager_impl.hpp | Switch header guard; add has_requester declaration |
| implementation/routing/include/routing_manager_host.hpp | Switch header guard to #pragma once |
| implementation/routing/include/routing_manager_client.hpp | Switch header guard; simplify notify_remote_initially signature |
| implementation/routing/include/routing_manager_base.hpp | Switch header guard; remove debounce APIs and related state; adjust subscription helpers signature |
| implementation/routing/include/routing_manager_adapter.hpp | Adjust header end (include guard cleanup) |
| implementation/routing/include/routing_manager.hpp | Switch header guard; remove debounce APIs from interface |
| implementation/routing/include/routing_host.hpp | Switch header guard to #pragma once |
| implementation/routing/include/routing_client_state_machine.hpp | Switch header guard; add logging client id member; include config headers for constants |
| implementation/routing/include/remote_subscription.hpp | Switch header guard to #pragma once |
| implementation/routing/include/function_types.hpp | Switch header guard to #pragma once |
| implementation/routing/include/eventgroupinfo.hpp | Switch header guard to #pragma once |
| implementation/routing/include/event.hpp | Switch header guard; remove pending debounce update helper |
| implementation/protocol/include/update_security_policy_response_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/update_security_policy_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/update_security_credentials_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/unsubscribe_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/unsubscribe_ack_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/unregister_event_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/suspend_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/subscribe_nack_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/subscribe_command_base.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/subscribe_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/subscribe_ack_command_base.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/subscribe_ack_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/stop_offer_service_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/simple_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/service_command_base.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/send_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/security_policy_response_command_base.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/routing_info_entry.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/routing_info_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/resend_provided_events_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/request_service_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/remove_security_policy_response_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/remove_security_policy_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/release_service_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/registered_ack_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/register_events_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/register_event.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/register_application_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/protocol.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/pong_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/ping_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/offered_services_response_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/offered_services_request_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/offer_service_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/multiple_services_command_base.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/expire_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/dummy_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/distribute_security_policies_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/deregister_application_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/config_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/assign_client_command.hpp | Switch header guard to #pragma once |
| implementation/protocol/include/assign_client_ack_command.hpp | Switch header guard to #pragma once |
| implementation/plugin/src/plugin_manager_impl.cpp | Use std::scoped_lock for recursive mutex |
| implementation/plugin/include/plugin_manager_impl.hpp | Switch header guard to #pragma once |
| implementation/message/include/serializer.hpp | Switch header guard to #pragma once |
| implementation/message/include/payload_impl.hpp | Switch header guard to #pragma once |
| implementation/message/include/message_impl.hpp | Switch header guard to #pragma once |
| implementation/message/include/message_header_impl.hpp | Switch header guard to #pragma once |
| implementation/message/include/message_base_impl.hpp | Switch header guard to #pragma once |
| implementation/message/include/deserializer.hpp | Switch header guard to #pragma once |
| implementation/logger/include/logger_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/src/virtual_server_endpoint_impl.cpp | Remove prepare_stop and stored io_context reference |
| implementation/endpoints/src/udp_client_endpoint_impl.cpp | Remove last-sent locking; lock for get_local_port() |
| implementation/endpoints/src/tcp_server_endpoint_impl.cpp | Release connections outside locks; remove prepare-stop handler logic on drop |
| implementation/endpoints/src/tcp_client_endpoint_impl.cpp | Lock for get_local_port() |
| implementation/endpoints/src/netlink_connector.cpp | Capture shared_from_this() in async callbacks |
| implementation/endpoints/src/local_server.cpp | Adjust connection start locking; improve logging format |
| implementation/endpoints/src/local_endpoint.cpp | Refactor start() and process() to avoid synchronous callback re-entrancy |
| implementation/endpoints/src/endpoint_impl.cpp | Remove remove_stop_handler implementation |
| implementation/endpoints/src/credentials.cpp | Remove Linux credentials helper implementation (deleted) |
| implementation/endpoints/src/client_endpoint_impl.cpp | Remove prepare_stop; switch to std::scoped_lock usages |
| implementation/endpoints/include/virtual_server_endpoint_impl.hpp | Switch header guard; remove prepare_stop/stop-handler APIs and io_context member |
| implementation/endpoints/include/uds_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/uds_acceptor.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/udp_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/udp_server_endpoint_impl_receive_op.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/udp_server_endpoint_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/udp_client_endpoint_impl.hpp | Switch header guard; remove last_sent_mutex_ |
| implementation/endpoints/include/tp_reassembler.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/tp_message.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/tp.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/timer.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/tcp_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/tcp_server_endpoint_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/tcp_client_endpoint_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/server_endpoint_impl.hpp | Switch header guard; remove prepare-stop API and handler storage |
| implementation/endpoints/include/netlink_connector.hpp | Switch header guard; remove unused retry constants |
| implementation/endpoints/include/local_socket_uds_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_socket_tcp_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_server.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_receive_buffer.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_endpoint.hpp | Switch header guard; document callback guarantees; adjust process() signature |
| implementation/endpoints/include/local_acceptor_uds_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_acceptor_tcp_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/local_acceptor.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/io_control_operation.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/endpoint_manager_impl.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/endpoint_manager_base.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/endpoint_impl.hpp | Switch header guard; remove error_handler mutex and stop-handler API |
| implementation/endpoints/include/endpoint_definition.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/credentials.hpp | Remove Linux credentials helper interface (deleted) |
| implementation/endpoints/include/client_endpoint_impl.hpp | Switch header guard; remove prepare_stop |
| implementation/endpoints/include/client_endpoint.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/buffer.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/boardnet_endpoint_host.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/boardnet_endpoint.hpp | Switch header guard; remove prepare-stop & stop-handler API from base interface |
| implementation/endpoints/include/asio_uds_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/asio_uds_acceptor.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/asio_udp_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/asio_timer.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/asio_tcp_socket.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/asio_socket_factory.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/abstract_timer.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/abstract_socket_factory.hpp | Switch header guard to #pragma once |
| implementation/endpoints/include/abstract_netlink_connector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2exf/config.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile_interface/protector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile_interface/profile_interface.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile_interface/checker.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile_custom/protector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile_custom/profile_custom.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile_custom/checker.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile07/protector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile07/profile_07.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile07/checker.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile05/protector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile05/profile_05.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile05/checker.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile04/protector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile04/profile_04.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile04/checker.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile01/protector.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile01/profile_01.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/profile01/checker.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/e2e_provider_impl.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/e2e/profile/e2e_provider.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/crc/crc.hpp | Switch header guard to #pragma once |
| implementation/e2e_protection/include/buffer/buffer.hpp | Switch header guard to #pragma once |
| implementation/configuration/src/configuration_impl.cpp | Warn when parsing unsupported debounce send_current_value_after |
| implementation/configuration/include/watchdog.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/trace.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/service_instance_range.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/service.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/routing.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/local_clients_keepalive.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/internal_android.hpp | Switch header guard; remove unused constants/macros |
| implementation/configuration/include/internal.hpp.in | Switch header guard; remove unused constants/macros |
| implementation/configuration/include/eventgroup.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/event.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/e2e.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/debounce_filter_impl.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/configuration_plugin_impl.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/configuration_plugin.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/configuration_impl.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/configuration_element.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/configuration.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/client.hpp | Switch header guard to #pragma once |
| implementation/configuration/include/application_configuration.hpp | Switch header guard to #pragma once |
| exportmap.gcc | Update exported symbols strategy for test libraries |
| examples/wait-until-available/wait-until-available.cpp | Add new helper tool to block until service becomes available |
| examples/wait-until-available/CMakeLists.txt | Build and link new wait-until-available example |
| examples/sample-ids.hpp | Switch header guard to #pragma once |
| examples/routingmanagerd/CMakeLists.txt | Add dependencies on cfg/sd/e2e libs to ensure runtime availability |
| documentation/vsomeipConfiguration.md | Remove send_current_value_after from debounce documentation |
| CMakePresets.json | Adjust coverage flags; tweak test preset environment/output/filtering |
| CHANGES | Add 3.6.4 changelog entry |
| Android.mk | Bump VSOMEIP_VERSION to 3.6.4 |
| Android.bp | Bump VSOMEIP_VERSION to 3.6.4 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| # add common binaries to path | ||
| # bit of a strong assumption on the directory structure, but this is anyhow just to simplify tests | ||
| export PATH="$PATH:../../../examples/routingmanagerd:../../../examples/wait-until-available" |
There was a problem hiding this comment.
This PATH update is relative to the current working directory, not the script location. If the script is invoked from a different cwd (common in CI/ctest), routingmanagerd/wait-until-available won’t be found and the updated starter scripts will fail. Build the PATH entries from the script directory (e.g., based on realpath \"$0\" / dirname) or export absolute paths.
| export PATH="$PATH:../../../examples/routingmanagerd:../../../examples/wait-until-available" | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)" | |
| EXAMPLES_DIR="$(realpath "${SCRIPT_DIR}/../../../examples")" | |
| export PATH="$PATH:${EXAMPLES_DIR}/routingmanagerd:${EXAMPLES_DIR}/wait-until-available" |
| } | ||
| } | ||
| }); | ||
| // Carful: A call to start might end up calling the error handler causing a lock inversion | ||
| lock.unlock(); | ||
| ep->start(); |
There was a problem hiding this comment.
The previous code explicitly unlocked before calling ep->start() to avoid lock inversion (comment mentioned that start() can synchronously hit the error handler). With the unlock removed, ep->start() now executes while the surrounding lock is still held, which can reintroduce deadlocks. Restore the unlock-before-start pattern (or otherwise ensure start() cannot re-enter code paths that need the same lock).
| std::thread t([&]() { | ||
| its_promise.set_value(true); | ||
| app_->start(); | ||
| app_->stop(); | ||
| }); | ||
| EXPECT_TRUE(its_promise.get_future().get()); | ||
| std::this_thread::sleep_for(std::chrono::milliseconds(100)); | ||
| VSOMEIP_WARNING << "An error message should appear now"; | ||
| // should print error | ||
| app_->start(); |
There was a problem hiding this comment.
The test restart_without_stopping no longer reliably tests 'start without stopping'. By stopping inside the worker thread immediately after start(), the main thread may call app_->start() after the application has already stopped, making the "should print error" assertion flaky/incorrect. Keep app_->stop() after the main thread performs the second start() (or add a synchronization point so the second start() happens while the app is still running).
| @@ -19,5 +19,3 @@ class routing_manager_adapter { | |||
| }; | |||
|
|
|||
| } // namespace vsomeip_v3 | |||
There was a problem hiding this comment.
This header’s closing include-guard #endif was removed in the diff, but there is no corresponding #pragma once change shown for this file. If the opening #ifndef/#define remained, this will cause a preprocessing error; if the guard was removed without adding #pragma once, it can cause ODR/multiple-include issues. Ensure the file either consistently uses #pragma once at the top or keeps a complete #ifndef/#define ... #endif guard.
| } // namespace vsomeip_v3 | |
| } // namespace vsomeip_v3 | |
| #endif // VSOMEIP_V3_ROUTING_MANAGER_ADAPTER_ |
| } else if (arg == "-t" || arg == "--timeout") { | ||
| if (i + 1 < argc) { | ||
| timeout = std::chrono::seconds(std::stoul(argv[++i])); | ||
| } else { | ||
| std::cerr << "Error: --timeout requires a value" << std::endl; | ||
| print_help(); | ||
| return EXIT_FAILURE; | ||
| } |
There was a problem hiding this comment.
std::stoul can throw on invalid/negative/overflow inputs (e.g. --timeout foo), which will currently terminate the program. Handle parsing errors similarly to the service-id parsing (catch exceptions and print a clear error), and consider validating that the timeout is within a reasonable range.
prepare_stop was introduced in fe6cd73 (along nPDU), as a way to ensure that queued messages (for a given service) are sent before the StopOffer for that service This is, however, folly - we can NEVER guarantee that the receiver ECU will not receive messages after a StopOffer, because StopOffers go via SOME/IP-SD, whereas messages go by SOME/IP, via different ports. These are fundamentally asynchronous, independent channels. We cannot even guarantee it in the sender side - nothing stops, for example, a TCP retransmission of a SOME/IP message after StopOffer Furthermore, the implementation is (and has always been) broken. While it does guarantee that messages in the queue (sei::targets_::queue_) are sent out, it does NOT guarantee that messages in dispatched trains ( sei::targets_::dispatched_trains_) are sent out Therefore in the very simple scenario of: 1) offer service, 2) send 10 messages at once (which will trigger one queued message, 9 dispatched trains), 3) stop offer, 9 messages will be sent after StopOffer is sent! Lastly, it is a maintenance nightmare. There are many, many, many issues (crashes, memory leaks, ...) that can be traced to prepare_stop. See b2eb361, 31c1a16, ec4ca02, afd7f65, 8c41b4c, ..
These are hiding issues, and there is already a top-level one, well expanded in 318b78b
Otherwise normal applications can block (for a few seconds), as they'll never get the DELETE_CLIENT to complete the deregistration Fix async_receive issue in the fake socket machinery that would also lead to applications to never receive DELETE_CLIENT While at it, disable service discovery and version logging, these provoke a lot of useless logs in the fake_socket tests
db51708 to
b0101e1
Compare
In application_test: remove sleeps, disable watchdog test that takes >10s and has little value; fix found race In debounce_filter_tests: wait for a number of messages instead of blindly sleeping for 15s, reduce debounce intervals In debounce_callback_test: reduce debounce intervals In restart_routing_tests: remove sleeps between messages In big_payload_*: reduce number of messages for the random variant; each message can go up to 10MBs, so it will always be significantly slow All in all, another couple of minutes less in test execution
Remove unused definitions Cleanup unused definitions in defines.hpp Also change entry type to STOP_SUBSCRIBE_EVENTGROUP on create_eventgroup_entry for easier understanding the code.
Before this change it could happen that on disconnect, the socket that should react would call async_receive that would then fail, leading to an unintended error handling
Enable single execution of fake socket tests Instruct cmake to scan for gtest cases in the fake socket tests, adding them to ctest. This allows to either use ctest -R test-name, or to name a single test case in the CMakePresets.json
A missing race case on shutdown from 9662c86. In essence, the plugin_manager singleton was not captured for the case where dispatch threads from some application outlive the main thread and thus the C __terminate routine
Use the newly available overload for a local_endpoint to add the ip address, the port and the local protocol type to the trace header in the routing_manager_client. Meanwhile: Remove left-over mutex
Remove magic sleeps for IPC Magic sleeps added in dd30512 have been removed. These magic sleeps were necessary to ensure the last message was sent before stopping the application. At this point, for IPC, they are no longer needed since the implementation has been fixed. Fix PR: fc4a635 Note: The magic sleeps were not removed from all tests because they are still needed for boardnet.
6e60328 introduced sending of initial event regardless of subscription state, but only for event (not eventgroup!) subscriptions, and only internally High-level, it just makes sense - if we're already spending resources to anyhow send a SUBSCRIBE_ACK, might as well send the initial event, too Requirement-wise, it is allowed - see TR_SOMEIP_00571+TR_SOMEIP_00572, and note that the change does NOT collide with TR_SOMEIP_00570, since it only affects non-initial events (initial events aside, all of the work from 293502b makes sense) Low-level, it solves ton of bloody-difficult-to-avoid races in local communication, which is also the reason for 6e60328. Consider, for example, that client error handling happens when there is an error in the "outgoing" endpoint, but SUBSCRIBE comes via the "incoming" endpoint This is also one of the reasons for the flakiness of initial_event_* tests - due to 338f60d, client-ids are reused aggressively, and the initial_event_* tests launches dozens of applications that subscribe to an eventgroup, which significantly increases the odds of a race where a new connecting application with a reused client-id is "already subscribed", and therefore never received an initial notification (again, note that 6e60328 did not change eventgroups..) Add a test for the race described, simplify initial event code which longer needs to care about subscription state
This PR introduces a new wait-until-available CLI utility for checking service availability and refactors all network test scripts to use PATH-based binary resolution instead of hardcoded relative paths. This improves test portability and maintainability while providing a useful debugging/scripting tool. New wait-until-available Example Utility Added a new command-line tool in examples/wait-until-available/ that blocks until a specified SOME/IP service becomes available Accepts a service ID in hexadecimal format and an optional timeout parameter (default: 30 seconds) Returns EXIT_SUCCESS (0) if the service becomes available, EXIT_FAILURE (1) on timeout This utility is useful for test synchronization and debugging service discovery issues Build system integration via new CMakeLists.txt and inclusion in the root build configuration Test Infrastructure Improvements Modified test/network_tests/conf/setup_test.sh.in to add routingmanagerd and wait-until-available binaries to $PATH This change decouples test scripts from the exact build directory structure, making tests more robust when run from different locations or CI environments Build System Updates Added wait-until-available as a build dependency for network tests (alongside routingmanagerd) Updated comment in test/network_tests/CMakeLists.txt to reflect that tests now depend on multiple example binaries Improved Test Reliability Replaced a sleep 1 timing hack in offer_test_local_starter.sh.in with a proper wait-until-available 0x1111 call This eliminates a race condition where the test could fail intermittently if the service start took longer than 1s
ucei::last_sent_ is already covered by socket_mutex_
This was noticed when the CONFIG_ID was printed as a "1"
Both of these tests do usei::restart while sending a boatload of messages, and how many messages are processed is of course undeterministic - depends how fast the test is vs usei::restart Therefore moderate the message reception expectations by a lot, which fixes the flakiness of these tests
exportmap.gcc contains a crapload of symbols that should not be exported by libvsomeip, and that are there only to enable testing Instead of exporting too many symbols, compile object files and build two sets of libraries: test libraries that exports all symbols, and normal libraries that export only public symbols The tests, of course, use the test libraries. This allows the removal of all testing exports from exportmap.gcc A few technical notes: examples, of course, keep linking against normal libs easier to construct shared libraries out of object files, hence the use of object files instead of a static library libvsomeip (both test and normal libs) needs a RPATH/RUNPATH ref so that when it dlopens libvsomeip-cfg, it loads the correct lib Besides the build cleanup, the effects of this change are visible when looking at the symbol list. Before: [ric@g05 vsomeip-lib 0]$ nm -gDC ./libvsomeip3.so.3 | wc -l 3497 After: [ric@g05 vsomeip-lib 0]$ nm -gDC ./libvsomeip3.so.3 | wc -l 899 Furthermore, even though more binaries are produced (object files, extra set of libs..), there is a reduction in redundant building, so it is even a slight build improvement. Before: real 0m54,814s user 36m5,839s sys 4m17,354s real 0m53,389s user 36m1,121s sys 4m17,560s real 0m58,188s user 34m54,926s sys 4m22,480s After: real 0m47,270s user 33m27,981s sys 4m24,039s real 0m50,417s user 33m20,682s sys 4m31,863s real 0m50,545s user 31m53,337s sys 4m7,359s
Simplify it, force user to wait for processes (else they keep running in the background and disturb next tests..!) Furthermore, drop any fancy usage of boost::process::child - the thing was and probably still is unstable, so keep usage straightforward
This PR aims to fix a sporadic failure on someip_tp_tests. The non-vsomeip application subscription phase was independent of the availability of vsomeip's services availability, which caused vsomeip to send a SubNack whenever this was done before the service was offered. Besides that, the non-vsomeip application also lacked a robust method to ensure it subscribed to the vsomeip application, sending just a single subscription message throughout the entire test. This PR aims to fix both issues by calling subscribe_at_master() only when the vsomeip's service is offered, or when it receives a SubNack (with a short sleep between such retries to avoid overloading the vsomeip application).
f9b44d6 forgot one of the sub-tests which also does a sleep 1 and has the same underlying race condition Furthermore, wait-until-available is subtly broken, because doing register_availability_handler(.., ANY_INSTANCE) immediately invokes the availability handler with ON_AVAILABLE (which is a massive, massive footgun..)
As rscm does the state changes, it makes sense for it to show the client-id as well
b0101e1 to
95a7092
Compare
43222d0 to
6d5208a
Compare
It's shorter, it's nicer, and even though it's non-standard you have to go to hilariously ancient/badly supported compilers for it to not work
Create double_insert_subscription test. The test simply verifies whether calling insert_subscription twice results in create_placeholder_event_and_subscribe also being called twice (which it shouldn't). The test fails in 3.5.10 (without the fix) and passes in 3.5.11 (after the fix)
Fix racy get_local_port() calls race reported by ThreadSanitizer: data race (pid=7743) in maintain/3.6 (see it here) The race happens during the release of a service by an application call together w/ a client trying to connect (which will claim a local port). It could happen that while a new client is claiming a new port, the release_service operation could be releasing this newly claimed port. Currently, calls to get_local_port() are not protected at all, thus racy. Previously, socket_mutex_ was used for this purpose on top of other socket operations. However, later removed along w/ socket operations.. details here) This PR brings back the mutex to protect the calls to get_local_port() on tcei and ucei.
The implementation from 0753082 is irremediably flawed: iterator issues causing crashes/livelocks (addressed in c6066fb) infinite-loops if the filter does not have interval set does nothing for internal communication broken for external communication; unrelated events from other services cause updates small interval causes wasteful wakeups (due to how debounce_clients_ and timer are structured) Keep only the configuration parsing and SUBSCRIBE_ID serialization/deserialization code, and drop everything else Add fake_socket test coverage, to cover the testing gap in internal communication for the other debouncing parameters (also, keep the test that shows broken send_current_value_after)
Add shutdown test for IPC The purpose of the test is to replicate/test the behavior of applications that start, send 5 messages, and immediately exit to verify that we ensure the messages are sent before stopping the application. The test tests the sending and immediate exit of the client to verify if the service receives the message, whether with or without routing manager, and also tests the sending and immediate exit of the service to verify if the client receives the message, whether with or without routing manager. Test created with executions in local communication for TCP and UDS.
The drop of the command has to be prepared before the actually happens, else it will lose the message
Catch missing internal_android.hpp on the CI build
This change fixes an issue where vsomeip would not immediately trigger availability events for new services offers that already had a UDP "connection" established. The code responsible for this was only checking TCP connections, but the changes introduced in 98f2fec require that this must also be done for UDP "connections".
This change fixes an issue where vsomeip would not send a FindService entry to the network on resume if a client had released the service during suspend. The issue was that vsomeip was unconditionally releasing the service even if other clients were still requesting it. This fix involves simply checking if there are other requesters before releasing the service.
vSomeIP-Lib 3.6.4 Release remove dead credentials code fix logging prefix in flush function misc: add defaults to CMakePresets the public API of local_endpoints does not re-enter caller scoped lock to all defined lock guard recursive mutexes endpoints: drop prepare_stop tests: remove valgrind trace-children-skip tests: stop routing app last tests: more test speedups remove unused definitions Extend helpers to simulate suspend enable ctest -R for fake socket tests Fix plugin_manager_impl singleton free-after-use on dtor bug use local_endpoint in rmc to prepare header Remove magic sleeps for IPC routing: send initial event on EVERY sub tests: fix offer_test_local race misc: remove unused defs + useless mutex print command id as number tests: fix usei_fixture.no_overwrite* build: cleanup exported symbols tests: rewrite process_manager Fix someip_tp_tests fragility tests: fix offer_test_local race (again) rscm: add logging of client-id misc: "pragma once" the entire codebase Create subscribe_before_register test fixes data race when calling get_local_port() debouncing: drop send_current_value_after Add shutdown_test for IPC tests: fix block_registration_process Fix internal.hpp with ANDROID_CI_BUILD flag fix delayed availability fix missing find on resume
6d5208a to
3d21935
Compare
No description provided.