diff --git a/ddsrouter_core/README.md b/ddsrouter_core/README.md index 8b90a4555..a5531aeda 100644 --- a/ddsrouter_core/README.md +++ b/ddsrouter_core/README.md @@ -9,8 +9,8 @@ Include module is the public API used to configure a DDS Router and to interact * **Configuration**: configuration objects that contains the information needed for a DDS Router. Are divided in: * *ParticipantConfiguration*: configuration for each participant inside the DDS Router. - * *DdsRouterConfiguration*: configuration to execute a DDS Router, with its Participants and allowed lists. - * *DdsRouterReloadConfiguration*: configuration to change topics in a running DDS Router. + * *DdsRouterConfiguration*: configuration to execute a DDS Router, with its Participants and DdsPipeConfiguration. + * *DdsPipeConfiguration*: configuration to execute a DDS Pipe, with its allowlist, blocklist, manual topics, and built-in topics. * **Core**: it only contains the proxy of DDS Router class, which implementation is inside private modules. It allows to execute a DDS Router, and to interact with it while running. diff --git a/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterConfiguration.hpp b/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterConfiguration.hpp index 9a5dbf4d4..7d2ec1002 100644 --- a/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterConfiguration.hpp +++ b/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterConfiguration.hpp @@ -23,7 +23,6 @@ #include #include -#include #include #include @@ -35,11 +34,11 @@ namespace core { /** * This data struct joins every DdsRouter feature configuration such as: - * - Modifiable values (from \c DdsRouterReloadConfiguration ). + * - DdsPipe configuration. * - Participant configurations. * - Advanced configurations. */ -struct DdsRouterConfiguration : public DdsRouterReloadConfiguration +struct DdsRouterConfiguration : public ddspipe::core::IConfiguration { ///////////////////////// @@ -53,10 +52,6 @@ struct DdsRouterConfiguration : public DdsRouterReloadConfiguration // METHODS ///////////////////////// - //! Set internal values with the values reloaded - DDSROUTER_CORE_DllAPI void reload( - const DdsRouterReloadConfiguration& new_configuration); - //! Override \c is_valid method. DDSROUTER_CORE_DllAPI bool is_valid( utils::Formatter& error_msg) const noexcept override; @@ -65,9 +60,6 @@ struct DdsRouterConfiguration : public DdsRouterReloadConfiguration // VARIABLES ///////////////////////// - //! Builtin topics to create at the beggining of the execution - std::set> builtin_topics {}; - //! Participant configurations std::set< std::pair< diff --git a/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterReloadConfiguration.hpp b/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterReloadConfiguration.hpp deleted file mode 100644 index 86cfeb073..000000000 --- a/ddsrouter_core/include/ddsrouter_core/configuration/DdsRouterReloadConfiguration.hpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2021 Proyectos y Sistemas de Mantenimiento SL (eProsima). -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#include -#include - -#include -#include - -#include - -namespace eprosima { -namespace ddsrouter { -namespace core { - -/** - * This class joins every DdsRouter feature configuration and includes methods - * to interact with this configuration. - */ -struct DdsRouterReloadConfiguration : public ddspipe::core::IConfiguration -{ - - ///////////////////////// - // CONSTRUCTORS - ///////////////////////// - - DDSROUTER_CORE_DllAPI DdsRouterReloadConfiguration() = default; - - ///////////////////////// - // METHODS - ///////////////////////// - - DDSROUTER_CORE_DllAPI bool is_valid( - utils::Formatter& error_msg) const noexcept override; - - ///////////////////////// - // VARIABLES - ///////////////////////// - - std::set> allowlist {}; - - std::set> blocklist {}; - -}; - -} /* namespace core */ -} /* namespace ddsrouter */ -} /* namespace eprosima */ diff --git a/ddsrouter_core/include/ddsrouter_core/configuration/SpecsConfiguration.hpp b/ddsrouter_core/include/ddsrouter_core/configuration/SpecsConfiguration.hpp index 4a23670bd..d22f4fdac 100644 --- a/ddsrouter_core/include/ddsrouter_core/configuration/SpecsConfiguration.hpp +++ b/ddsrouter_core/include/ddsrouter_core/configuration/SpecsConfiguration.hpp @@ -55,13 +55,6 @@ struct SpecsConfiguration : public ddspipe::core::IConfiguration unsigned int number_of_threads = 12; - /** - * @brief Maximum of History depth by default in those topics where it is not specified. - * - * @note Default value is 5000 as in Fast DDS. - */ - ddspipe::core::types::HistoryDepthType max_history_depth = 5000; - /** * @brief Whether readers that aren't connected to any writers should be deleted. * @@ -70,6 +63,9 @@ struct SpecsConfiguration : public ddspipe::core::IConfiguration * @warning Setting it to true is incompatible with transient-local durability. */ bool remove_unused_entities = false; + + //! The globally configured Topic QoS. + ddspipe::core::types::TopicQoS topic_qos{}; }; } /* namespace core */ diff --git a/ddsrouter_core/include/ddsrouter_core/core/DdsRouter.hpp b/ddsrouter_core/include/ddsrouter_core/core/DdsRouter.hpp index ea1c756e8..d335c4b9d 100644 --- a/ddsrouter_core/include/ddsrouter_core/core/DdsRouter.hpp +++ b/ddsrouter_core/include/ddsrouter_core/core/DdsRouter.hpp @@ -26,7 +26,6 @@ #include #include -#include #include namespace eprosima { @@ -78,7 +77,7 @@ class DdsRouter * @throw \c ConfigurationException in case the new yaml is not well-formed */ DDSROUTER_CORE_DllAPI utils::ReturnCode reload_configuration( - const DdsRouterReloadConfiguration& configuration); + const DdsRouterConfiguration& configuration); /** * @brief Start communication in DDS Router @@ -104,13 +103,6 @@ class DdsRouter protected: - /** - * @brief Load allowed topics from configuration - * - * @throw \c ConfigurationException in case the yaml inside allowlist is not well-formed - */ - void init_allowed_topics_(); - /** * @brief Create participants and add them to the participants database * @@ -119,6 +111,7 @@ class DdsRouter */ void init_participants_(); + DdsRouterConfiguration configuration_; std::shared_ptr discovery_database_; diff --git a/ddsrouter_core/src/cpp/configuration/DdsRouterConfiguration.cpp b/ddsrouter_core/src/cpp/configuration/DdsRouterConfiguration.cpp index bcd8f7001..b945e738d 100644 --- a/ddsrouter_core/src/cpp/configuration/DdsRouterConfiguration.cpp +++ b/ddsrouter_core/src/cpp/configuration/DdsRouterConfiguration.cpp @@ -25,29 +25,15 @@ #include #include -#include #include namespace eprosima { namespace ddsrouter { namespace core { -void DdsRouterConfiguration::reload( - const DdsRouterReloadConfiguration& new_configuration) -{ - this->allowlist = new_configuration.allowlist; - this->blocklist = new_configuration.blocklist; -} - bool DdsRouterConfiguration::is_valid( utils::Formatter& error_msg) const noexcept { - // Check Allow list topics - if (!DdsRouterReloadConfiguration::is_valid(error_msg)) - { - return false; - } - // Check there are at least two participants if (participants_configurations.size() < 1) { diff --git a/ddsrouter_core/src/cpp/configuration/DdsRouterReloadConfiguration.cpp b/ddsrouter_core/src/cpp/configuration/DdsRouterReloadConfiguration.cpp deleted file mode 100644 index a25f44e99..000000000 --- a/ddsrouter_core/src/cpp/configuration/DdsRouterReloadConfiguration.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2023 Proyectos y Sistemas de Mantenimiento SL (eProsima). -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** - * @file DdsRouterReloadConfiguration.cpp - * - */ - -#include - -#include -#include -#include - -#include - -#include - -namespace eprosima { -namespace ddsrouter { -namespace core { - -bool DdsRouterReloadConfiguration::is_valid( - utils::Formatter& error_msg) const noexcept -{ - // utils::Heritable objects cannot initialize its internal pointer to nullptr. - // Therfore, the previous comparison that checked that the topic (shared_ptr) is not nullptr does not apply anymore. - return true; -} - -} /* namespace core */ -} /* namespace ddsrouter */ -} /* namespace eprosima */ diff --git a/ddsrouter_core/src/cpp/configuration/SpecsConfiguration.cpp b/ddsrouter_core/src/cpp/configuration/SpecsConfiguration.cpp index 22f93e7c2..77f6c474e 100644 --- a/ddsrouter_core/src/cpp/configuration/SpecsConfiguration.cpp +++ b/ddsrouter_core/src/cpp/configuration/SpecsConfiguration.cpp @@ -35,7 +35,7 @@ bool SpecsConfiguration::is_valid( return false; } - if (max_history_depth == 0) + if (topic_qos.history_depth == 0U) { logWarning(DDSROUTER_SPECS, "Using non limited histories could lead to memory exhaustion in long executions."); } diff --git a/ddsrouter_core/src/cpp/core/DdsRouter.cpp b/ddsrouter_core/src/cpp/core/DdsRouter.cpp index ba1322e6c..ee37f58e3 100644 --- a/ddsrouter_core/src/cpp/core/DdsRouter.cpp +++ b/ddsrouter_core/src/cpp/core/DdsRouter.cpp @@ -27,7 +27,6 @@ #include #include -#include #include namespace eprosima { @@ -53,38 +52,20 @@ DdsRouter::DdsRouter( "Configuration for DDS Router is invalid: " << error_msg); } - // Set default value for history - ddspipe::core::types::TopicQoS::default_history_depth.store( - configuration_.advanced_options.max_history_depth); - - // Init topic allowed - init_allowed_topics_(); // Load Participants init_participants_(); - // Create DdsPipe instance + // Initialize the DdsPipe ddspipe_ = std::unique_ptr(new ddspipe::core::DdsPipe( - allowed_topics_, + configuration_.ddspipe_configuration, discovery_database_, payload_pool_, participants_database_, - thread_pool_, - configuration_.builtin_topics, - false, - configuration_.ddspipe_configuration)); + thread_pool_)); logDebug(DDSROUTER, "DDS Router created."); } -void DdsRouter::init_allowed_topics_() -{ - allowed_topics_ = std::make_shared( - configuration_.allowlist, - configuration_.blocklist); - - logInfo(DDSROUTER, "DDS Router configured with allowed topics: " << *allowed_topics_); -} - void DdsRouter::init_participants_() { for (std::pair( - new_configuration.allowlist, - new_configuration.blocklist); - - return ddspipe_->reload_allowed_topics(allowed_topics_); + // Reload the DdsPipe configuration, since it is the only reconfigurable attribute. + return ddspipe_->reload_configuration(new_configuration.ddspipe_configuration); } utils::ReturnCode DdsRouter::start() noexcept diff --git a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/WAN/DDSTestWAN.cpp b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/WAN/DDSTestWAN.cpp index 00a842616..26584f1f1 100644 --- a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/WAN/DDSTestWAN.cpp +++ b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/WAN/DDSTestWAN.cpp @@ -236,7 +236,7 @@ DdsRouterConfiguration router_configuration( // One topic core::types::WildcardDdsFilterTopic topic; topic.topic_name.set_value(TOPIC_NAME); - conf.allowlist.insert( + conf.ddspipe_configuration.allowlist.insert( utils::Heritable::make_heritable(topic)); // Two participants, one custom and other simple. If server, simple will work in 0, if not in 1 diff --git a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocal.cpp b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocal.cpp index 8a20c881c..e88614c2f 100644 --- a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocal.cpp +++ b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocal.cpp @@ -55,7 +55,7 @@ DdsRouterConfiguration dds_test_simple_configuration( // Always filter the test topics by topic name core::types::WildcardDdsFilterTopic topic; topic.topic_name.set_value(TOPIC_NAME); - conf.allowlist.insert( + conf.ddspipe_configuration.allowlist.insert( utils::Heritable::make_heritable(topic)); if (disable_dynamic_discovery) @@ -81,8 +81,9 @@ DdsRouterConfiguration dds_test_simple_configuration( topic_keyed.type_name = "HelloWorldKeyed"; topic_keyed.topic_qos.keyed = true; - conf.builtin_topics.insert(utils::Heritable::make_heritable(topic)); - conf.builtin_topics.insert(utils::Heritable::make_heritable(topic_keyed)); + conf.ddspipe_configuration.builtin_topics.insert(utils::Heritable::make_heritable(topic)); + conf.ddspipe_configuration.builtin_topics.insert(utils::Heritable::make_heritable( + topic_keyed)); } // Two simple participants diff --git a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocalDisposeKey.cpp b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocalDisposeKey.cpp index 3461003fd..5e9b3df27 100644 --- a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocalDisposeKey.cpp +++ b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/local/DDSTestLocalDisposeKey.cpp @@ -54,7 +54,7 @@ DdsRouterConfiguration dds_test_simple_configuration() // Always filter the test topics by topic name core::types::WildcardDdsFilterTopic topic; topic.topic_name.set_value(TOPIC_NAME); - conf.allowlist.insert( + conf.ddspipe_configuration.allowlist.insert( utils::Heritable::make_heritable(topic)); // Two simple participants diff --git a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/repeater/DDSTestRepeater.cpp b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/repeater/DDSTestRepeater.cpp index a8e910098..565cffc16 100644 --- a/ddsrouter_core/test/blackbox/ddsrouter_core/dds/repeater/DDSTestRepeater.cpp +++ b/ddsrouter_core/test/blackbox/ddsrouter_core/dds/repeater/DDSTestRepeater.cpp @@ -129,7 +129,7 @@ DdsRouterConfiguration router_configuration( // One topic core::types::WildcardDdsFilterTopic topic; topic.topic_name.set_value(TOPIC_NAME); - conf.allowlist.insert( + conf.ddspipe_configuration.allowlist.insert( utils::Heritable::make_heritable(topic)); // Two participants, one custom and other simple. If server, simple will work in 0, if not in 1 diff --git a/ddsrouter_core/test/blackbox/implementations/ImplementationsTest.cpp b/ddsrouter_core/test/blackbox/implementations/ImplementationsTest.cpp index 4bcf0cbfb..92ff1c89d 100644 --- a/ddsrouter_core/test/blackbox/implementations/ImplementationsTest.cpp +++ b/ddsrouter_core/test/blackbox/implementations/ImplementationsTest.cpp @@ -28,13 +28,6 @@ #include #include -namespace test { - -constexpr const unsigned int DEFAULT_THREAD_POOL_SIZE = 2; -constexpr const unsigned int DEFAULT_MAX_HISTORY_DEPTH = 100; - -} /* namespace test */ - using namespace eprosima; using namespace eprosima::ddsrouter::core; using namespace eprosima::ddsrouter::core::types; @@ -124,7 +117,7 @@ TEST(ImplementationsTest, pair_implementation_with_topic) eprosima::ddspipe::core::types::DdsTopic topic; topic.m_topic_name = "rt/chatter"; topic.type_name = "std_msgs::msg::dds_::String_"; - configuration.builtin_topics.insert( + configuration.ddspipe_configuration.builtin_topics.insert( utils::Heritable::make_heritable(topic)); // Create DdsRouter entity diff --git a/ddsrouter_test/compose/CMakeLists.txt b/ddsrouter_test/compose/CMakeLists.txt index a6c0292bc..398847272 100644 --- a/ddsrouter_test/compose/CMakeLists.txt +++ b/ddsrouter_test/compose/CMakeLists.txt @@ -51,6 +51,17 @@ set(TESTS remove_unused_entities/persist_same_domain remove_unused_entities/reconnect remove_unused_entities/reconnect_wan + + frequency/max-tx-rate/specs + frequency/max-tx-rate/participant + frequency/max-rx-rate/specs + frequency/max-rx-rate/participant + frequency/downsampling/specs + frequency/downsampling/participant + + manual_topics/generic + manual_topics/participants + manual_topics/precedence ) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test_cases DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/ddsrouter_test/compose/scripts/execute_and_validate_publisher.py b/ddsrouter_test/compose/scripts/execute_and_validate_publisher.py index 5d3c856d7..713a81142 100644 --- a/ddsrouter_test/compose/scripts/execute_and_validate_publisher.py +++ b/ddsrouter_test/compose/scripts/execute_and_validate_publisher.py @@ -19,7 +19,7 @@ import validation DESCRIPTION = """Script to validate the publishers' output""" -USAGE = ('python3 validate_publisher.py -e ') +USAGE = ('python3 execute_and_validate_publisher.py -e ') def parse_options(): diff --git a/ddsrouter_test/compose/scripts/execute_and_validate_subscriber.py b/ddsrouter_test/compose/scripts/execute_and_validate_subscriber.py index 4bdc74ccb..0275d8159 100644 --- a/ddsrouter_test/compose/scripts/execute_and_validate_subscriber.py +++ b/ddsrouter_test/compose/scripts/execute_and_validate_subscriber.py @@ -19,7 +19,7 @@ import validation DESCRIPTION = """Script to validate subscribers output""" -USAGE = ('python3 validate_subscriber.py -e ') +USAGE = ('python3 execute_and_validate_subscriber.py -e ') def parse_options(): @@ -85,6 +85,18 @@ def parse_options(): default=0, help='Time to wait before executing the command.' ) + parser.add_argument( + '--min-time', + type=int, + default=0, + help='Minimum amount of seconds the command should take before finishing.' + ) + parser.add_argument( + '--max-time', + type=int, + default=0, + help='Maximum amount of seconds the command should take before finishing.' + ) return parser.parse_args() @@ -239,7 +251,9 @@ def check_transient(data): parse_output_function=_subscriber_parse_output, validate_output_function=validate_func, parse_retcode_function=_subscriber_get_retcode_validate(args.samples), - timeout_as_error=args.samples > 0) + timeout_as_error=args.samples > 0, + min_time=args.min_time, + max_time=args.max_time) log.logger.info(f'Subscriber validator exited with code {ret_code}') diff --git a/ddsrouter_test/compose/scripts/validation.py b/ddsrouter_test/compose/scripts/validation.py index daa1c7648..e0c83ea71 100644 --- a/ddsrouter_test/compose/scripts/validation.py +++ b/ddsrouter_test/compose/scripts/validation.py @@ -33,6 +33,8 @@ class ReturnCode(Enum): COMMAND_FAIL = 4 STDERR_OUTPUT = 5 NOT_VALID_DISCONNECTS = 6 + FINISHED_TOO_QUICKLY = 7 + FINISHED_TOO_SLOWLY = 8 """ @@ -162,7 +164,9 @@ def run_and_validate( validate_output_function, delay: float = 0, timeout_as_error: bool = True, - parse_retcode_function=validate_retcode_default): + parse_retcode_function=validate_retcode_default, + min_time: int = 0, + max_time: int = 0): """ Run the subscriber and validate its output. @@ -174,13 +178,31 @@ def run_and_validate( :return: exit code """ + starting_time = time.time() + ret_code, stdout, stderr = run_command( command=command, timeout=timeout, delay=delay, timeout_as_error=timeout_as_error) - if not parse_retcode_function(ret_code): + finishing_time = time.time() + + elapsed_time = finishing_time - starting_time + + if elapsed_time < min_time: + log.logger.error( + 'Executable exited before min-time.') + + return ReturnCode.FINISHED_TOO_QUICKLY + + elif max_time > 0 and elapsed_time > max_time: + log.logger.error( + 'Executable exited after max-time.') + + return ReturnCode.FINISHED_TOO_SLOWLY + + elif not parse_retcode_function(ret_code): log.logger.error( f'Executable exited with ' f'return code {ret_code}' diff --git a/ddsrouter_test/compose/test_cases/dds/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/dds/ddsrouter.yaml index 98a35541c..e4e60cb8f 100644 --- a/ddsrouter_test/compose/test_cases/dds/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/dds/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: raw: | diff --git a/ddsrouter_test/compose/test_cases/dds_rtps/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/dds_rtps/ddsrouter.yaml index 1fdb51b90..6a39421ca 100644 --- a/ddsrouter_test/compose/test_cases/dds_rtps/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/dds_rtps/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: raw: | diff --git a/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_cloud_discovery.yaml b/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_cloud_discovery.yaml index deb43c86d..fe59e5258 100644 --- a/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_cloud_discovery.yaml +++ b/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_cloud_discovery.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_1.yaml index 095a2f45d..5964b7399 100644 --- a/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_2.yaml index b282810d8..03693547f 100644 --- a/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/discovery_server/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/forwarding_routes/basic_route/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/forwarding_routes/basic_route/ddsrouter.yaml index 7a2b41829..92248549f 100644 --- a/ddsrouter_test/compose/test_cases/forwarding_routes/basic_route/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/forwarding_routes/basic_route/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/forwarding_routes/parallel_routes/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/forwarding_routes/parallel_routes/ddsrouter.yaml index a3a05b9d2..148ee8b13 100644 --- a/ddsrouter_test/compose/test_cases/forwarding_routes/parallel_routes/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/forwarding_routes/parallel_routes/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_cloud.yaml b/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_cloud.yaml index 9d1b64978..ab37eced0 100644 --- a/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_cloud.yaml +++ b/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_cloud.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_1.yaml index 115f9e705..292fd7c59 100644 --- a/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_2.yaml index 2dfee643f..2136df96e 100644 --- a/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/forwarding_routes/repeater/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: @@ -12,4 +12,3 @@ participants: - domain: ddsrouter_cloud port: 21666 transport: udp - diff --git a/ddsrouter_test/compose/test_cases/forwarding_routes/topic_routes/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/forwarding_routes/topic_routes/ddsrouter.yaml index 72676f9e1..70735d2a7 100644 --- a/ddsrouter_test/compose/test_cases/forwarding_routes/topic_routes/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/forwarding_routes/topic_routes/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/frequency/downsampling/participant/compose.yml b/ddsrouter_test/compose/test_cases/frequency/downsampling/participant/compose.yml new file mode 100644 index 000000000..d2e2f21ba --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/downsampling/participant/compose.yml @@ -0,0 +1,77 @@ +# Test description: +# This test checks that if we set up a router that has a participant A with a downsampling +# factor of N configured and a participant B without it, participant A will only process one +# out of N messages while participant B will process every message. More concretely, this test +# checks that the sending frequency of the router in the topic received by participant A is +# reduced by a factor of N. +# +# Test architecture: +# +# ┌──────────────┐ ┌───────────────┐ +# │publisher_0_t0│ │subscriber_2_t0│ +# │ │ │ │ +# │(local) │ │(local) │ +# └────────────┬─┘ └─▲─────────────┘ +# │ topic_0 10 Hz ┌─────────┐ topic_0 10 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 20 Hz └─────────┘ topic_1 5 Hz │ +# ┌────────────┴─┐ ┌─▼─────────────┐ +# │publisher_1_t1│ │subscriber_3_t1│ +# │ │ │ │ +# │(local) │ │(local) │ +# └──────────────┘ └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + # DOMAIN 1 + publisher_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_1_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 50 --samples 160 --domain 81 --topic topic_1 + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 2 --max-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + # DOMAIN 3 + subscriber_3_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_3_t1 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 83 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/frequency/downsampling/participant/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/frequency/downsampling/participant/ddsrouter.yaml new file mode 100644 index 000000000..e8f83f3f9 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/downsampling/participant/ddsrouter.yaml @@ -0,0 +1,23 @@ +version: v4.0 + + +participants: + - name: Local_80 + kind: local + domain: 80 + qos: + downsampling: 1 + + - name: Local_81 + kind: local + domain: 81 + qos: + downsampling: 4 + + - name: Local_82 + kind: local + domain: 82 + + - name: Local_83 + kind: local + domain: 83 diff --git a/ddsrouter_test/compose/test_cases/frequency/downsampling/specs/compose.yml b/ddsrouter_test/compose/test_cases/frequency/downsampling/specs/compose.yml new file mode 100644 index 000000000..eb5d54fde --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/downsampling/specs/compose.yml @@ -0,0 +1,75 @@ +# Test description: +# This test checks that if we set up a router with a globally configured downsampling factor of N, +# every participant only processes one out of every N messages. More concretely, this test checks +# that the sending frequency of the router is reduced by a factor of N. +# +# Test architecture: +# +# ┌──────────────┐ ┌───────────────┐ +# │publisher_0_t0│ │subscriber_2_t0│ +# │ │ │ │ +# │(local) │ │(local) │ +# └────────────┬─┘ └─▲─────────────┘ +# │ topic_0 10 Hz ┌─────────┐ topic_0 5 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 20 Hz └─────────┘ topic_1 10 Hz │ +# ┌────────────┴─┐ ┌─▼─────────────┐ +# │publisher_1_t1│ │subscriber_3_t1│ +# │ │ │ │ +# │(local) │ │(local) │ +# └──────────────┘ └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + # DOMAIN 1 + publisher_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_1_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 50 --samples 160 --domain 81 --topic topic_1 + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + # DOMAIN 3 + subscriber_3_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_3_t1 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 2 --max-time 4 --args "--samples 20 --domain 83 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/frequency/downsampling/specs/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/frequency/downsampling/specs/ddsrouter.yaml new file mode 100644 index 000000000..0d88e9431 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/downsampling/specs/ddsrouter.yaml @@ -0,0 +1,23 @@ +version: v4.0 + + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + + - name: Local_82 + kind: local + domain: 82 + + - name: Local_83 + kind: local + domain: 83 + +specs: + qos: + downsampling: 2 diff --git a/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/participant/compose.yml b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/participant/compose.yml new file mode 100644 index 000000000..3dd380a5a --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/participant/compose.yml @@ -0,0 +1,75 @@ +# Test description: +# This test checks that if we set up a router that has a participant A with a max-rx-rate +# configured and a participant B without it, participant A will receive messages at the +# max-rx-rate specified while participant B will receive messages at full rate. +# +# Test architecture: +# +# ┌──────────────┐ ┌───────────────┐ +# │publisher_0_t0│ │subscriber_2_t0│ +# │ │ │ │ +# │(local) │ │(local) │ +# └────────────┬─┘ └─▲─────────────┘ +# │ topic_0 10 Hz ┌─────────┐ topic_0 5 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 20 Hz └─────────┘ topic_1 10 Hz │ +# ┌────────────┴─┐ ┌─▼─────────────┐ +# │publisher_1_t1│ │subscriber_3_t1│ +# │ │ │ │ +# │(local) │ │(local) │ +# └──────────────┘ └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + # DOMAIN 1 + publisher_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_1_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 50 --samples 160 --domain 81 --topic topic_1 + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + # DOMAIN 3 + subscriber_3_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_3_t1 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 2 --max-time 4 --args "--samples 20 --domain 83 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/participant/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/participant/ddsrouter.yaml new file mode 100644 index 000000000..9e938b050 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/participant/ddsrouter.yaml @@ -0,0 +1,23 @@ +version: v4.0 + + +participants: + - name: Local_80 + kind: local + domain: 80 + qos: + max-rx-rate: 5 + + - name: Local_81 + kind: local + domain: 81 + qos: + max-rx-rate: 10 + + - name: Local_82 + kind: local + domain: 82 + + - name: Local_83 + kind: local + domain: 83 diff --git a/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/specs/compose.yml b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/specs/compose.yml new file mode 100644 index 000000000..362ac4933 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/specs/compose.yml @@ -0,0 +1,74 @@ +# Test description: +# This test checks that if we set up a router with a globally configured max-rx-rate, +# every participant receives data at the max-rx-rate specified. +# +# Test architecture: +# +# ┌──────────────┐ ┌───────────────┐ +# │publisher_0_t0│ │subscriber_2_t0│ +# │ │ │ │ +# │(local) │ │(local) │ +# └────────────┬─┘ └─▲─────────────┘ +# │ topic_0 10 Hz ┌─────────┐ topic_0 5 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 20 Hz └─────────┘ topic_1 5 Hz │ +# ┌────────────┴─┐ ┌─▼─────────────┐ +# │publisher_1_t1│ │subscriber_3_t1│ +# │ │ │ │ +# │(local) │ │(local) │ +# └──────────────┘ └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + # DOMAIN 1 + publisher_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_1_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 50 --samples 160 --domain 81 --topic topic_1 + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + # DOMAIN 3 + subscriber_3_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_3_t1 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 83 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/specs/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/specs/ddsrouter.yaml new file mode 100644 index 000000000..8c25893b6 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-rx-rate/specs/ddsrouter.yaml @@ -0,0 +1,23 @@ +version: v4.0 + + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + + - name: Local_82 + kind: local + domain: 82 + + - name: Local_83 + kind: local + domain: 83 + +specs: + qos: + max-rx-rate: 5 diff --git a/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/participant/compose.yml b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/participant/compose.yml new file mode 100644 index 000000000..b66d8bcc6 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/participant/compose.yml @@ -0,0 +1,63 @@ +# Test description: +# This test checks that if we set up a router that has two participants with two +# different max-tx-rates configured, the subscribers connected to these participants +# receive the messages at the max-tx-rate specified in the participant they are +# connected to. +# +# Test architecture: +# topic_0 10 Hz┌────────────┐ +# ┌──────────────►subscriber_1│ +# │ │ │ +# ┌───────────┐ ┌───────┴─┐ │(local) │ +# │publisher_0│topic_0 20 Hz│ddsrouter│ └────────────┘ +# │ ├─────────────► │ +# │(local) │ │(local) │ ┌────────────┐ +# └───────────┘ └───────┬─┘ │subscriber_2│ +# │ topic_0 5 Hz│ │ +# └──────────────►(local) │ +# └────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 50 --samples 160 --domain 80 --topic topic_0 + + # DOMAIN 1 + subscriber_1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 2 --max-time 4 --args "--samples 20 --domain 81 --topic topic_0" + + # DOMAIN 2 + subscriber_2: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/participant/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/participant/ddsrouter.yaml new file mode 100644 index 000000000..11b05b581 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/participant/ddsrouter.yaml @@ -0,0 +1,19 @@ +version: v4.0 + + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + qos: + max-tx-rate: 10 + + - name: Local_82 + kind: local + domain: 82 + qos: + max-tx-rate: 5 diff --git a/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/specs/compose.yml b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/specs/compose.yml new file mode 100644 index 000000000..702217317 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/specs/compose.yml @@ -0,0 +1,61 @@ +# Test description: +# This test checks that if we set up a router with a globally configured max-tx-rate, +# every participant forwards data at the max-tx-rate specified. +# +# Test architecture: +# topic_0 5 Hz┌────────────┐ +# ┌──────────────►subscriber_1│ +# │ │ │ +# ┌───────────┐ ┌───────┴─┐ │(local) │ +# │publisher_0│topic_0 10 Hz│ddsrouter│ └────────────┘ +# │ ├─────────────► │ +# │(local) │ │(local) │ ┌────────────┐ +# └───────────┘ └───────┬─┘ │subscriber_2│ +# │ topic_0 5 Hz│ │ +# └──────────────►(local) │ +# └────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + # DOMAIN 1 + subscriber_1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 81 --topic topic_0" + + # DOMAIN 2 + subscriber_2: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2 + networks: + - std_net + volumes: + - ../../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/specs/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/specs/ddsrouter.yaml new file mode 100644 index 000000000..85a684f28 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/frequency/max-tx-rate/specs/ddsrouter.yaml @@ -0,0 +1,19 @@ +version: v4.0 + + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + + - name: Local_82 + kind: local + domain: 82 + +specs: + qos: + max-tx-rate: 5 diff --git a/ddsrouter_test/compose/test_cases/manual_topics/generic/compose.yml b/ddsrouter_test/compose/test_cases/manual_topics/generic/compose.yml new file mode 100644 index 000000000..56257d1d8 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/manual_topics/generic/compose.yml @@ -0,0 +1,103 @@ +# Test description: +# This test checks that if we set up a router with two manually configured topics +# without specifying to which participants it applies, it applies to all participants. +# +# Test architecture: +# +# ┌───────────────┐ +# │subscriber_1_t0│ +# │ │ +# ┌────────────────►(local) │ +# │ topic_0 5 Hz └───────────────┘ +# │ +# ┌──────────────┐ │ ┌───────────────┐ +# │publisher_0_t0│ │ │subscriber_1_t1│ +# │ │ │ │ │ +# │(local) │ │ │(local) │ +# └────────────┬─┘ │ └─▲─────────────┘ +# │ topic_0 10 Hz ┌───────┴─┐ topic_1 5 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 10 Hz └───────┬─┘ topic_0 5 Hz │ +# ┌────────────┴─┐ │ ┌─▼─────────────┐ +# │publisher_0_t1│ │ │subscriber_2_t0│ +# │ │ │ │ │ +# │(local) │ │ │(local) │ +# └──────────────┘ │ └───────────────┘ +# │ +# │ topic_1 5 Hz ┌───────────────┐ +# └────────────────►subscriber_2_t1│ +# │ │ +# │(local) │ +# └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + publisher_0_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_1 + + # DOMAIN 1 + subscriber_1_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1_t0 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 81 --topic topic_0" + + subscriber_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1_t1 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 81 --topic topic_1" + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + subscriber_2_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t1 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/manual_topics/generic/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/manual_topics/generic/ddsrouter.yaml new file mode 100644 index 000000000..8c67b443e --- /dev/null +++ b/ddsrouter_test/compose/test_cases/manual_topics/generic/ddsrouter.yaml @@ -0,0 +1,23 @@ +version: v4.0 + +topics: + - name: topic_0 + qos: + max-tx-rate: 5 + + - name: topic_1 + qos: + max-tx-rate: 5 + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + + - name: Local_82 + kind: local + domain: 82 diff --git a/ddsrouter_test/compose/test_cases/manual_topics/participants/compose.yml b/ddsrouter_test/compose/test_cases/manual_topics/participants/compose.yml new file mode 100644 index 000000000..bb15c022f --- /dev/null +++ b/ddsrouter_test/compose/test_cases/manual_topics/participants/compose.yml @@ -0,0 +1,103 @@ +# Test description: +# This test checks that if we set up a router with two manually configured topics, +# the manually configured topic qos get applied for the specified participants. +# +# Test architecture: +# +# ┌───────────────┐ +# │subscriber_1_t0│ +# │ │ +# ┌────────────────►(local) │ +# │ topic_0 5 Hz └───────────────┘ +# │ +# ┌──────────────┐ │ ┌───────────────┐ +# │publisher_0_t0│ │ │subscriber_1_t1│ +# │ │ │ │ │ +# │(local) │ │ │(local) │ +# └────────────┬─┘ │ └─▲─────────────┘ +# │ topic_0 10 Hz ┌───────┴─┐ topic_1 10 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 10 Hz └───────┬─┘ topic_0 10 Hz │ +# ┌────────────┴─┐ │ ┌─▼─────────────┐ +# │publisher_0_t1│ │ │subscriber_2_t0│ +# │ │ │ │ │ +# │(local) │ │ │(local) │ +# └──────────────┘ │ └───────────────┘ +# │ +# │ topic_1 5 Hz ┌───────────────┐ +# └────────────────►subscriber_2_t1│ +# │ │ +# │(local) │ +# └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + publisher_0_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_1 + + # DOMAIN 1 + subscriber_1_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1_t0 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 81 --topic topic_0" + + subscriber_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1_t1 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 2 --max-time 4 --args "--samples 20 --domain 81 --topic topic_1" + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 2 --max-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + subscriber_2_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t1 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/manual_topics/participants/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/manual_topics/participants/ddsrouter.yaml new file mode 100644 index 000000000..75ab7b898 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/manual_topics/participants/ddsrouter.yaml @@ -0,0 +1,27 @@ +version: v4.0 + +topics: + - name: topic_0 + qos: + max-tx-rate: 5 + participants: + - Local_81 + + - name: topic_1 + qos: + max-tx-rate: 5 + participants: + - Local_82 + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + + - name: Local_82 + kind: local + domain: 82 diff --git a/ddsrouter_test/compose/test_cases/manual_topics/precedence/compose.yml b/ddsrouter_test/compose/test_cases/manual_topics/precedence/compose.yml new file mode 100644 index 000000000..64646b770 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/manual_topics/precedence/compose.yml @@ -0,0 +1,104 @@ +# Test description: +# This test checks that if we set up a router with Topic QoS configured globally and +# at the participant and topic levels, the topic level prevails over the participant +# level and the participant level pravails over the specs level. +# +# Test architecture: +# +# ┌───────────────┐ +# │subscriber_1_t0│ +# │ │ +# ┌────────────────►(local) │ +# │ topic_0 5 Hz └───────────────┘ +# │ +# ┌──────────────┐ │ ┌───────────────┐ +# │publisher_0_t0│ │ │subscriber_1_t1│ +# │ │ │ │ │ +# │(local) │ │ │(local) │ +# └────────────┬─┘ │ └─▲─────────────┘ +# │ topic_0 10 Hz ┌───────┴─┐ topic_1 10 Hz │ +# └─────────────────►ddsrouter├────────────────┘ +# │ │ +# ┌─────────────────►(local) ├────────────────┐ +# │ topic_1 10 Hz └───────┬─┘ topic_0 5 Hz │ +# ┌────────────┴─┐ │ ┌─▼─────────────┐ +# │publisher_0_t1│ │ │subscriber_2_t0│ +# │ │ │ │ │ +# │(local) │ │ │(local) │ +# └──────────────┘ │ └───────────────┘ +# │ +# │ topic_1 5 Hz ┌───────────────┐ +# └────────────────►subscriber_2_t1│ +# │ │ +# │(local) │ +# └───────────────┘ + +services: + + # ROUTER + ddsrouter: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: ddsrouter + networks: + - std_net + volumes: + - ./ddsrouter.yaml:/config.yaml + command: ddsrouter -c /config.yaml --timeout 8 + + # DOMAIN 0 + publisher_0_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t0 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_0 + + publisher_0_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: publisher_0_t1 + networks: + - std_net + command: install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample publisher --interval 100 --samples 80 --domain 80 --topic topic_1 + + # DOMAIN 1 + subscriber_1_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1_t0 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 81 --topic topic_0" + + subscriber_1_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_1_t1 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 40 --timeout 8 --min-time 4 --args "--samples 40 --domain 81 --topic topic_1" + + # DOMAIN 2 + subscriber_2_t0: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t0 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_0" + + subscriber_2_t1: + image: ${DDSROUTER_COMPOSE_TEST_DOCKER_IMAGE} + container_name: subscriber_2_t1 + networks: + - std_net + volumes: + - ../../../scripts:/scripts + command: python3 /scripts/execute_and_validate_subscriber.py --exe install/AdvancedConfigurationExample/examples/cpp/dds/AdvancedConfigurationExample/AdvancedConfigurationExample --samples 20 --timeout 8 --min-time 4 --args "--samples 20 --domain 82 --topic topic_1" + +networks: + std_net: + default: + driver: none diff --git a/ddsrouter_test/compose/test_cases/manual_topics/precedence/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/manual_topics/precedence/ddsrouter.yaml new file mode 100644 index 000000000..b28717fa6 --- /dev/null +++ b/ddsrouter_test/compose/test_cases/manual_topics/precedence/ddsrouter.yaml @@ -0,0 +1,27 @@ +version: v4.0 + +topics: + - name: topic_0 + qos: + max-tx-rate: 5 + participants: + - Local_81 + +participants: + - name: Local_80 + kind: local + domain: 80 + + - name: Local_81 + kind: local + domain: 81 + qos: + max-tx-rate: 10 + + - name: Local_82 + kind: local + domain: 82 + +specs: + qos: + max-tx-rate: 5 diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect/ddsrouter.yaml index 60d4ee7df..052f1778a 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_0.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_0.yaml index 821316e1c..377d816b0 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_0.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_0.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_1.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_1.yaml index 2a7a6eb31..3a09f6dfd 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_1.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_cloud_1.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_0.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_0.yaml index 5060a5536..a849dea42 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_0.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_0.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_1.yaml index c48436533..5811e3291 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/disconnect_wan/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_diff_domain/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_diff_domain/ddsrouter.yaml index 121dd0c37..1194c3023 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_diff_domain/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_diff_domain/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_same_domain/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_same_domain/ddsrouter.yaml index 60d4ee7df..052f1778a 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_same_domain/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/persist_same_domain/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect/ddsrouter.yaml index 60d4ee7df..052f1778a 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_0.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_0.yaml index 821316e1c..377d816b0 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_0.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_0.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_1.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_1.yaml index 2a7a6eb31..3a09f6dfd 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_1.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_cloud_1.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_0.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_0.yaml index 5060a5536..a849dea42 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_0.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_0.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_1.yaml index c48436533..5811e3291 100644 --- a/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/remove_unused_entities/reconnect_wan/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.1 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/repeater/ddsrouter_cloud.yaml b/ddsrouter_test/compose/test_cases/repeater/ddsrouter_cloud.yaml index ce61dae65..b2fe02474 100644 --- a/ddsrouter_test/compose/test_cases/repeater/ddsrouter_cloud.yaml +++ b/ddsrouter_test/compose/test_cases/repeater/ddsrouter_cloud.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_1.yaml index 115f9e705..292fd7c59 100644 --- a/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_2.yaml index 0ad8aaa37..2136df96e 100644 --- a/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/repeater/ddsrouter_edge_2.yaml @@ -1,9 +1,7 @@ -version: v3.0 +version: v4.0 participants: - - - name: Simple_Participant kind: local domain: 0 diff --git a/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_cloud.yaml b/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_cloud.yaml index 951a13995..2fcff0efc 100644 --- a/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_cloud.yaml +++ b/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_cloud.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_1.yaml index 9aa8dc29b..17226445e 100644 --- a/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_2.yaml index cbe9b3b37..119664411 100644 --- a/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/repeater_tcp/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_cloud.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_cloud.yaml index 632f0f188..7d7e08392 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_cloud.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_cloud.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 allowlist: - name: "*addition_service*" diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_1.yaml index 7f4d9d3fb..e9b4cf9d6 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 allowlist: - name: "*addition_service*" diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_2.yaml index 79a7efa60..7f42b5a06 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_cloud/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_correct_target/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_correct_target/ddsrouter.yaml index 3be1d9671..07193717c 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_correct_target/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_correct_target/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_cloud_repeater.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_cloud_repeater.yaml index 58165ecd0..59b6ab314 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_cloud_repeater.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_cloud_repeater.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_1.yaml index 9aa8dc29b..17226445e 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_2.yaml index cbe9b3b37..119664411 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_cloud_repeater.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_cloud_repeater.yaml index 460c5db2e..c1a0dee2c 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_cloud_repeater.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_cloud_repeater.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_1.yaml index 7e220267b..0993832b6 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_2.yaml index 6fc4f41eb..65b2ecace 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_repeater_with_talker/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_1.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_1.yaml index 40c7bea0c..8960619b4 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_1.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_2.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_2.yaml index eb7347283..3786b9366 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_2.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_simple/ddsrouter_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial/ddsrouter.yaml index 1af179c47..85a1b8d02 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_1.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_1.yaml index 52014e193..74fbbc78b 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_1.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_2.yaml b/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_2.yaml index 3fd0092ab..161e4cb3e 100644 --- a/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_2.yaml +++ b/ddsrouter_test/compose/test_cases/rpc/ros2_services_trivial_multiple/ddsrouter_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/security/backdoor/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/security/backdoor/ddsrouter.yaml index d2224036d..68906549b 100644 --- a/ddsrouter_test/compose/test_cases/security/backdoor/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/security/backdoor/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/ddsrouter_test/compose/test_cases/security/backdoor_dds/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/security/backdoor_dds/ddsrouter.yaml index cc93c8574..f46ce3b4f 100644 --- a/ddsrouter_test/compose/test_cases/security/backdoor_dds/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/security/backdoor_dds/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/ddsrouter_test/compose/test_cases/security/secure_trespassing/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/security/secure_trespassing/ddsrouter.yaml index d2224036d..68906549b 100644 --- a/ddsrouter_test/compose/test_cases/security/secure_trespassing/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/security/secure_trespassing/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_client_secure.yaml b/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_client_secure.yaml index b2c868f33..79424e658 100644 --- a/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_client_secure.yaml +++ b/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_client_secure.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_non_secure.yaml b/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_non_secure.yaml index 8ba01f3ed..58d34c0ff 100644 --- a/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_non_secure.yaml +++ b/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_non_secure.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_server_secure.yaml b/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_server_secure.yaml index 48373c2a1..a2b1fa16e 100644 --- a/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_server_secure.yaml +++ b/ddsrouter_test/compose/test_cases/security/secure_wan/configurations/ddsrouter_server_secure.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/ddsrouter_test/compose/test_cases/tcp/ddsrouter_cloud.yaml b/ddsrouter_test/compose/test_cases/tcp/ddsrouter_cloud.yaml index 1925f7ec6..72ca91a30 100644 --- a/ddsrouter_test/compose/test_cases/tcp/ddsrouter_cloud.yaml +++ b/ddsrouter_test/compose/test_cases/tcp/ddsrouter_cloud.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_1.yaml index 9aa8dc29b..17226445e 100644 --- a/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_2.yaml index 38e56b3b0..36738eb63 100644 --- a/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/tcp/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/transparency/durability/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/transparency/durability/ddsrouter.yaml index 06b70bec9..12f9e6704 100644 --- a/ddsrouter_test/compose/test_cases/transparency/durability/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/transparency/durability/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/transparency/ownership/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/transparency/ownership/ddsrouter.yaml index 5d9cb7349..d9e599dd1 100644 --- a/ddsrouter_test/compose/test_cases/transparency/ownership/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/transparency/ownership/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/transparency/partitions/ddsrouter.yaml b/ddsrouter_test/compose/test_cases/transparency/partitions/ddsrouter.yaml index 97e7eba63..e4aca84e2 100644 --- a/ddsrouter_test/compose/test_cases/transparency/partitions/ddsrouter.yaml +++ b/ddsrouter_test/compose/test_cases/transparency/partitions/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_1.yaml b/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_1.yaml index 71458ecf8..09f89c41b 100644 --- a/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_1.yaml +++ b/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_2.yaml b/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_2.yaml index 5aed90c9e..8adffed74 100644 --- a/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_2.yaml +++ b/ddsrouter_test/compose/test_cases/udp/ddsrouter_cloud_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_1.yaml b/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_1.yaml index b2ee305e6..c7a06d103 100644 --- a/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_1.yaml +++ b/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_1.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_2.yaml b/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_2.yaml index 1317b85c9..94380e8b3 100644 --- a/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_2.yaml +++ b/ddsrouter_test/compose/test_cases/udp/ddsrouter_edge_2.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/ddsrouter_yaml/src/cpp/YamlReaderConfiguration.cpp b/ddsrouter_yaml/src/cpp/YamlReaderConfiguration.cpp index 6cefd87e8..1b0bc2825 100644 --- a/ddsrouter_yaml/src/cpp/YamlReaderConfiguration.cpp +++ b/ddsrouter_yaml/src/cpp/YamlReaderConfiguration.cpp @@ -38,11 +38,23 @@ YamlReaderConfiguration::load_ddsrouter_configuration( version = ddspipe::yaml::YamlReader::get(yml, ddspipe::yaml::VERSION_TAG, ddspipe::yaml::YamlReaderVersion::LATEST); - if (version == ddspipe::yaml::YamlReaderVersion::V_1_0) + switch (version) { - throw eprosima::utils::ConfigurationException( - utils::Formatter() << - "Yaml configuration v1.0 not supported. Please update to latest available version."); + case ddspipe::yaml::YamlReaderVersion::V_4_0: + case ddspipe::yaml::YamlReaderVersion::LATEST: + break; + + case ddspipe::yaml::YamlReaderVersion::V_1_0: + case ddspipe::yaml::YamlReaderVersion::V_2_0: + case ddspipe::yaml::YamlReaderVersion::V_3_0: + case ddspipe::yaml::YamlReaderVersion::V_3_1: + default: + + throw eprosima::utils::ConfigurationException( + utils::Formatter() << + "The yaml configuration version " << version << + " is no longer supported. Please update to v4.0."); + break; } } else @@ -54,6 +66,7 @@ YamlReaderConfiguration::load_ddsrouter_configuration( "Add " << ddspipe::yaml::VERSION_TAG << " tag to your configuration in order to not break compatibility " << "in future releases."); } + logInfo(DDSROUTER_YAML, "Loading DDSRouter configuration with version: " << version << "."); // Load DDS Router Configuration @@ -99,7 +112,7 @@ YamlReaderConfiguration::load_ddsrouter_configuration_from_file( ddspipe::yaml::YamlReaderVersion YamlReaderConfiguration::default_yaml_version() { - return ddspipe::yaml::V_3_1; + return ddspipe::yaml::V_4_0; } } // namespace yaml diff --git a/ddsrouter_yaml/src/cpp/YamlReader_configuration.cpp b/ddsrouter_yaml/src/cpp/YamlReader_configuration.cpp index 5aa55e17b..dd9f56895 100644 --- a/ddsrouter_yaml/src/cpp/YamlReader_configuration.cpp +++ b/ddsrouter_yaml/src/cpp/YamlReader_configuration.cpp @@ -46,19 +46,19 @@ void YamlReader::fill( object.number_of_threads = YamlReader::get(yml, NUMBER_THREADS_TAG, version); } - ///// - // Get optional maximum history depth - if (YamlReader::is_tag_present(yml, MAX_HISTORY_DEPTH_TAG)) - { - object.max_history_depth = YamlReader::get(yml, MAX_HISTORY_DEPTH_TAG, version); - } - ///// // Get optional remove unused entities tag if (YamlReader::is_tag_present(yml, REMOVE_UNUSED_ENTITIES_TAG)) { object.remove_unused_entities = YamlReader::get(yml, REMOVE_UNUSED_ENTITIES_TAG, version); } + + // Optional Topic QoS + if (is_tag_present(yml, SPECS_QOS_TAG)) + { + fill(object.topic_qos, get_value_in_tag(yml, SPECS_QOS_TAG), version); + core::types::TopicQoS::default_topic_qos.set_value(object.topic_qos); + } } template <> @@ -115,15 +115,48 @@ YamlReader::get>( template <> void YamlReader::fill( - ddspipe::core::DdsPipeConfiguration& object, + core::DdsPipeConfiguration& object, const Yaml& yml, const YamlReaderVersion version) { + ///// + // Get optional allowlist + if (YamlReader::is_tag_present(yml, ALLOWLIST_TAG)) + { + auto allowlist_set = YamlReader::get_set(yml, ALLOWLIST_TAG, version); + for (auto const& wild_topic : allowlist_set) + { + auto new_topic = utils::Heritable::make_heritable(wild_topic); + object.allowlist.insert(new_topic); + } + } + + ///// + // Get optional blocklist + if (YamlReader::is_tag_present(yml, BLOCKLIST_TAG)) + { + auto blocklist_set = YamlReader::get_set(yml, BLOCKLIST_TAG, version); + for (auto const& wild_topic : blocklist_set) + { + auto new_topic = utils::Heritable::make_heritable(wild_topic); + object.blocklist.insert(new_topic); + } + } + + ///// + // Get optional builtin topics + if (YamlReader::is_tag_present(yml, BUILTIN_TAG)) + { + object.builtin_topics = YamlReader::get_set>(yml, + BUILTIN_TAG, + version); + } + ///// // Get optional routes if (YamlReader::is_tag_present(yml, ROUTES_TAG)) { - YamlReader::fill( + YamlReader::fill( object.routes, YamlReader::get_value_in_tag(yml, ROUTES_TAG), version); @@ -134,20 +167,28 @@ void YamlReader::fill( if (YamlReader::is_tag_present(yml, TOPIC_ROUTES_TAG)) { // get list, and parse each element as above - YamlReader::fill( + YamlReader::fill( object.topic_routes, YamlReader::get_value_in_tag(yml, TOPIC_ROUTES_TAG), version); } + + ///// + // Get optional topics + if (YamlReader::is_tag_present(yml, TOPICS_TAG)) + { + const auto& manual_topics = YamlReader::get_list(yml, TOPICS_TAG, version); + object.manual_topics = std::vector(manual_topics.begin(), manual_topics.end()); + } } template <> -ddspipe::core::DdsPipeConfiguration YamlReader::get( +core::DdsPipeConfiguration YamlReader::get( const Yaml& yml, const YamlReaderVersion version) { - ddspipe::core::DdsPipeConfiguration object; - fill(object, yml, version); + core::DdsPipeConfiguration object; + fill(object, yml, version); return object; } @@ -157,39 +198,6 @@ void YamlReader::fill( const Yaml& yml, const YamlReaderVersion version) { - ///// - // Get optional allowlist - if (YamlReader::is_tag_present(yml, ALLOWLIST_TAG)) - { - auto allowlist_set = YamlReader::get_set(yml, ALLOWLIST_TAG, version); - for (auto const& wild_topic : allowlist_set) - { - auto new_topic = utils::Heritable::make_heritable(wild_topic); - object.allowlist.insert(new_topic); - } - } - - ///// - // Get optional blocklist - if (YamlReader::is_tag_present(yml, BLOCKLIST_TAG)) - { - auto blocklist_set = YamlReader::get_set(yml, BLOCKLIST_TAG, version); - for (auto const& wild_topic : blocklist_set) - { - auto new_topic = utils::Heritable::make_heritable(wild_topic); - object.blocklist.insert(new_topic); - } - } - - ///// - // Get optional builtin topics - if (YamlReader::is_tag_present(yml, BUILTIN_TAG)) - { - object.builtin_topics = YamlReader::get_set>(yml, - BUILTIN_TAG, - version); - } - ///// // Get participants configurations. Required field, if get_value_in_tag fail propagate exception. auto participants_configurations_yml = YamlReader::get_value_in_tag(yml, COLLECTION_PARTICIPANTS_TAG); @@ -227,14 +235,14 @@ void YamlReader::fill( } // DDS Pipe Configuration - - object.ddspipe_configuration = YamlReader::get(yml, version); + object.ddspipe_configuration = YamlReader::get(yml, version); /* NOTE * * remove_unused_entities is an attribute of SpecsConfiguration because it is under the tag specs, - * but since it is used in the DdsPipe, we have two choices: copying it to the DdsPipeConfiguration, - * as we are doing, or refill the SpecsConfiguraton in the DdsPipeConfiguration fill and take it from there. + * but since it is used in the DdsPipe, we have two choices: copying it from the SpecsConfiguration to the + * DdsPipeConfiguration, as we are doing, or refilling the SpecsConfiguraton in the DdsPipeConfiguration fill and + * taking it from there. */ object.ddspipe_configuration.remove_unused_entities = object.advanced_options.remove_unused_entities; @@ -242,7 +250,7 @@ void YamlReader::fill( // Get optional xml configuration if (YamlReader::is_tag_present(yml, XML_TAG)) { - YamlReader::fill( + YamlReader::fill( object.xml_configuration, YamlReader::get_value_in_tag(yml, XML_TAG), version); diff --git a/ddsrouter_yaml/test/unittest/configuration/CMakeLists.txt b/ddsrouter_yaml/test/unittest/configuration/CMakeLists.txt index 503df9679..2fc929fcf 100644 --- a/ddsrouter_yaml/test/unittest/configuration/CMakeLists.txt +++ b/ddsrouter_yaml/test/unittest/configuration/CMakeLists.txt @@ -25,15 +25,18 @@ set(TEST_SOURCES ) set(TEST_LIST - ddsrouter_configuration_v1_not_supported - get_ddsrouter_configuration_v2 + # ddsrouter_configuration_v1_not_supported + # get_ddsrouter_configuration_v2 get_ddsrouter_configuration_no_version version_negative_cases number_of_threads - max_history_depth remove_unused_entities valid_routes invalid_routes + history_depth + max_tx_rate + max_rx_rate + downsampling ) set(TEST_EXTRA_LIBRARIES diff --git a/ddsrouter_yaml/test/unittest/configuration/YamlGetConfigurationDdsRouterTest.cpp b/ddsrouter_yaml/test/unittest/configuration/YamlGetConfigurationDdsRouterTest.cpp index 47bab0cda..6a52b86b4 100644 --- a/ddsrouter_yaml/test/unittest/configuration/YamlGetConfigurationDdsRouterTest.cpp +++ b/ddsrouter_yaml/test/unittest/configuration/YamlGetConfigurationDdsRouterTest.cpp @@ -39,7 +39,7 @@ TEST(YamlGetConfigurationDdsRouterTest, get_ddsrouter_configuration_trivial) { const char* yml_str = R"( - version: v3.0 + version: v4.0 participants: - name: "P1" kind: "echo" @@ -58,9 +58,11 @@ TEST(YamlGetConfigurationDdsRouterTest, get_ddsrouter_configuration_trivial) ASSERT_TRUE(configuration_result.is_valid(error_msg)); // Check Topics are empty - ASSERT_EQ(configuration_result.allowlist, std::set>()); - ASSERT_EQ(configuration_result.blocklist, std::set>()); - ASSERT_EQ(configuration_result.builtin_topics, + ASSERT_EQ(configuration_result.ddspipe_configuration.allowlist, + std::set>()); + ASSERT_EQ(configuration_result.ddspipe_configuration.blocklist, + std::set>()); + ASSERT_EQ(configuration_result.ddspipe_configuration.builtin_topics, std::set>()); // Check Participant configurations @@ -84,7 +86,7 @@ TEST(YamlGetConfigurationDdsRouterTest, get_ddsrouter_configuration_ros_case) { const char* yml_str = R"( - version: v3.0 + version: v4.0 builtin-topics: - name: "rt/chatter" type: "std_msgs::msg::dds_::String_" @@ -111,12 +113,17 @@ TEST(YamlGetConfigurationDdsRouterTest, get_ddsrouter_configuration_ros_case) ASSERT_TRUE(configuration_result.is_valid(error_msg)); // Check Topic lists are empty - ASSERT_EQ(configuration_result.allowlist, std::set>()); - ASSERT_EQ(configuration_result.blocklist, std::set>()); + ASSERT_EQ(configuration_result.ddspipe_configuration.allowlist, + std::set>()); + ASSERT_EQ(configuration_result.ddspipe_configuration.blocklist, + std::set>()); // Check Builtin Topics has one correct topic - ASSERT_EQ(configuration_result.builtin_topics.size(), 1u); - utils::Heritable topic_result = (*configuration_result.builtin_topics.begin()); + ASSERT_EQ(configuration_result.ddspipe_configuration.builtin_topics.size(), 1u); + + utils::Heritable topic_result = + (*configuration_result.ddspipe_configuration.builtin_topics.begin()); + ASSERT_EQ(topic_result->topic_name(), "rt/chatter"); ASSERT_EQ(topic_result->type_name, "std_msgs::msg::dds_::String_"); ASSERT_EQ(topic_result->topic_qos.keyed, false); diff --git a/ddsrouter_yaml/test/unittest/configuration/YamlReaderConfigurationTest.cpp b/ddsrouter_yaml/test/unittest/configuration/YamlReaderConfigurationTest.cpp index f8fdeacd3..08295553b 100644 --- a/ddsrouter_yaml/test/unittest/configuration/YamlReaderConfigurationTest.cpp +++ b/ddsrouter_yaml/test/unittest/configuration/YamlReaderConfigurationTest.cpp @@ -30,30 +30,30 @@ using namespace eprosima; * CASES: * - trivial configuration */ -TEST(YamlReaderConfigurationTest, ddsrouter_configuration_v1_not_supported) -{ - std::vector yml_configurations = - { - // trivial configuration - R"( - version: v1.0 - participant1: - type: "echo" - participant2: - type: "echo" - )", - }; - - for (const char* yml_configuration : yml_configurations) - { - Yaml yml = YAML::Load(yml_configuration); - - // Load configuration - ASSERT_THROW( - ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml), - utils::ConfigurationException); - } -} +// TEST(YamlReaderConfigurationTest, ddsrouter_configuration_v1_not_supported) +// { +// std::vector yml_configurations = +// { +// // trivial configuration +// R"( +// version: v1.0 +// participant1: +// type: "echo" +// participant2: +// type: "echo" +// )", +// }; + +// for (const char* yml_configuration : yml_configurations) +// { +// Yaml yml = YAML::Load(yml_configuration); + +// // Load configuration +// ASSERT_THROW( +// ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml), +// utils::ConfigurationException); +// } +// } /** * Test load a whole DDS Router Configuration from yaml node for v2.0 of yaml. @@ -62,63 +62,63 @@ TEST(YamlReaderConfigurationTest, ddsrouter_configuration_v1_not_supported) * - trivial configuration * - ROS common configuration */ -TEST(YamlReaderConfigurationTest, get_ddsrouter_configuration_v2) -{ - std::vector yml_configurations = - { - // trivial configuration - R"( - version: v2.0 - participants: - - name: "P1" - kind: "echo" - - name: "P2" - kind: "echo" - )", - - // ROS common configuration - R"( - version: v2.0 - builtin: - - name: "rt/chatter" - type: "std_msgs::msg::dds_::String_" - participants: - - name: "P1" - kind: "local" - domain: 0 - - name: "P2" - kind: "local" - domain: 1 - - name: "P3" - kind: "simple" - domain: 2 - )", - }; - - for (const char* yml_configuration : yml_configurations) - { - Yaml yml = YAML::Load(yml_configuration); - - // Load configuration - ddsrouter::core::DdsRouterConfiguration configuration_result = - ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); - - // Check is valid - utils::Formatter error_msg; - ASSERT_TRUE(configuration_result.is_valid(error_msg)) << error_msg; - } -} +// TEST(YamlReaderConfigurationTest, get_ddsrouter_configuration_v2) +// { +// std::vector yml_configurations = +// { +// // trivial configuration +// R"( +// version: v2.0 +// participants: +// - name: "P1" +// kind: "echo" +// - name: "P2" +// kind: "echo" +// )", + +// // ROS common configuration +// R"( +// version: v2.0 +// builtin: +// - name: "rt/chatter" +// type: "std_msgs::msg::dds_::String_" +// participants: +// - name: "P1" +// kind: "local" +// domain: 0 +// - name: "P2" +// kind: "local" +// domain: 1 +// - name: "P3" +// kind: "simple" +// domain: 2 +// )", +// }; + +// for (const char* yml_configuration : yml_configurations) +// { +// Yaml yml = YAML::Load(yml_configuration); + +// // Load configuration +// ddsrouter::core::DdsRouterConfiguration configuration_result = +// ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); + +// // Check is valid +// utils::Formatter error_msg; +// ASSERT_TRUE(configuration_result.is_valid(error_msg)) << error_msg; +// } +// } /** * Do not set Yaml version and get default configuration - * (currently default is v3.0) + * (currently default is v4.0) * * CASES: - * - trivial configuration of v3.0 + * - trivial configuration of v4.0 */ TEST(YamlReaderConfigurationTest, get_ddsrouter_configuration_no_version) { - // trivial configuration of v3.0 + // trivial configuration of v4.0 { const char* yml_configuration = R"( @@ -146,7 +146,7 @@ TEST(YamlReaderConfigurationTest, get_ddsrouter_configuration_no_version) * * CASES: * - not existing version - * - get wrongly defined yaml with default version (v3.0) + * - get wrongly defined yaml with default version (v4.0) */ TEST(YamlReaderConfigurationTest, version_negative_cases) { @@ -200,7 +200,7 @@ TEST(YamlReaderConfigurationTest, number_of_threads) const char* yml_configuration = // trivial configuration R"( - version: v3.0 + version: v4.0 participants: - name: "P1" kind: "echo" @@ -226,43 +226,6 @@ TEST(YamlReaderConfigurationTest, number_of_threads) } } -/** - * Test load of maximum history depth in the configuration - * - * CASES: - * - trivial configuration - */ -TEST(YamlReaderConfigurationTest, max_history_depth) -{ - const char* yml_configuration = - // trivial configuration - R"( - version: v3.0 - participants: - - name: "P1" - kind: "echo" - - name: "P2" - kind: "echo" - )"; - Yaml yml = YAML::Load(yml_configuration); - - std::vector test_cases = {10, 100, 1000, 5000, 10000}; - - for (unsigned int test_case : test_cases) - { - Yaml yml_specs; - yml_specs[ddspipe::yaml::MAX_HISTORY_DEPTH_TAG] = test_case; - yml[ddspipe::yaml::SPECS_TAG] = yml_specs; - - // Load configuration - ddsrouter::core::DdsRouterConfiguration configuration_result = - ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); - - // Check max history depth is correct - ASSERT_EQ(test_case, configuration_result.advanced_options.max_history_depth); - } -} - /** * Test setting remove unused entities in the configuration. * @@ -274,7 +237,7 @@ TEST(YamlReaderConfigurationTest, remove_unused_entities) const char* yml_configuration = // trivial configuration R"( - version: v3.1 + version: v4.0 participants: - name: "P1" kind: "echo" @@ -310,7 +273,7 @@ TEST(YamlReaderConfigurationTest, valid_routes) { const char* yml_configuration = R"( - version: v3.1 + version: v4.0 participants: - name: "P1" kind: "echo" @@ -346,7 +309,7 @@ TEST(YamlReaderConfigurationTest, invalid_routes) const char* yml_configuration = // trivial configuration R"( - version: v3.1 + version: v4.0 participants: - name: "P1" kind: "echo" @@ -368,6 +331,166 @@ TEST(YamlReaderConfigurationTest, invalid_routes) ASSERT_FALSE(configuration_result.is_valid(error_msg)); } +/** + * Test load of maximum history depth in the configuration + * + * CASES: + * - trivial configuration + */ +TEST(YamlReaderConfigurationTest, history_depth) +{ + const char* yml_configuration = + // trivial configuration + R"( + version: v4.0 + participants: + - name: "P1" + kind: "echo" + - name: "P2" + kind: "echo" + )"; + Yaml yml = YAML::Load(yml_configuration); + + std::vector test_cases = {10, 100, 1000, 5000, 10000}; + + for (unsigned int test_case : test_cases) + { + Yaml yml_topic_qos; + Yaml yml_specs; + + yml_topic_qos[ddspipe::yaml::QOS_HISTORY_DEPTH_TAG] = test_case; + yml_specs[ddspipe::yaml::SPECS_QOS_TAG] = yml_topic_qos; + yml[ddspipe::yaml::SPECS_TAG] = yml_specs; + + // Load configuration + ddsrouter::core::DdsRouterConfiguration configuration_result = + ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); + + // Check max history depth is correct + ASSERT_EQ(test_case, configuration_result.advanced_options.topic_qos.history_depth); + } +} + +/** + * Test load of max transmission rate in the configuration + * + * CASES: + * - trivial configuration + */ +TEST(YamlReaderConfigurationTest, max_tx_rate) +{ + const char* yml_configuration = + // trivial configuration + R"( + version: v4.0 + participants: + - name: "P1" + kind: "echo" + - name: "P2" + kind: "echo" + )"; + Yaml yml = YAML::Load(yml_configuration); + + std::vector test_cases = {0, 10, 100, 1000, 5000, 10000}; + + for (unsigned int test_case : test_cases) + { + Yaml yml_topic_qos; + Yaml yml_specs; + + yml_topic_qos[ddspipe::yaml::QOS_MAX_TX_RATE_TAG] = test_case; + yml_specs[ddspipe::yaml::SPECS_QOS_TAG] = yml_topic_qos; + yml[ddspipe::yaml::SPECS_TAG] = yml_specs; + + // Load configuration + ddsrouter::core::DdsRouterConfiguration configuration_result = + ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); + + // Check max history depth is correct + ASSERT_EQ(test_case, configuration_result.advanced_options.topic_qos.max_tx_rate); + } +} + +/** + * Test load of max reception rate in the configuration + * + * CASES: + * - trivial configuration + */ +TEST(YamlReaderConfigurationTest, max_rx_rate) +{ + const char* yml_configuration = + // trivial configuration + R"( + version: v4.0 + participants: + - name: "P1" + kind: "echo" + - name: "P2" + kind: "echo" + )"; + Yaml yml = YAML::Load(yml_configuration); + + std::vector test_cases = {0, 10, 100, 1000, 5000, 10000}; + + for (unsigned int test_case : test_cases) + { + Yaml yml_topic_qos; + Yaml yml_specs; + + yml_topic_qos[ddspipe::yaml::QOS_MAX_RX_RATE_TAG] = test_case; + yml_specs[ddspipe::yaml::SPECS_QOS_TAG] = yml_topic_qos; + yml[ddspipe::yaml::SPECS_TAG] = yml_specs; + + // Load configuration + ddsrouter::core::DdsRouterConfiguration configuration_result = + ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); + + // Check max history depth is correct + ASSERT_EQ(test_case, configuration_result.advanced_options.topic_qos.max_rx_rate); + } +} + +/** + * Test load of downsampling in the configuration + * + * CASES: + * - trivial configuration + */ +TEST(YamlReaderConfigurationTest, downsampling) +{ + const char* yml_configuration = + // trivial configuration + R"( + version: v4.0 + participants: + - name: "P1" + kind: "echo" + - name: "P2" + kind: "echo" + )"; + Yaml yml = YAML::Load(yml_configuration); + + std::vector test_cases = {1, 10, 100, 1000, 5000, 10000}; + + for (unsigned int test_case : test_cases) + { + Yaml yml_topic_qos; + Yaml yml_specs; + + yml_topic_qos[ddspipe::yaml::QOS_DOWNSAMPLING_TAG] = test_case; + yml_specs[ddspipe::yaml::SPECS_QOS_TAG] = yml_topic_qos; + yml[ddspipe::yaml::SPECS_TAG] = yml_specs; + + // Load configuration + ddsrouter::core::DdsRouterConfiguration configuration_result = + ddsrouter::yaml::YamlReaderConfiguration::load_ddsrouter_configuration(yml); + + // Check max history depth is correct + ASSERT_EQ(test_case, configuration_result.advanced_options.topic_qos.downsampling); + } +} + int main( int argc, char** argv) diff --git a/docs/resources/examples/change_domain.yaml b/docs/resources/examples/change_domain.yaml index 3386e1cdd..c02bef39a 100644 --- a/docs/resources/examples/change_domain.yaml +++ b/docs/resources/examples/change_domain.yaml @@ -3,7 +3,7 @@ ############################# # Yaml configuration file version -version: v3.1 +version: v4.0 # DDS Router participants participants: diff --git a/docs/resources/examples/change_domain_allowlist.yaml b/docs/resources/examples/change_domain_allowlist.yaml index aa5391413..bd77fe63d 100644 --- a/docs/resources/examples/change_domain_allowlist.yaml +++ b/docs/resources/examples/change_domain_allowlist.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -43,7 +43,7 @@ participants: # This configuration example configures a DDS Router to listen to every message published in two different domains # and transmit those messages through the other domain. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/echo.yaml b/docs/resources/examples/echo.yaml index d87e2715c..3b53e1b99 100644 --- a/docs/resources/examples/echo.yaml +++ b/docs/resources/examples/echo.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -46,7 +46,7 @@ participants: # HelloWorldTopic (from Fast DDS HelloWorld) and rt/chatter from ROS2 demo_nodes, and to print the received # messages in stdout. Information regarding discovery events is also printed to stdout. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/forwarding_routes.yaml b/docs/resources/examples/forwarding_routes.yaml index b3bc8f7e2..7813b0564 100644 --- a/docs/resources/examples/forwarding_routes.yaml +++ b/docs/resources/examples/forwarding_routes.yaml @@ -4,7 +4,7 @@ ####################### # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ############## # PARTICIPANTS @@ -76,7 +76,7 @@ topic-routes: # 11 # to DDS Domain 1. # The communication is in both directions. -# 0: Use YAML configuration version v3.1 +# 0: Use YAML configuration version v4.0 # 1: List the internal participants of the router. diff --git a/docs/resources/examples/repeater_client.yaml b/docs/resources/examples/repeater_client.yaml index e39022c9e..1840b69d1 100644 --- a/docs/resources/examples/repeater_client.yaml +++ b/docs/resources/examples/repeater_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -46,7 +46,7 @@ participants: # The other direction of communication is also possible; receive messages at the WAN Participant and locally # publish them in domain 0. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow ROS 2 specific Topic Name with type . # Insert new topics in order to route them. diff --git a/docs/resources/examples/repeater_server.yaml b/docs/resources/examples/repeater_server.yaml index f8253adc1..0a150a897 100644 --- a/docs/resources/examples/repeater_server.yaml +++ b/docs/resources/examples/repeater_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -43,7 +43,7 @@ participants: # Server specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/ros_discovery_client.yaml b/docs/resources/examples/ros_discovery_client.yaml index c7e79968d..3ab12d54f 100644 --- a/docs/resources/examples/ros_discovery_client.yaml +++ b/docs/resources/examples/ros_discovery_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -53,7 +53,7 @@ participants: # The other direction of communication is also possible; receive messages at the Discovery Server and locally # publish them in domain 0. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow ROS 2 specific Topic Name with type . # Insert new topics in order to route them. diff --git a/docs/resources/examples/ros_discovery_server.yaml b/docs/resources/examples/ros_discovery_server.yaml index 9b9256523..cc80dcabf 100644 --- a/docs/resources/examples/ros_discovery_server.yaml +++ b/docs/resources/examples/ros_discovery_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -49,7 +49,7 @@ participants: # The other direction of communication is also possible; receive messages at the Discovery Server and locally # publish them in domain 0. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS ROS 2 specific Topic Name with type . # Insert new topics in order to route them. diff --git a/docs/resources/examples/wan_client.yaml b/docs/resources/examples/wan_client.yaml index fdb702736..450fc6388 100644 --- a/docs/resources/examples/wan_client.yaml +++ b/docs/resources/examples/wan_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -53,7 +53,7 @@ participants: # Client specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/wan_ds_client.yaml b/docs/resources/examples/wan_ds_client.yaml index e378ac2d7..48c36ff3e 100644 --- a/docs/resources/examples/wan_ds_client.yaml +++ b/docs/resources/examples/wan_ds_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -58,7 +58,7 @@ participants: # Client specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/wan_ds_server.yaml b/docs/resources/examples/wan_ds_server.yaml index 61a629819..9bb253a4c 100644 --- a/docs/resources/examples/wan_ds_server.yaml +++ b/docs/resources/examples/wan_ds_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -52,7 +52,7 @@ participants: # Server specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/wan_server.yaml b/docs/resources/examples/wan_server.yaml index ec5f2c266..d87509add 100644 --- a/docs/resources/examples/wan_server.yaml +++ b/docs/resources/examples/wan_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -50,7 +50,7 @@ participants: # Server specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/docs/resources/examples/xml.yaml b/docs/resources/examples/xml.yaml index c161ac1bf..137a2862a 100644 --- a/docs/resources/examples/xml.yaml +++ b/docs/resources/examples/xml.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.1 # 0 +version: v4.0 # 0 ################################## # CONFIGURATION VERSION @@ -48,7 +48,7 @@ participants: # to DDS Domain 1. # The communication is in both directions. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Configure how to load XML configurations. diff --git a/docs/resources/getting_started/client-ddsrouter.yaml b/docs/resources/getting_started/client-ddsrouter.yaml index 11deea069..179d9e6ab 100644 --- a/docs/resources/getting_started/client-ddsrouter.yaml +++ b/docs/resources/getting_started/client-ddsrouter.yaml @@ -1,6 +1,6 @@ # client-ddsrouter.yaml -version: v3.0 +version: v4.0 allowlist: - name: Square diff --git a/docs/resources/getting_started/server-ddsrouter.yaml b/docs/resources/getting_started/server-ddsrouter.yaml index 549e77fd4..5f0a92aba 100644 --- a/docs/resources/getting_started/server-ddsrouter.yaml +++ b/docs/resources/getting_started/server-ddsrouter.yaml @@ -1,6 +1,6 @@ # server-ddsrouter.yaml -version: v3.0 +version: v4.0 allowlist: - name: Square diff --git a/docs/resources/use_cases/ros_cloud/ConfigMap.yaml b/docs/resources/use_cases/ros_cloud/ConfigMap.yaml index 428c270e0..fd7869bc9 100644 --- a/docs/resources/use_cases/ros_cloud/ConfigMap.yaml +++ b/docs/resources/use_cases/ros_cloud/ConfigMap.yaml @@ -4,7 +4,7 @@ metadata: name: ddsrouter-config data: ddsrouter.config.file: |- - version: v3.0 + version: v4.0 allowlist: - name: rt/chatter diff --git a/docs/resources/use_cases/ros_cloud/local-ddsrouter.yaml b/docs/resources/use_cases/ros_cloud/local-ddsrouter.yaml index 3722a8929..679a7d802 100644 --- a/docs/resources/use_cases/ros_cloud/local-ddsrouter.yaml +++ b/docs/resources/use_cases/ros_cloud/local-ddsrouter.yaml @@ -1,6 +1,6 @@ # local-ddsrouter.yaml -version: v3.0 +version: v4.0 allowlist: - name: rt/chatter diff --git a/docs/resources/use_cases/wan_tcp/dds_router_net_A.yaml b/docs/resources/use_cases/wan_tcp/dds_router_net_A.yaml index f61020cbe..556dce65a 100644 --- a/docs/resources/use_cases/wan_tcp/dds_router_net_A.yaml +++ b/docs/resources/use_cases/wan_tcp/dds_router_net_A.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/docs/resources/use_cases/wan_tcp/dds_router_net_B_lan.yaml b/docs/resources/use_cases/wan_tcp/dds_router_net_B_lan.yaml index 8e87d826b..58e03f27e 100644 --- a/docs/resources/use_cases/wan_tcp/dds_router_net_B_lan.yaml +++ b/docs/resources/use_cases/wan_tcp/dds_router_net_B_lan.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/docs/resources/use_cases/wan_tcp/dds_router_net_B_wan.yaml b/docs/resources/use_cases/wan_tcp/dds_router_net_B_wan.yaml index cd2389d37..ead44a478 100644 --- a/docs/resources/use_cases/wan_tcp/dds_router_net_B_wan.yaml +++ b/docs/resources/use_cases/wan_tcp/dds_router_net_B_wan.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 participants: diff --git a/docs/rst/examples/repeater_example.rst b/docs/rst/examples/repeater_example.rst index 655c7374a..f9715e91f 100644 --- a/docs/rst/examples/repeater_example.rst +++ b/docs/rst/examples/repeater_example.rst @@ -16,7 +16,7 @@ Configuration Version ------- -The version attribute is required, as the :code:`repeater` tag is only supported from v3.0 configuration version. +The version attribute is required, as the :code:`repeater` tag is only supported from v4.0 configuration version. .. literalinclude:: ../../resources/examples/repeater_server.yaml :language: yaml diff --git a/docs/rst/notes/forthcoming_version.rst b/docs/rst/notes/forthcoming_version.rst index db2e283e6..fee6ffdcb 100644 --- a/docs/rst/notes/forthcoming_version.rst +++ b/docs/rst/notes/forthcoming_version.rst @@ -9,7 +9,12 @@ Forthcoming Version The next release will include the following **Features**: * :ref:`Forwarding Routes `. -* :ref:`Remove Unused Entities ` +* :ref:`Remove Unused Entities `. +* :ref:`Manual Topics `. +* :ref:`Max Transmission Rate `. +* :ref:`Max Reception Rate `. +* :ref:`Downsampling `. +* Rename the `max-depth` under the `specs` tag to `history-depth`. The next release will include the following **Bugfixes**: diff --git a/docs/rst/spelling_wordlist.txt b/docs/rst/spelling_wordlist.txt index 03f326505..b3f2c3d16 100644 --- a/docs/rst/spelling_wordlist.txt +++ b/docs/rst/spelling_wordlist.txt @@ -14,6 +14,7 @@ ddsrouter Dev Diffie Dockerfile +downsampling entrypoint eProsima executables diff --git a/docs/rst/user_manual/configuration.rst b/docs/rst/user_manual/configuration.rst index 94cce9e58..1309a5519 100644 --- a/docs/rst/user_manual/configuration.rst +++ b/docs/rst/user_manual/configuration.rst @@ -2,14 +2,12 @@ .. _user_manual_configuration: -######################## -DDS Router Configuration -######################## +############# +Configuration +############# A |ddsrouter| is configured by a *.yaml* configuration file. -This *.yaml* file contains all the information regarding the |ddsrouter| configuration, such as topics filtering -and :term:`Participants ` configurations. Configuration files may be easily validated by using the -:ref:`yaml_validator` tool. +This *.yaml* file contains all the information regarding the |ddsrouter| configuration, such as topics filtering and :term:`Participants ` configurations. .. contents:: :local: @@ -20,97 +18,33 @@ Configuration version ===================== The YAML Configuration supports a ``version`` value to identify the configuration version to parse the file. -In future releases the YAML format (some key words, -fields, etc.) may change. -This value allows users to keep using the same YAML file with an old configuration format, maintaining compatibility -with future releases. +In future releases the YAML format (some key words, fields, etc.) may change. +This value allows users to keep using the same YAML file with an old configuration format, maintaining compatibility with future releases. -.. list-table:: - :header-rows: 1 +.. + .. list-table:: + :header-rows: 1 - * - Configuration Versions - - String in ``version`` tag - - |ddsrouter| activation release + * - Configuration Versions + - String in ``version`` tag + - |ddsrouter| activation release - * - version 2.0 - - ``v2.0`` - - *v0.2.0* + * - version 4.0 + - ``v4.0`` + - *v2.0.0* - * - version 3.0 (default) - - ``v3.0`` - - *v0.3.0* -**Current configuration version is v3.0**. +**The current configuration version is v4.0**. This is the configuration version that is described along this page. .. note:: - The current default version when the tag ``version`` is not set is *v3.0*. - -.. warning:: - - **Deprecation Warning**. - In future releases, the tag ``version`` will be mandatory. + The current default version when the tag ``version`` is not set is *v4.0*. .. warning:: **Deprecation warning**. - Update to version `v3.0` since `v1.0` is no longer supported. - - -.. _thread_configuration: - -Specs Configuration -=================== - -The YAML Configuration supports a ``specs`` **optional** tag that contains certain options related with the -overall configuration of the DDS Router instance to run. -The values available to configure are: - -Number of Threads ------------------ - -``specs`` supports a ``threads`` **optional** value that allows the user to set a maximum number of threads -for the internal :code:`ThreadPool`. -This ThreadPool allows to limit the number of threads spawned by the application. -This improves the performance of the data transmission between Participants. - -This value should be set by each user depending on each system's characteristics. -In case this value is not set, the default number of threads used is :code:`12`. - -.. _history_depth_configuration: - -Maximum History Depth ---------------------- - -``specs`` supports a ``max-depth`` **optional** value that configures the history size -of the Fast DDS internal entities. -By default, the depth of every RTPS History instance is :code:`5000`, which sets a constraint on the maximum number of -samples a |ddsrouter| instance can deliver to late joiner Readers configured with ``TRANSIENT_LOCAL`` -`DurabilityQosPolicyKind `_. -Its value should be decreased when the sample size and/or number of created endpoints (increasing with the number of -topics and |ddsrouter| participants) are as big as to cause memory exhaustion issues. -Likewise, one may choose to increase this value if wishing to deliver a greater number of samples to late joiners and -enough memory is available. - -.. _user_manual_configuration_remove_unused_entities: - -Remove Unused Entities ----------------------- - -``specs`` supports a ``remove-unused-entities`` **optional** value that configures the deletion of unused internal entities in the |ddsrouter|. -By default, unused internal entities are *not* removed. -Thus, when the |ddsrouter| discovers a Subscriber, the |ddsrouter| creates entities in all of its participants, and these entities stay up even after the Subscriber disconnects. - -At times it can be useful to remove the internal entities that are not being used. -Consider the following example. -Two *DDS Routers* are communicating through a WAN connection, when the last of the external Subscribers to which they are forwarding data disconnects. -By default, the internal entities of the *DDS Routers* would *not* be removed, so the *DDS Routers* would keep consuming bandwidth, even though the data is never read. -By setting the ``remove-unused-entities`` option to ``true``, the internal entities of the |ddsrouter| would be removed, and the *DDS Routers* would stop communicating and free up the bandwidth. - -.. warning:: - At the time being, the removal of unused entities is incompatible with the `Transient-Local Durability QoS `_. - + Update to version `v4.0` since previous `v3.1` is no longer supported. .. _user_manual_configuration_load_xml: @@ -120,7 +54,7 @@ Load XML Configuration Fast DDS supports configuration of its internal entities (:term:`DomainParticipant`, :term:`DataWriter`, etc.) via XML Profiles. These XML files contain different profiles that set specific QoS, and entities can be created following such profiles. These XML files can be loaded in the process by their *default file name* or by an environment variable. -Check the `Fast DDS documentation ` for more information. +Check the `Fast DDS documentation `_ for more information. Another way of loading these XML configurations is using the |ddsrouter| yaml configuration. The YAML Configuration supports a ``xml`` **optional** tag that contains certain options to load Fast DDS XML configurations. @@ -130,12 +64,12 @@ XML configurations are then used to configure an :ref:`XML Participant ` for these topics can be manually configured with a :ref:`Manual Topic `, a :ref:`Participant Topic QoS `, and a :ref:`Specs Topic QoS `; if a :ref:`Topic QoS ` is not configured, it will take its default value. -Topic Quality of Service ------------------------- +The ``builtin-topics`` must specify a ``name`` and ``type`` without wildcard characters. + + +.. code-block:: yaml + + builtin-topics: + - name: HelloWorldTopic + type: HelloWorld + +.. _topic_filtering: + +Topic Filtering +--------------- + +The |ddsrouter| automatically detects the topics that are being used in a DDS Network. +The |ddsrouter| then creates internal DDS :term:`Writers` and :term:`Readers` for each participant in each topic, and forwards the data published on each topic. +The |ddsrouter| allows filtering DDS :term:`Topics` to allow users to configure the DDS :term:`Topics` that must be forwarded. +These data filtering rules can be configured under the ``allowlist`` and ``blocklist`` tags. +If the ``allowlist`` and ``blocklist`` are not configured, the |ddsrouter| will forward all the data published on the topics it discovers. +If both the ``allowlist`` and ``blocklist`` are configured and a topic appears in both of them, the ``blocklist`` has priority and the topic will be blocked. + +Topics are determined by the tags ``name`` (required) and ``type``, both of which accept wildcard characters. -For every topic contained in this list, both ``name`` and ``type`` must be specified and contain no wildcard -characters. The entry ``keyed`` is optional, and defaults to ``false``. -Apart from these values, the tag ``qos`` under each topic allows to configure the following values: +.. note:: + + Placing quotation marks around values in a YAML file is generally optional, but values containing wildcard characters do require single or double quotation marks. + +Consider the following example: + +.. code-block:: yaml + + allowlist: + - name: AllowedTopic1 + type: Allowed + + - name: AllowedTopic2 + type: "*" + + - name: HelloWorldTopic + type: HelloWorld + + blocklist: + - name: "*" + type: HelloWorld + +In this example, the data in the topic ``AllowedTopic1`` with type ``Allowed`` and the data in the topic ``AllowedTopic2`` with any type will be forwarded by the |ddsrouter|. +The data in the topic ``HelloWorldTopic`` with type ``HelloWorld`` will be blocked, since the ``blocklist`` is blocking all topics with any name and with type ``HelloWorld``. + +.. _user_manual_configuration_topic_qos: + +Topic QoS +--------- + +The following is the set of QoS that are configurable for a topic. +For more information on topics, please read the `Fast DDS Topic `_ section. .. list-table:: :header-rows: 1 @@ -199,11 +183,11 @@ Apart from these values, the tag ``qos`` under each topic allows to configure th - ``false`` - ``TRANSIENT_LOCAL`` / ``VOLATILE`` - * - History Depth - - ``depth`` - - *integer* - - :ref:`history_depth_configuration` - - Writers and Readers History Depth + * - Ownership + - ``ownership`` + - *bool* + - ``false`` + - ``EXCLUSIVE_OWNERSHIP_QOS`` / ``SHARED_OWNERSHIP_QOS`` * - Partitions - ``partitions`` @@ -211,162 +195,154 @@ Apart from these values, the tag ``qos`` under each topic allows to configure th - ``false`` - Topic with / without partitions - * - Ownership - - ``ownership`` - - *bool* - - ``false`` - - ``EXCLUSIVE_OWNERSHIP_QOS`` / ``SHARED_OWNERSHIP_QOS`` - * - Key - ``keyed`` - *bool* - ``false`` - - Topic with / without key - -The entry ``keyed`` determines whether the corresponding topic is `keyed `_ -or not. See the :term:`Topic` section for further information about the topic. - + - Topic with / without `key `_ -.. code-block:: yaml + * - History Depth + - ``history-depth`` + - *unsigned integer* + - ``5000`` + - :ref:`user_manual_configuration_history_depth` + + * - Max Transmission Rate + - ``max-tx-rate`` + - *float* + - ``0`` (unlimited) + - :ref:`user_manual_configuration_max_tx_rate` + + * - Max Reception Rate + - ``max-rx-rate`` + - *float* + - ``0`` (unlimited) + - :ref:`user_manual_configuration_max_rx_rate` + + * - Downsampling + - ``downsampling`` + - *unsigned integer* + - ``1`` + - :ref:`user_manual_configuration_downsampling` - builtin-topics: - - name: HelloWorldTopic - type: HelloWorld - qos: - reliability: true # Use QoS RELIABLE - durability: true # Use QoS TRANSIENT_LOCAL - depth: 100 # Use History Depth 100 - partitions: true # Topic with partitions - ownership: false # Use QoS SHARED_OWNERSHIP_QOS - keyed: false # Topic without keys +.. warning:: + Manually configuring ``TRANSIENT_LOCAL`` durability may lead to incompatibility issues when the discovered reliability is ``BEST_EFFORT``. + Please ensure to always configure the ``reliability`` when configuring the ``durability`` to avoid the issue. -Topic Filtering -=============== +.. _user_manual_configuration_history_depth: -|ddsrouter| includes a mechanism to automatically detect which topics are being used in a DDS network. -By automatically detecting these topics, a |ddsrouter| creates internal DDS :term:`Writers` -and :term:`Readers` for each topic and for each Participant in order to relay the data published on each -discovered topic. +History Depth +^^^^^^^^^^^^^ -.. note:: +The ``history-depth`` tag configures the history depth of the Fast DDS internal entities. +By default, the depth of every RTPS History instance is :code:`5000`, which sets a constraint on the maximum number of samples a |ddsrouter| instance can deliver to late joiner Readers configured with ``TRANSIENT_LOCAL`` `DurabilityQosPolicyKind `_. +Its value should be decreased when the sample size and/or number of created endpoints (increasing with the number of topics and |ddsrouter| participants) are big enough to cause memory exhaustion issues. +If enough memory is available, however, the ``history-depth`` could be increased to deliver a greater number of samples to late joiners. - DDS Router entities are created with the QoS of the first Subscriber found in this Topic. +.. _user_manual_configuration_max_tx_rate: -|ddsrouter| allows filtering of DDS :term:`Topics`, that is, it allows to define which DDS Topics are going to be -relayed by the application. -This way, it is possible to define a set of rules in |ddsrouter| to filter those data samples the user does not wish to -forward. +Max Transmission Rate +^^^^^^^^^^^^^^^^^^^^^ -It is not mandatory to define such set of rules in the configuration file. In this case, a DDS Router will forward all -the data published under the topics that it automatically discovers within the DDS network to which it connects. +The ``max-tx-rate`` tag limits the frequency [Hz] at which samples are sent by discarding messages transmitted before :code:`1/max-tx-rate` seconds have passed since the last sent message. +It only accepts non-negative numbers. +By default it is set to ``0``; it sends samples at an unlimited transmission rate. -To define these data filtering rules based on the Topics to which they belong, three lists are available: +.. _user_manual_configuration_max_rx_rate: -* Allowed topics list (``allowlist``) -* Block topics list (``blocklist``) -* Builtin topics list (``builtin-topics``) +Max Reception Rate +^^^^^^^^^^^^^^^^^^ -These three lists of topics listed above are defined by a tag in the *YAML* configuration file, which defines a -*YAML* vector (``[]``). -This vector contains the list of topics for each filtering rule. -Each Topic is determined by its entries ``name`` and ``type``, with only the first one being mandatory. +The ``max-rx-rate`` tag limits the frequency [Hz] at which samples are processed by discarding messages received before :code:`1/max-rx-rate` seconds have passed since the last processed message. +It only accepts non-negative numbers. +By default it is set to ``0``; it processes samples at an unlimited reception rate. -.. list-table:: - :header-rows: 1 +.. _user_manual_configuration_downsampling: - * - Topic entries - - Data type - - Default value +Downsampling +^^^^^^^^^^^^^ - * - ``name`` - - ``string`` - - \- +The ``downsampling`` tag reduces the sampling rate of the received data by only keeping *1* out of every *n* samples received (per topic), where *n* is the value specified under the ``downsampling`` tag. +When the ``max-rx-rate`` tag is also set, downsampling only applies to messages that have passed the ``max-rx-rate`` filter. +It only accepts positive integers. +By default it is set to ``1``; it accepts every message. - * - ``type`` - - ``string`` - - ``"*"`` +.. _user_manual_configuration_manual_topics: -.. note:: +Manual Topics +------------- - Tags ``allowlist``, ``blocklist`` and ``builtin-topics`` must be at yaml base level (it must not be inside any - other tag). +A subset of :ref:`Topic QoS ` can be manually configured for a specific topic under the tag ``topics``. +The tag ``topics`` has a required ``name`` tag that accepts wildcard characters. +It also has three optional tags: a ``type`` tag that accepts wildcard characters, a ``qos`` tag with the :ref:`Topic QoS ` that the user wants to manually configure, and a ``participants`` tag that lists the participants to which the configuration applies. +If a ``qos`` is not manually configured, it will get its value by discovery; if the ``participants`` tag is empty or non-existent, the configuration will apply to all participants. -.. note:: +**Example of usage** - Placing quotation marks around values in a YAML file is generally optional. However, values containing wildcard - characters must be enclosed by single or double quotation marks. +.. code-block:: yaml -Allow topic list (``allowlist``) --------------------------------- -This is the list of topics that |ddsrouter| will forward, i.e. the data published under the topics matching the -expressions in the ``allowlist`` will be relayed by |ddsrouter|. + topics: + - name: "temperature/*" + type: "temperature/types/*" + qos: + max-tx-rate: 15 + downsampling: 2 + participants: + - Participant0 + - Participant1 .. note:: - If no ``allowlist`` is provided, data will be forwarded for all topics (unless filtered out in ``blocklist``). - + The :ref:`Topic QoS ` configured in the Manual Topics take precedence over the :ref:`Participant Topic QoS ` and the :ref:`Specs Topic QoS `. -Block topic list (``blocklist``) --------------------------------- -This is the list of topics that the |ddsrouter| will block, that is, all data published under the topics matching the -filters specified in the ``blocklist`` will be discarded by the |ddsrouter| and therefore will not be relayed. +Specs Configuration +=================== -This list takes precedence over the ``allowlist``. -If a topic matches an expression both in the ``allowlist`` and in the ``blocklist``, the ``blocklist`` takes precedence, -causing the data under this topic to be discarded. +The YAML Configuration supports a ``specs`` **optional** tag that contains certain options related with the overall configuration of the DDS Router instance to run. +The values available to configure are: +.. _thread_configuration: -Examples of usage +Number of Threads ----------------- -The following is an example of how to use the ``allowlist``, ``blocklist`` and ``builtin-topics`` configurations to -setup the |ddsrouter| filtering rules. - -Dynamic topic discovery example -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +``specs`` supports a ``threads`` **optional** value that allows the user to set a maximum number of threads +for the internal :code:`ThreadPool`. +This ThreadPool allows to limit the number of threads spawned by the application. +This improves the performance of the data transmission between Participants. -This example shows how the |ddsrouter| is initially configured to forward the ``rt/chatter`` topic (default ROS 2 -topic for ``talker`` and ``listener``) with type name ``std_msgs::msg::dds_::String_``, while the rest of the -topics in the DDS network are expected to be dynamically discovered. -Additionally, two rules are specified in the ``blocklist`` in order to filter out messages of no interest to the user -(in this case ROS2 services related topics). +This value should be set by each user depending on each system's characteristics. +In case this value is not set, the default number of threads used is :code:`12`. -.. code-block:: yaml +.. _user_manual_configuration_remove_unused_entities: - builtin-topics: - - name: rt/chatter - type: std_msgs::msg::dds_::String_ +Remove Unused Entities +---------------------- - blocklist: - - name: "rq/*" - - name: "rr/*" +``specs`` supports a ``remove-unused-entities`` **optional** value that configures the deletion of unused internal entities in the |ddsrouter|. +By default, unused internal entities are *not* removed. +Thus, when the |ddsrouter| discovers a Subscriber, the |ddsrouter| creates entities in all of its participants, and these entities stay up even after the Subscriber disconnects. +At times it can be useful to remove the internal entities that are not being used. +Consider the following example. +Two *DDS Routers* are communicating through a WAN connection, when the last of the external Subscribers to which they are forwarding data disconnects. +By default, the internal entities of the *DDS Routers* would *not* be removed, so the *DDS Routers* would keep consuming bandwidth, even though the data is never read. +By setting the ``remove-unused-entities`` option to ``true``, the internal entities of the |ddsrouter| would be removed, and the *DDS Routers* would stop communicating and free up the bandwidth. -Allowlist and blocklist collision -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. warning:: + At the time being, the removal of unused entities is incompatible with the `Transient-Local Durability QoS `_. -In the following example, the ``HelloWorldTopic`` topic is both in the ``allowlist`` and (implicitly) in the -``blocklist``, so according to the ``blocklist`` preference rule this topic is blocked. -Moreover, only the topics present in the allowlist are relayed, regardless of whether more topics are dynamically -discovered in the DDS network. -In this case the forwarded topics are ``AllowedTopic1`` with data type ``Allowed`` -and ``AllowedTopic2`` regardless of its data type. +.. _user_manual_configuration_specs_topic_qos: -.. code-block:: yaml +QoS +--- - allowlist: - - name: AllowedTopic1 - type: Allowed - - name: AllowedTopic2 - type: "*" - - name: HelloWorldTopic - type: HelloWorld +``specs`` supports a ``qos`` **optional** tag to configure the default values of the :ref:`Topic QoS `. - blocklist: - - name: "*" - type: HelloWorld +.. note:: + The :ref:`Topic QoS ` configured in ``specs`` can be overwritten by the :ref:`Participant Topic QoS ` and the :ref:`Manual Topics `. Participant Configuration ========================= @@ -701,8 +677,18 @@ It will use such profile for configuring the Participant. profile: participant_custom_configuration -.. _user_manual_configuration_forwarding_routes: +.. _user_manual_configuration_participant_topic_qos: +QoS +--- + +Participants support a ``qos`` **optional** tag to manually configure their :ref:`Topic QoS `. + +.. note:: + + The :ref:`Topic QoS ` configured for a Participant can be overwritten by the :ref:`Manual Topics ` but take precedence over the :ref:`Specs Topic QoS `. + +.. _user_manual_configuration_forwarding_routes: Forwarding Routes ================= @@ -791,13 +777,17 @@ A complete example of all the configurations described on this page can be found .. code-block:: yaml # Version Latest - version: v3.0 + version: v4.0 # Specifications specs: threads: 10 - max-depth: 1000 remove-unused-entities: false + qos: + history-depth: 1000 + max-tx-rate: 0 + max-rx-rate: 20 + downsampling: 3 # XML configurations to load xml: @@ -826,9 +816,19 @@ A complete example of all the configurations described on this page can be found - name: HelloWorldTopic type: HelloWorld + + # Manually configure Topic QoS for a set of participants on a topic + + topics: + + - name: "temperature/*" + type: "temperature/types/*" qos: - reliability: true - durability: true + max-tx-rate: 15 + downsampling: 2 + participants: + - Participant0 + - Participant1 # Do not allow ROS2 services @@ -849,6 +849,12 @@ A complete example of all the configurations described on this page can be found domain: 3 # DomainId = 3 + qos: + + max-rx-rate: 0 # Max Reception Rate = 0 (unlimited) + + downsampling: 1 # Downsampling = 1 + #################### # Simple DDS Participant in domain 7 @@ -859,6 +865,10 @@ A complete example of all the configurations described on this page can be found domain: 7 # DomainId = 7 + qos: + + max-rx-rate: 15 # Max Reception Rate = 15 + #################### # Discovery Server DDS Participant with ROS GuidPrefix so a local ROS 2 Client could connect to it diff --git a/resources/configurations/examples/change_domain.yaml b/resources/configurations/examples/change_domain.yaml index c974e7edc..c02bef39a 100644 --- a/resources/configurations/examples/change_domain.yaml +++ b/resources/configurations/examples/change_domain.yaml @@ -3,7 +3,7 @@ ############################# # Yaml configuration file version -version: v3.0 +version: v4.0 # DDS Router participants participants: diff --git a/resources/configurations/examples/change_domain_allowlist.yaml b/resources/configurations/examples/change_domain_allowlist.yaml index 64ce3e101..bd77fe63d 100644 --- a/resources/configurations/examples/change_domain_allowlist.yaml +++ b/resources/configurations/examples/change_domain_allowlist.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -43,7 +43,7 @@ participants: # This configuration example configures a DDS Router to listen to every message published in two different domains # and transmit those messages through the other domain. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/echo.yaml b/resources/configurations/examples/echo.yaml index 5c174adc6..3b53e1b99 100644 --- a/resources/configurations/examples/echo.yaml +++ b/resources/configurations/examples/echo.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -46,7 +46,7 @@ participants: # HelloWorldTopic (from Fast DDS HelloWorld) and rt/chatter from ROS2 demo_nodes, and to print the received # messages in stdout. Information regarding discovery events is also printed to stdout. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/repeater.yaml b/resources/configurations/examples/repeater.yaml index 6e0f2a363..4f19f5285 100644 --- a/resources/configurations/examples/repeater.yaml +++ b/resources/configurations/examples/repeater.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -43,7 +43,7 @@ participants: # Server specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/ros_discovery_client.yaml b/resources/configurations/examples/ros_discovery_client.yaml index d7e1b6fa1..3ab12d54f 100644 --- a/resources/configurations/examples/ros_discovery_client.yaml +++ b/resources/configurations/examples/ros_discovery_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -53,7 +53,7 @@ participants: # The other direction of communication is also possible; receive messages at the Discovery Server and locally # publish them in domain 0. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow ROS 2 specific Topic Name with type . # Insert new topics in order to route them. diff --git a/resources/configurations/examples/ros_discovery_server.yaml b/resources/configurations/examples/ros_discovery_server.yaml index 35d019825..cc80dcabf 100644 --- a/resources/configurations/examples/ros_discovery_server.yaml +++ b/resources/configurations/examples/ros_discovery_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -49,7 +49,7 @@ participants: # The other direction of communication is also possible; receive messages at the Discovery Server and locally # publish them in domain 0. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS ROS 2 specific Topic Name with type . # Insert new topics in order to route them. diff --git a/resources/configurations/examples/wan_client.yaml b/resources/configurations/examples/wan_client.yaml index 334c8628e..fdc77daf4 100644 --- a/resources/configurations/examples/wan_client.yaml +++ b/resources/configurations/examples/wan_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -54,7 +54,7 @@ participants: # Client specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/wan_ds_client.yaml b/resources/configurations/examples/wan_ds_client.yaml index 73bc32f57..b5e1b6d65 100644 --- a/resources/configurations/examples/wan_ds_client.yaml +++ b/resources/configurations/examples/wan_ds_client.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -55,7 +55,7 @@ participants: # Client specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/wan_ds_server.yaml b/resources/configurations/examples/wan_ds_server.yaml index 7d4bc5b5d..9f7909958 100644 --- a/resources/configurations/examples/wan_ds_server.yaml +++ b/resources/configurations/examples/wan_ds_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -53,7 +53,7 @@ participants: # Server specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/wan_server.yaml b/resources/configurations/examples/wan_server.yaml index e5adab872..fba1f8336 100644 --- a/resources/configurations/examples/wan_server.yaml +++ b/resources/configurations/examples/wan_server.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # ALLOWED TOPICS @@ -50,7 +50,7 @@ participants: # Server specifies which DDS Router starts the communication with the other, and after communication has been # established, both routers behave in the same way. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Allow DDS Topic Name with type . diff --git a/resources/configurations/examples/xml.yaml b/resources/configurations/examples/xml.yaml index 1ac99fb84..7f4c1d905 100644 --- a/resources/configurations/examples/xml.yaml +++ b/resources/configurations/examples/xml.yaml @@ -4,7 +4,7 @@ ################################## # CONFIGURATION VERSION -version: v3.0 # 0 +version: v4.0 # 0 ################################## # CONFIGURATION VERSION @@ -58,7 +58,7 @@ participants: # to DDS Domain 1. # The communication is in both directions. -# 0: Use YAML configuration version v3.0 +# 0: Use YAML configuration version v4.0 # 1: Configure how to load XML configurations. diff --git a/resources/configurations/security/dds/configurations/ddsrouter.yaml b/resources/configurations/security/dds/configurations/ddsrouter.yaml index d2224036d..68906549b 100644 --- a/resources/configurations/security/dds/configurations/ddsrouter.yaml +++ b/resources/configurations/security/dds/configurations/ddsrouter.yaml @@ -1,4 +1,4 @@ -version: v3.0 +version: v4.0 xml: files: diff --git a/tools/ddsrouter_tool/test/application/configurations/complex_configuration_v3.yaml b/tools/ddsrouter_tool/test/application/configurations/complex_configuration_v3.yaml index c2533732f..1e332b31d 100644 --- a/tools/ddsrouter_tool/test/application/configurations/complex_configuration_v3.yaml +++ b/tools/ddsrouter_tool/test/application/configurations/complex_configuration_v3.yaml @@ -6,14 +6,18 @@ # 1 Initial Peers repeater Participant with connection and listening addresses # 2 topics, one with key and one without -version: v3.0 +version: v4.0 builtin-topics: - name: "rt/chatter" type: "std_msgs::msg::dds_::String_" - name: "rt/chatter/key" type: "std_msgs::msg::dds_::String_" - keyed: true + +topics: + - name: rt/chatter/key + qos: + keyed: true allowlist: - name: "rt/*" @@ -25,7 +29,9 @@ blocklist: specs: threads: 10 - max-depth: 1000 + + qos: + history-depth: 1000 xml: raw: | diff --git a/tools/ddsrouter_tool/test/application/configurations/ds_configuration.yaml b/tools/ddsrouter_tool/test/application/configurations/ds_configuration.yaml index b88779c87..84406b2eb 100644 --- a/tools/ddsrouter_tool/test/application/configurations/ds_configuration.yaml +++ b/tools/ddsrouter_tool/test/application/configurations/ds_configuration.yaml @@ -3,14 +3,18 @@ # 1 WAN Participant with connection address # 2 topics, one with key and one without -version: v2.0 +version: v4.0 builtin-topics: - name: "rt/chatter" type: "std_msgs::msg::dds_::String_" - name: "rt/chatter/key" type: "std_msgs::msg::dds_::String_" - keyed: true + +topics: + - name: rt/chatter/key + qos: + keyed: true participants: diff --git a/tools/ddsrouter_tool/test/application/configurations/simple_configuration.yaml b/tools/ddsrouter_tool/test/application/configurations/simple_configuration.yaml index 8a8975e70..ca03e192b 100644 --- a/tools/ddsrouter_tool/test/application/configurations/simple_configuration.yaml +++ b/tools/ddsrouter_tool/test/application/configurations/simple_configuration.yaml @@ -3,14 +3,18 @@ # 1 Simple Participant in domain 0 # 2 topics, one with key and one without -version: v2.0 +version: v4.0 builtin-topics: - name: "rt/chatter" type: "std_msgs::msg::dds_::String_" - name: "rt/chatter/key" type: "std_msgs::msg::dds_::String_" - keyed: true + +topics: + - name: rt/chatter/key + qos: + keyed: true participants: diff --git a/tools/ddsrouter_tool/test/application/configurations/wan_configuration.yaml b/tools/ddsrouter_tool/test/application/configurations/wan_configuration.yaml index 22d1b8cd1..28196ef17 100644 --- a/tools/ddsrouter_tool/test/application/configurations/wan_configuration.yaml +++ b/tools/ddsrouter_tool/test/application/configurations/wan_configuration.yaml @@ -1,5 +1,5 @@ -version: v3.0 +version: v4.0 participants: diff --git a/tools/ddsrouter_yaml_validator/ddsrouter_yaml_validator/full_example.yaml b/tools/ddsrouter_yaml_validator/ddsrouter_yaml_validator/full_example.yaml index 7c85e4e80..60b68b064 100644 --- a/tools/ddsrouter_yaml_validator/ddsrouter_yaml_validator/full_example.yaml +++ b/tools/ddsrouter_yaml_validator/ddsrouter_yaml_validator/full_example.yaml @@ -1,4 +1,4 @@ -version: v2.0 # Required +version: v4.0 # Required threads: 32 # Optional @@ -15,10 +15,15 @@ blocklist: builtin-topics: - name: rt/chatter # Required type: std_msgs::msg::dds_::String_ # Required - keyed: true + - name: custom_topic # Required type: custom_topic_type # Required +topics: + - name: rt/chatter + qos: + keyed: true + participants: - name: participant0 # Required diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_ip_nor_domain.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_ip_nor_domain.yaml index c73163582..97a0ea297 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_ip_nor_domain.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_ip_nor_domain.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_port.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_port.yaml index 8eba48e6b..ccdc1fe26 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_port.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/address_no_port.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_name.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_name.yaml index d75a459af..4c117db4b 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_name.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_name.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 builtin-topics: - type: HelloWorld diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_type.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_type.yaml index 4e4b72c0c..d6fcad24d 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_type.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/builtin_topic_no_type.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 builtin-topics: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_discovery_server_guid.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_discovery_server_guid.yaml index e0c56b34e..68843dc6d 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_discovery_server_guid.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_discovery_server_guid.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_listening_nor_connection_addresses.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_listening_nor_connection_addresses.yaml index 0c43cb0cb..c7cdb2a15 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_listening_nor_connection_addresses.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/ds_participant_no_listening_nor_connection_addresses.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/filter_topic_no_name.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/filter_topic_no_name.yaml index 902305f77..84640c068 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/filter_topic_no_name.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/filter_topic_no_name.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - type: HelloWorld diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/initial_peers_no_addresses.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/initial_peers_no_addresses.yaml index af1fa2d45..e82cd8e98 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/initial_peers_no_addresses.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/initial_peers_no_addresses.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_kind.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_kind.yaml index 195956854..07f60c8e4 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_kind.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_kind.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_name.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_name.yaml index 201abfed4..8b639c347 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_name.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/no_participant_name.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_ca_no_private_key_provided_cert.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_ca_no_private_key_provided_cert.yaml index e8f56bd4f..3b2dbd12f 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_ca_no_private_key_provided_cert.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_ca_no_private_key_provided_cert.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic diff --git a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_no_ca.yaml b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_no_ca.yaml index 6d6e6de9d..1a6c0c7a7 100644 --- a/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_no_ca.yaml +++ b/tools/ddsrouter_yaml_validator/tests/invalid_configuration_files/tls_no_ca.yaml @@ -1,4 +1,4 @@ -version: v2.0 +version: v4.0 allowlist: - name: HelloWorldTopic