From 2e317a340e61f4f4553c94fdc00062162763037d Mon Sep 17 00:00:00 2001 From: Eduardo Ponz Segrelles Date: Wed, 27 Sep 2023 07:16:41 +0200 Subject: [PATCH] Add ThreadSettings to Qos (#3848) * Refs #19377: Add ThreadSettings struct Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to Log API Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to DomainParticipantFactoryQos Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to DomainParticipantQos Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to TransportConfigQos Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to TransportDescriptorInterface Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to SharedMemTransportDescriptor Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to FlowControllerDescriptor Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to DataReaderQos Signed-off-by: Eduardo Ponz * Refs #19377: Add ThreadSetting to DomainParticipantQos for builtin flow controllers Signed-off-by: Eduardo Ponz * Refs #19377: Address Miguel's comments in DomainParticipant Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in DataReader Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in ParticipantTests Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in QosConverters Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in Transport descriptors Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in DataReaderTests Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in RTPSParticipantAttibutes Signed-off-by: EduPonz * Refs #19377: Address Miguel's comments in PortBasedTransportDescriptor Signed-off-by: EduPonz * Refs #19377: Add builtin_controllers_sender_thread to UpdatableDomainParticipantQos Signed-off-by: EduPonz * Refs #19377: Refactor PortBasedTransportDescriptor accessors Signed-off-by: EduPonz * Refs #19377: Add TCP related thread settings Signed-off-by: EduPonz * Refs #19377: Add data_sharing_listener_thread to ReaderAttributes Signed-off-by: EduPonz * Refs #19377: Fix windows warning Signed-off-by: EduPonz --------- Signed-off-by: Eduardo Ponz Signed-off-by: EduPonz --- .../fastdds/dds/core/policy/QosPolicies.hpp | 11 +- .../qos/DomainParticipantFactoryQos.hpp | 76 ++++- .../dds/domain/qos/DomainParticipantQos.hpp | 150 ++++++++- include/fastdds/dds/log/Log.hpp | 12 +- .../dds/subscriber/qos/DataReaderQos.hpp | 44 ++- .../attributes/RTPSParticipantAttributes.h | 25 +- .../rtps/attributes/ReaderAttributes.h | 9 +- .../rtps/attributes/ThreadSettings.hpp | 107 +++++++ .../flowcontrol/FlowControllerDescriptor.hpp | 6 + .../PortBasedTransportDescriptor.hpp | 113 +++++++ .../transport/SocketTransportDescriptor.h | 22 +- .../rtps/transport/TCPTransportDescriptor.h | 13 +- .../transport/TransportDescriptorInterface.h | 25 +- .../shared_mem/SharedMemTransportDescriptor.h | 24 +- src/cpp/CMakeLists.txt | 22 +- .../fastdds/domain/DomainParticipantImpl.cpp | 26 ++ src/cpp/fastdds/log/Log.cpp | 14 + src/cpp/fastdds/subscriber/DataReaderImpl.cpp | 10 +- src/cpp/fastdds/utils/QosConverters.cpp | 12 + src/cpp/rtps/attributes/ThreadSettings.cpp | 32 ++ .../flowcontrol/FlowControllerFactory.cpp | 33 +- .../rtps/flowcontrol/FlowControllerImpl.hpp | 9 +- .../PortBasedTransportDescriptor.cpp | 84 ++++++ .../rtps/transport/TCPTransportInterface.cpp | 58 +++- .../SharedMemTransportDescriptor.cpp | 11 +- .../shared_mem/SharedMemTransportDescriptor.h | 6 +- test/unittest/CMakeLists.txt | 1 + .../dds/participant/ParticipantTests.cpp | 26 +- test/unittest/dds/publisher/CMakeLists.txt | 38 +-- test/unittest/dds/status/CMakeLists.txt | 20 +- .../dds/subscriber/DataReaderTests.cpp | 102 +++++++ test/unittest/dynamic_types/CMakeLists.txt | 17 +- test/unittest/rtps/attributes/CMakeLists.txt | 47 +++ .../rtps/attributes/ThreadSettingsTests.cpp | 149 +++++++++ .../FlowControllerFactoryTests.cpp | 16 +- ...FlowControllerPublishModesOnAsyncTests.cpp | 18 +- ...trollerPublishModesOnLimitedAsyncTests.cpp | 18 +- ...wControllerPublishModesOnPureSyncTests.cpp | 18 +- .../FlowControllerPublishModesOnSyncTests.cpp | 18 +- .../FlowControllerSchedulersTests.cpp | 28 +- test/unittest/rtps/network/CMakeLists.txt | 40 +-- test/unittest/statistics/dds/CMakeLists.txt | 41 +-- test/unittest/transport/CMakeLists.txt | 163 ++++++---- .../PortBasedTransportDescriptorTests.cpp | 285 ++++++++++++++++++ test/unittest/xmlparser/CMakeLists.txt | 148 ++++----- 45 files changed, 1837 insertions(+), 310 deletions(-) create mode 100644 include/fastdds/rtps/attributes/ThreadSettings.hpp create mode 100644 include/fastdds/rtps/transport/PortBasedTransportDescriptor.hpp create mode 100644 src/cpp/rtps/attributes/ThreadSettings.cpp create mode 100644 src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp create mode 100644 test/unittest/rtps/attributes/CMakeLists.txt create mode 100644 test/unittest/rtps/attributes/ThreadSettingsTests.cpp create mode 100644 test/unittest/transport/PortBasedTransportDescriptorTests.cpp diff --git a/include/fastdds/dds/core/policy/QosPolicies.hpp b/include/fastdds/dds/core/policy/QosPolicies.hpp index 3c4341fd5b5..964cfaae070 100644 --- a/include/fastdds/dds/core/policy/QosPolicies.hpp +++ b/include/fastdds/dds/core/policy/QosPolicies.hpp @@ -23,17 +23,16 @@ #include #include - #include #include #include #include +#include #include -#include #include -#include +#include #include - +#include #include #include @@ -2763,6 +2762,7 @@ class TransportConfigQos : public QosPolicy (this->use_builtin_transports == b.use_builtin_transports) && (this->send_socket_buffer_size == b.send_socket_buffer_size) && (this->listen_socket_buffer_size == b.listen_socket_buffer_size) && + (this->builtin_transports_reception_threads_ == b.builtin_transports_reception_threads_) && QosPolicy::operator ==(b); } @@ -2788,6 +2788,9 @@ class TransportConfigQos : public QosPolicy * By default, 0. */ uint32_t listen_socket_buffer_size; + + //! Thread settings for the builtin transports reception threads + rtps::ThreadSettings builtin_transports_reception_threads_; }; //! Qos Policy to configure the endpoint diff --git a/include/fastdds/dds/domain/qos/DomainParticipantFactoryQos.hpp b/include/fastdds/dds/domain/qos/DomainParticipantFactoryQos.hpp index c5562c1c462..27a49ac6819 100644 --- a/include/fastdds/dds/domain/qos/DomainParticipantFactoryQos.hpp +++ b/include/fastdds/dds/domain/qos/DomainParticipantFactoryQos.hpp @@ -20,8 +20,9 @@ #ifndef _FASTDDS_PARTICIPANTFACTORYQOS_HPP_ #define _FASTDDS_PARTICIPANTFACTORYQOS_HPP_ -#include #include +#include +#include namespace eprosima { namespace fastdds { @@ -53,7 +54,9 @@ class DomainParticipantFactoryQos bool operator ==( const DomainParticipantFactoryQos& b) const { - return (this->entity_factory_ == b.entity_factory()); + return (this->shm_watchdog_thread_ == b.shm_watchdog_thread()) && + (this->file_watch_threads_ == b.file_watch_threads()) && + (this->entity_factory_ == b.entity_factory()); } /** @@ -84,10 +87,79 @@ class DomainParticipantFactoryQos entity_factory_ = entity_factory; } + /** + * Getter for SHM watchdog ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + rtps::ThreadSettings& shm_watchdog_thread() + { + return shm_watchdog_thread_; + } + + /** + * Getter for SHM watchdog ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + const rtps::ThreadSettings& shm_watchdog_thread() const + { + return shm_watchdog_thread_; + } + + /** + * Setter for the SHM watchdog ThreadSettings + * + * @param value New ThreadSettings to be set + */ + void shm_watchdog_thread( + const rtps::ThreadSettings& value) + { + shm_watchdog_thread_ = value; + } + + /** + * Getter for file watch related ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + rtps::ThreadSettings& file_watch_threads() + { + return file_watch_threads_; + } + + /** + * Getter for file watch related ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + const rtps::ThreadSettings& file_watch_threads() const + { + return file_watch_threads_; + } + + /** + * Setter for the file watch related ThreadSettings + * + * @param value New ThreadSettings to be set + */ + void file_watch_threads( + const rtps::ThreadSettings& value) + { + file_watch_threads_ = value; + } + private: //!EntityFactoryQosPolicy, implemented in the library. EntityFactoryQosPolicy entity_factory_; + + //! Thread settings for the SHM watchdog thread + rtps::ThreadSettings shm_watchdog_thread_; + + //! Thread settings for the file watch related threads + rtps::ThreadSettings file_watch_threads_; + }; } /* namespace dds */ diff --git a/include/fastdds/dds/domain/qos/DomainParticipantQos.hpp b/include/fastdds/dds/domain/qos/DomainParticipantQos.hpp index 0f040b583d7..f2b1b8e1206 100644 --- a/include/fastdds/dds/domain/qos/DomainParticipantQos.hpp +++ b/include/fastdds/dds/domain/qos/DomainParticipantQos.hpp @@ -22,9 +22,10 @@ #include -#include #include +#include #include +#include namespace eprosima { namespace fastdds { @@ -81,6 +82,12 @@ class DomainParticipantQos (this->wire_protocol_ == b.wire_protocol()) && (this->transport_ == b.transport()) && (this->name_ == b.name()) && + (this->builtin_controllers_sender_thread_ == b.builtin_controllers_sender_thread()) && + (this->timed_events_thread_ == b.timed_events_thread()) && + (this->discovery_server_thread_ == b.discovery_server_thread()) && +#if HAVE_SECURITY + (this->security_log_thread_ == b.security_log_thread()) && +#endif // if HAVE_SECURITY (this->flow_controllers_ == b.flow_controllers()); } @@ -321,6 +328,133 @@ class DomainParticipantQos return flow_controllers_; } + /** + * Getter for builtin flow controllers sender threads ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + rtps::ThreadSettings& builtin_controllers_sender_thread() + { + return builtin_controllers_sender_thread_; + } + + /** + * Getter for builtin flow controllers sender threads ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + const rtps::ThreadSettings& builtin_controllers_sender_thread() const + { + return builtin_controllers_sender_thread_; + } + + /** + * Setter for the builtin flow controllers sender threads ThreadSettings + * + * @param value New ThreadSettings to be set + */ + void builtin_controllers_sender_thread( + const rtps::ThreadSettings& value) + { + builtin_controllers_sender_thread_ = value; + } + + /** + * Getter for timed event ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + rtps::ThreadSettings& timed_events_thread() + { + return timed_events_thread_; + } + + /** + * Getter for timed event ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + const rtps::ThreadSettings& timed_events_thread() const + { + return timed_events_thread_; + } + + /** + * Setter for the timed event ThreadSettings + * + * @param value New ThreadSettings to be set + */ + void timed_events_thread( + const rtps::ThreadSettings& value) + { + timed_events_thread_ = value; + } + + /** + * Getter for discovery server ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + rtps::ThreadSettings& discovery_server_thread() + { + return discovery_server_thread_; + } + + /** + * Getter for discovery server ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + const rtps::ThreadSettings& discovery_server_thread() const + { + return discovery_server_thread_; + } + + /** + * Setter for the discovery server ThreadSettings + * + * @param value New ThreadSettings to be set + */ + void discovery_server_thread( + const rtps::ThreadSettings& value) + { + discovery_server_thread_ = value; + } + +#if HAVE_SECURITY + /** + * Getter for security log ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + rtps::ThreadSettings& security_log_thread() + { + return security_log_thread_; + } + + /** + * Getter for security log ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + const rtps::ThreadSettings& security_log_thread() const + { + return security_log_thread_; + } + + /** + * Setter for the security log ThreadSettings + * + * @param value New ThreadSettings to be set + */ + void security_log_thread( + const rtps::ThreadSettings& value) + { + security_log_thread_ = value; + } + +#endif // if HAVE_SECURITY + private: //!UserData Qos, implemented in the library. @@ -350,6 +484,20 @@ class DomainParticipantQos */ FlowControllerDescriptorList flow_controllers_; + //! Thread settings for the builtin flow controllers sender threads + rtps::ThreadSettings builtin_controllers_sender_thread_; + + //! Thread settings for the timed events thread + rtps::ThreadSettings timed_events_thread_; + + //! Thread settings for the discovery server thread + rtps::ThreadSettings discovery_server_thread_; + +#if HAVE_SECURITY + //! Thread settings for the security log thread + rtps::ThreadSettings security_log_thread_; +#endif // if HAVE_SECURITY + }; RTPS_DllAPI extern const DomainParticipantQos PARTICIPANT_QOS_DEFAULT; diff --git a/include/fastdds/dds/log/Log.hpp b/include/fastdds/dds/log/Log.hpp index 1cc524ff9cb..1bbbd3bf4bc 100644 --- a/include/fastdds/dds/log/Log.hpp +++ b/include/fastdds/dds/log/Log.hpp @@ -15,11 +15,13 @@ #ifndef _FASTDDS_DDS_LOG_LOG_HPP_ #define _FASTDDS_DDS_LOG_LOG_HPP_ -#include -#include -#include #include #include +#include +#include + +#include +#include /** * eProsima log layer. Logging categories and verbosity can be specified dynamically at runtime. @@ -131,6 +133,10 @@ class Log RTPS_DllAPI static void SetErrorStringFilter( const std::regex&); + //! Sets thread configuration for the logging thread. + RTPS_DllAPI static void SetThreadConfig( + const rtps::ThreadSettings&); + //! Returns the logging engine to configuration defaults. RTPS_DllAPI static void Reset(); diff --git a/include/fastdds/dds/subscriber/qos/DataReaderQos.hpp b/include/fastdds/dds/subscriber/qos/DataReaderQos.hpp index 87a80a2764f..046babaf8b7 100644 --- a/include/fastdds/dds/subscriber/qos/DataReaderQos.hpp +++ b/include/fastdds/dds/subscriber/qos/DataReaderQos.hpp @@ -21,13 +21,13 @@ #define _FASTDDS_DATAREADERQOS_HPP #include +#include #include #include -#include - #include +#include #include - +#include namespace eprosima { namespace fastdds { @@ -208,7 +208,8 @@ class DataReaderQos (properties_ == b.properties()) && (endpoint_ == b.endpoint()) && (reader_resource_limits_ == b.reader_resource_limits()) && - (data_sharing_ == b.data_sharing()); + (data_sharing_ == b.data_sharing()) && + (data_sharing_listener_thread_ == b.data_sharing_listener_thread()); } RTPS_DllAPI ReaderQos get_readerqos( @@ -855,6 +856,37 @@ class DataReaderQos data_sharing_ = data_sharing; } + /** + * Getter for data sharing listener ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + RTPS_DllAPI rtps::ThreadSettings& data_sharing_listener_thread() + { + return data_sharing_listener_thread_; + } + + /** + * Getter for data sharing listener ThreadSettings + * + * @return rtps::ThreadSettings reference + */ + RTPS_DllAPI const rtps::ThreadSettings& data_sharing_listener_thread() const + { + return data_sharing_listener_thread_; + } + + /** + * Setter for data sharing listener ThreadSettings + * + * @param data_sharing_listener_thread new value for the rtps::ThreadSettings + */ + RTPS_DllAPI void data_sharing_listener_thread( + const rtps::ThreadSettings& data_sharing_listener_thread) + { + data_sharing_listener_thread_ = data_sharing_listener_thread; + } + private: //!Durability Qos, implemented in the library. @@ -893,7 +925,6 @@ class DataReaderQos //!Reader Data Lifecycle Qos, NOT implemented in the library. ReaderDataLifecycleQosPolicy reader_data_lifecycle_; - //!Lifespan Qos (Extension). LifespanQosPolicy lifespan_; @@ -920,6 +951,9 @@ class DataReaderQos //!DataSharing configuration (Extension) DataSharingQosPolicy data_sharing_; + + //! Thread settings for the data-sharing listener thread + rtps::ThreadSettings data_sharing_listener_thread_; }; RTPS_DllAPI extern const DataReaderQos DATAREADER_QOS_DEFAULT; diff --git a/include/fastdds/rtps/attributes/RTPSParticipantAttributes.h b/include/fastdds/rtps/attributes/RTPSParticipantAttributes.h index b6ce937ccdf..ea73277ca7a 100644 --- a/include/fastdds/rtps/attributes/RTPSParticipantAttributes.h +++ b/include/fastdds/rtps/attributes/RTPSParticipantAttributes.h @@ -19,10 +19,14 @@ #ifndef _FASTDDS_RTPSPARTICIPANTPARAMETERS_H_ #define _FASTDDS_RTPSPARTICIPANTPARAMETERS_H_ +#include +#include + #include #include #include #include +#include #include #include #include @@ -31,11 +35,9 @@ #include #include #include +#include #include -#include -#include - namespace eprosima { namespace fastdds { @@ -484,7 +486,8 @@ class RTPSParticipantAttributes (this->useBuiltinTransports == b.useBuiltinTransports) && (this->properties == b.properties) && (this->prefix == b.prefix) && - (this->flow_controllers == b.flow_controllers); + (this->flow_controllers == b.flow_controllers) && + (this->builtin_controllers_sender_thread == b.builtin_controllers_sender_thread); } /** @@ -576,6 +579,20 @@ class RTPSParticipantAttributes //! Flow controllers. FlowControllerDescriptorList flow_controllers; + //! Thread settings for the builtin flow controllers sender threads + fastdds::rtps::ThreadSettings builtin_controllers_sender_thread; + + //! Thread settings for the timed events thread + fastdds::rtps::ThreadSettings timed_events_thread; + + //! Thread settings for the discovery server thread + fastdds::rtps::ThreadSettings discovery_server_thread; + +#if HAVE_SECURITY + //! Thread settings for the security log thread + fastdds::rtps::ThreadSettings security_log_thread; +#endif // if HAVE_SECURITY + private: //! Name of the participant. diff --git a/include/fastdds/rtps/attributes/ReaderAttributes.h b/include/fastdds/rtps/attributes/ReaderAttributes.h index d7431f057b5..890623425eb 100644 --- a/include/fastdds/rtps/attributes/ReaderAttributes.h +++ b/include/fastdds/rtps/attributes/ReaderAttributes.h @@ -20,14 +20,12 @@ #ifndef _FASTDDS_RTPS_ATTRIBUTES_READERATTRIBUTES_H_ #define _FASTDDS_RTPS_ATTRIBUTES_READERATTRIBUTES_H_ -#include -#include #include +#include +#include #include #include -#include - namespace eprosima { namespace fastrtps { namespace rtps { @@ -106,6 +104,9 @@ class ReaderAttributes //! Define the allocation behaviour for matched-writer-dependent collections. ResourceLimitedContainerConfig matched_writers_allocation; + + //! Thread settings for the data-sharing listener thread + fastdds::rtps::ThreadSettings data_sharing_listener_thread; }; } /* namespace rtps */ diff --git a/include/fastdds/rtps/attributes/ThreadSettings.hpp b/include/fastdds/rtps/attributes/ThreadSettings.hpp new file mode 100644 index 00000000000..bd6c9ad34ae --- /dev/null +++ b/include/fastdds/rtps/attributes/ThreadSettings.hpp @@ -0,0 +1,107 @@ +// 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 ThreadSettings.hpp + */ + +#include + +#include + +#ifndef _FASTDDS_THREADSETTINGS_HPP_ +#define _FASTDDS_THREADSETTINGS_HPP_ + +namespace eprosima { +namespace fastdds { +namespace rtps { + +/** + * Struct ThreadSettings to specify various thread settings. + * This class is used to define attributes across a wide set of Qos and APIs. + * @ingroup RTPS_ATTRIBUTES_MODULE + */ +struct RTPS_DllAPI ThreadSettings +{ + /** + * @brief The scheduling policy used for this thread. + * + * Configures the scheduling policy used for the thread. + * A value of -1 indicates system default. + * + * This value is platform specific and it is used as-is to configure the specific platform thread. + * Setting this value to something other than the default one may require different privileges + * on different platforms. + */ + int32_t scheduling_policy = -1; + + /** + * @brief The thread's priority. + * + * Configures the thread's priority. + * A value of 0 indicates system default. + * + * This value is platform specific and it is used as-is to configure the specific platform thread. + * Setting this value to something other than the default one may require different privileges + * on different platforms. + */ + int32_t priority = 0; + + /** + * @brief The thread's core affinity. + * + * cpu_mask is a bit mask for setting the threads affinity to each core individually. + * A value of 0 indicates no particular affinity. + * + * This value is platform specific and it is used as-is to configure the specific platform thread. + * Setting this value to something other than the default one may require different privileges + * on different platforms. + */ + uint32_t cpu_mask = 0; + + /** + * @brief The thread's stack size in bytes. + * + * Configures the thread's stack size. + * A value of -1 indicates system default. + * + * This value is platform specific and it is used as-is to configure the specific platform thread. + * Setting this value to something other than the default one may require different privileges + * on different platforms. + */ + int32_t stack_size = -1; + + /** + * Compare the left hand side (LHS) ThreadSetting with another one for equality. + * + * @param rhs The ThreadSettings instance to compare with the LHS one. + */ + bool operator ==( + const ThreadSettings& rhs) const; + + /** + * Compare the left hand side (LHS) ThreadSetting with another one for inequality. + * + * @param rhs The ThreadSettings instance to compare with the LHS one. + */ + bool operator !=( + const ThreadSettings& rhs) const; + +}; + +} // namespace rtps +} // namespace fastdds +} // namespace eprosima + +#endif /* _FASTDDS_THREADSETTINGS_HPP_ */ diff --git a/include/fastdds/rtps/flowcontrol/FlowControllerDescriptor.hpp b/include/fastdds/rtps/flowcontrol/FlowControllerDescriptor.hpp index 8e5c489eb74..35873f7f994 100644 --- a/include/fastdds/rtps/flowcontrol/FlowControllerDescriptor.hpp +++ b/include/fastdds/rtps/flowcontrol/FlowControllerDescriptor.hpp @@ -15,6 +15,8 @@ #ifndef FASTDDS_RTPS_FLOWCONTROL_FLOWCONTROLLERDESCRIPTOR_HPP #define FASTDDS_RTPS_FLOWCONTROL_FLOWCONTROLLERDESCRIPTOR_HPP +#include + #include "FlowControllerConsts.hpp" #include "FlowControllerSchedulerPolicy.hpp" @@ -50,6 +52,10 @@ struct FlowControllerDescriptor //! Period of time on which the flow controller is allowed to send max_bytes_per_period. //! Default value: 100ms. uint64_t period_ms = 100; + + //! Thread settings for the sender thread + ThreadSettings sender_thread; + }; } // namespace rtps diff --git a/include/fastdds/rtps/transport/PortBasedTransportDescriptor.hpp b/include/fastdds/rtps/transport/PortBasedTransportDescriptor.hpp new file mode 100644 index 00000000000..e34002ac0a5 --- /dev/null +++ b/include/fastdds/rtps/transport/PortBasedTransportDescriptor.hpp @@ -0,0 +1,113 @@ +// 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. + +#ifndef _FASTDDS_PORT_BASED_TRANSPORT_DESCRIPTOR_H_ +#define _FASTDDS_PORT_BASED_TRANSPORT_DESCRIPTOR_H_ + +#include +#include + +#include +#include +#include + +namespace eprosima { +namespace fastdds { +namespace rtps { + +/** + * Base class for all port based transport descriptors + * + * This class provides a common thread settings configuration for all + * port based transport descriptor implementations + * + * @ingroup TRANSPORT_MODULE + */ +class PortBasedTransportDescriptor : public TransportDescriptorInterface +{ +public: + + using ReceptionThreadsConfigMap = std::map; + + //! Constructor + RTPS_DllAPI PortBasedTransportDescriptor( + uint32_t maximumMessageSize, + uint32_t maximumInitialPeersRange); + + //! Copy constructor + RTPS_DllAPI PortBasedTransportDescriptor( + const PortBasedTransportDescriptor& t) = default; + + //! Copy assignment + RTPS_DllAPI PortBasedTransportDescriptor& operator =( + const PortBasedTransportDescriptor& t) = default; + + //! Destructor + virtual RTPS_DllAPI ~PortBasedTransportDescriptor() = default; + + //! Comparison operator + bool RTPS_DllAPI operator ==( + const PortBasedTransportDescriptor& t) const; + + /** + * @brief Get the ThreadSettings for a specific port + * + * This function first looks for the port-specific ThreadSettings in the user-configured + * reception threads map, i.e. the collection of ThreadSettings returned by @ref reception_threads(). + * If the ThreadSettings are found within said map, then @ref get_thread_config_for_port(uint32_t) returns them; + * else it returns the default reception thread settings, i.e. the ThreadSettings returned by + * @ref default_reception_threads(). + * + * @warning This function will return the default reception thread ThreadSettings when called with a non-default, + * non-user-configured port. + * + * @param port The port to which the returned ThreadSetting apply. + * + * @return The ThreadSettings for the given port. + */ + virtual RTPS_DllAPI const ThreadSettings& get_thread_config_for_port( + uint32_t port); + + virtual RTPS_DllAPI bool set_thread_config_for_port( + const uint32_t& port, + const ThreadSettings& thread_settings); + + //! Returns the ThreadSettings for the default reception threads + RTPS_DllAPI const ThreadSettings& default_reception_threads() const; + + //! Set the ThreadSettings for the default reception threads + virtual RTPS_DllAPI void default_reception_threads( + const ThreadSettings& default_reception_threads); + + //! Returns the ThreadSettings for the user-configured reception threads + RTPS_DllAPI const ReceptionThreadsConfigMap& reception_threads() const; + + //! Set the ThreadSettings for the user-configured reception threads + virtual RTPS_DllAPI bool reception_threads( + const ReceptionThreadsConfigMap& reception_threads); + +protected: + + //! Thread settings for the default reception threads + ThreadSettings default_reception_threads_; + + //! Thread settings for the specific reception threads, indexed by port + ReceptionThreadsConfigMap reception_threads_; +}; + +} // namespace rtps +} // namespace fastdds +} // namespace eprosima + +#endif // ifndef _FASTDDS_PORT_BASED_TRANSPORT_DESCRIPTOR_H_ diff --git a/include/fastdds/rtps/transport/SocketTransportDescriptor.h b/include/fastdds/rtps/transport/SocketTransportDescriptor.h index 2ca5cb4d62f..0b03eabdb23 100644 --- a/include/fastdds/rtps/transport/SocketTransportDescriptor.h +++ b/include/fastdds/rtps/transport/SocketTransportDescriptor.h @@ -15,12 +15,12 @@ #ifndef _FASTDDS_SOCKET_TRANSPORT_DESCRIPTOR_H_ #define _FASTDDS_SOCKET_TRANSPORT_DESCRIPTOR_H_ -#include - #include #include #include +#include + namespace eprosima { namespace fastdds { namespace rtps { @@ -41,13 +41,13 @@ constexpr uint8_t s_defaultTTL = 1; * * @ingroup RTPS_MODULE * */ -struct SocketTransportDescriptor : public TransportDescriptorInterface +struct SocketTransportDescriptor : public PortBasedTransportDescriptor { //! Constructor - SocketTransportDescriptor( + RTPS_DllAPI SocketTransportDescriptor( uint32_t maximumMessageSize, uint32_t maximumInitialPeersRange) - : TransportDescriptorInterface(maximumMessageSize, maximumInitialPeersRange) + : PortBasedTransportDescriptor(maximumMessageSize, maximumInitialPeersRange) , sendBufferSize(0) , receiveBufferSize(0) , TTL(s_defaultTTL) @@ -55,30 +55,30 @@ struct SocketTransportDescriptor : public TransportDescriptorInterface } //! Copy constructor - SocketTransportDescriptor( + RTPS_DllAPI SocketTransportDescriptor( const SocketTransportDescriptor& t) = default; //! Copy assignment - SocketTransportDescriptor& operator =( + RTPS_DllAPI SocketTransportDescriptor& operator =( const SocketTransportDescriptor& t) = default; //! Destructor - virtual ~SocketTransportDescriptor() = default; + virtual RTPS_DllAPI ~SocketTransportDescriptor() = default; - virtual uint32_t min_send_buffer_size() const override + virtual RTPS_DllAPI uint32_t min_send_buffer_size() const override { return sendBufferSize; } //! Comparison operator - bool operator ==( + bool RTPS_DllAPI operator ==( const SocketTransportDescriptor& t) const { return (this->sendBufferSize == t.min_send_buffer_size() && this->receiveBufferSize == t.receiveBufferSize && this->interfaceWhiteList == t.interfaceWhiteList && this->TTL == t.TTL && - TransportDescriptorInterface::operator ==(t)); + PortBasedTransportDescriptor::operator ==(t)); } //! Length of the send buffer. diff --git a/include/fastdds/rtps/transport/TCPTransportDescriptor.h b/include/fastdds/rtps/transport/TCPTransportDescriptor.h index 43b7737b019..013441ef90a 100644 --- a/include/fastdds/rtps/transport/TCPTransportDescriptor.h +++ b/include/fastdds/rtps/transport/TCPTransportDescriptor.h @@ -15,9 +15,14 @@ #ifndef _FASTDDS_TCP_TRANSPORT_DESCRIPTOR_H_ #define _FASTDDS_TCP_TRANSPORT_DESCRIPTOR_H_ +#include +#include +#include +#include + +#include #include #include -#include namespace eprosima { namespace fastdds { @@ -265,6 +270,12 @@ struct TCPTransportDescriptor : public SocketTransportDescriptor //! Configuration of the TLS (Transport Layer Security) TLSConfig tls_config; + //! Thread settings for keep alive thread + ThreadSettings keep_alive_thread; + + //! Thread settings for the accept connections thread + ThreadSettings accept_thread; + //! Add listener port to the listening_ports list void add_listener_port( uint16_t port) diff --git a/include/fastdds/rtps/transport/TransportDescriptorInterface.h b/include/fastdds/rtps/transport/TransportDescriptorInterface.h index 232f15aa722..47a9fbfd609 100644 --- a/include/fastdds/rtps/transport/TransportDescriptorInterface.h +++ b/include/fastdds/rtps/transport/TransportDescriptorInterface.h @@ -15,12 +15,11 @@ #ifndef _FASTDDS_TRANSPORT_DESCRIPTOR_INTERFACE_H_ #define _FASTDDS_TRANSPORT_DESCRIPTOR_INTERFACE_H_ -#include - #include -#include #include +#include + namespace eprosima { namespace fastdds { namespace rtps { @@ -39,10 +38,10 @@ class TransportInterface; * * @ingroup RTPS_MODULE * */ -struct RTPS_DllAPI TransportDescriptorInterface +struct TransportDescriptorInterface { //! Constructor - TransportDescriptorInterface( + RTPS_DllAPI TransportDescriptorInterface( uint32_t maximumMessageSize, uint32_t maximumInitialPeersRange) : maxMessageSize(maximumMessageSize) @@ -51,28 +50,28 @@ struct RTPS_DllAPI TransportDescriptorInterface } //! Copy constructor - TransportDescriptorInterface( + RTPS_DllAPI TransportDescriptorInterface( const TransportDescriptorInterface& t) = default; //! Copy assignment - TransportDescriptorInterface& operator =( + RTPS_DllAPI TransportDescriptorInterface& operator =( const TransportDescriptorInterface& t) = default; //! Destructor - virtual ~TransportDescriptorInterface() = default; + virtual RTPS_DllAPI ~TransportDescriptorInterface() = default; /** * Factory method pattern. It will create and return a TransportInterface * corresponding to this descriptor. This provides an interface to the NetworkFactory * to create the transports without the need to know about their type */ - virtual TransportInterface* create_transport() const = 0; + virtual RTPS_DllAPI TransportInterface* create_transport() const = 0; //! Returns the minimum size required for a send operation. - virtual uint32_t min_send_buffer_size() const = 0; + virtual RTPS_DllAPI uint32_t min_send_buffer_size() const = 0; //! Returns the maximum size expected for received messages. - virtual uint32_t max_message_size() const + virtual RTPS_DllAPI uint32_t max_message_size() const { return maxMessageSize; } @@ -80,13 +79,13 @@ struct RTPS_DllAPI TransportDescriptorInterface /** Returns the maximum number of opened channels for each initial remote peer * (maximum number of guessed initial peers to try to connect) */ - virtual uint32_t max_initial_peers_range() const + virtual RTPS_DllAPI uint32_t max_initial_peers_range() const { return maxInitialPeersRange; } //! Comparison operator - bool operator ==( + RTPS_DllAPI bool operator ==( const TransportDescriptorInterface& t) const { return (this->maxMessageSize == t.max_message_size() && diff --git a/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h b/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h index 9152efc0893..db8d1951607 100644 --- a/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h +++ b/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h @@ -15,7 +15,11 @@ #ifndef _FASTDDS_SHAREDMEM_TRANSPORT_DESCRIPTOR_ #define _FASTDDS_SHAREDMEM_TRANSPORT_DESCRIPTOR_ -#include "fastdds/rtps/transport/TransportDescriptorInterface.h" +#include + +#include +#include +#include namespace eprosima { namespace fastdds { @@ -37,7 +41,7 @@ class TransportInterface; * * @ingroup TRANSPORT_MODULE */ -struct SharedMemTransportDescriptor : public TransportDescriptorInterface +struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor { //! Destructor virtual ~SharedMemTransportDescriptor() = default; @@ -126,6 +130,19 @@ struct SharedMemTransportDescriptor : public TransportDescriptorInterface rtps_dump_file_ = rtps_dump_file; } + //! Return the thread settings for the transport dump thread + RTPS_DllAPI ThreadSettings dump_thread() const + { + return dump_thread_; + } + + //! Set the thread settings for the transport dump thread + RTPS_DllAPI void dump_thread( + const ThreadSettings& dump_thread) + { + dump_thread_ = dump_thread; + } + //! Comparison operator RTPS_DllAPI bool operator ==( const SharedMemTransportDescriptor& t) const; @@ -137,6 +154,9 @@ struct SharedMemTransportDescriptor : public TransportDescriptorInterface uint32_t healthy_check_timeout_ms_; std::string rtps_dump_file_; + //! Thread settings for the transport dump thread + ThreadSettings dump_thread_; + }; } // namespace rtps diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index 9a459ac15b7..b3da097019a 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -122,23 +122,24 @@ set(${PROJECT_NAME}_source_files fastdds/builtin/typelookup/TypeLookupManager.cpp fastdds/builtin/typelookup/TypeLookupRequestListener.cpp fastdds/builtin/typelookup/TypeLookupReplyListener.cpp + rtps/transport/ChainingTransport.cpp rtps/transport/ChannelResource.cpp - rtps/transport/UDPChannelResource.cpp - rtps/transport/TCPChannelResource.cpp - rtps/transport/TCPChannelResourceBasic.cpp + rtps/transport/PortBasedTransportDescriptor.cpp + rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp + rtps/transport/tcp/RTCPMessageManager.cpp + rtps/transport/tcp/TCPControlMessage.cpp rtps/transport/TCPAcceptor.cpp rtps/transport/TCPAcceptorBasic.cpp - rtps/transport/UDPv4Transport.cpp + rtps/transport/TCPChannelResource.cpp + rtps/transport/TCPChannelResourceBasic.cpp rtps/transport/TCPTransportInterface.cpp - rtps/transport/UDPTransportInterface.cpp - rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp rtps/transport/TCPv4Transport.cpp - rtps/transport/UDPv6Transport.cpp rtps/transport/TCPv6Transport.cpp rtps/transport/test_UDPv4Transport.cpp - rtps/transport/tcp/TCPControlMessage.cpp - rtps/transport/tcp/RTCPMessageManager.cpp - rtps/transport/ChainingTransport.cpp + rtps/transport/UDPChannelResource.cpp + rtps/transport/UDPTransportInterface.cpp + rtps/transport/UDPv4Transport.cpp + rtps/transport/UDPv6Transport.cpp dynamic-types/AnnotationDescriptor.cpp dynamic-types/AnnotationParameterValue.cpp @@ -198,6 +199,7 @@ set(${PROJECT_NAME}_source_files rtps/flowcontrol/FlowControllerFactory.cpp rtps/exceptions/Exception.cpp rtps/attributes/PropertyPolicy.cpp + rtps/attributes/ThreadSettings.cpp rtps/common/Token.cpp rtps/xmlparser/XMLParserCommon.cpp rtps/xmlparser/XMLElementParser.cpp diff --git a/src/cpp/fastdds/domain/DomainParticipantImpl.cpp b/src/cpp/fastdds/domain/DomainParticipantImpl.cpp index b703685cda8..56e4023b637 100644 --- a/src/cpp/fastdds/domain/DomainParticipantImpl.cpp +++ b/src/cpp/fastdds/domain/DomainParticipantImpl.cpp @@ -2322,6 +2322,32 @@ bool DomainParticipantImpl::can_qos_be_updated( updatable = false; EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, "Participant name cannot be changed after the participant is enabled"); } + if (!(to.builtin_controllers_sender_thread() == from.builtin_controllers_sender_thread())) + { + updatable = false; + EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, + "Participant builtin_controllers_sender_thread cannot be changed after the participant is enabled"); + } + if (!(to.timed_events_thread() == from.timed_events_thread())) + { + updatable = false; + EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, + "Participant timed_events_thread cannot be changed after the participant is enabled"); + } + if (!(to.discovery_server_thread() == from.discovery_server_thread())) + { + updatable = false; + EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, + "Participant discovery_server_thread cannot be changed after the participant is enabled"); + } +#if HAVE_SECURITY + if (!(to.security_log_thread() == from.security_log_thread())) + { + updatable = false; + EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, + "Participant security_log_thread cannot be changed after the participant is enabled"); + } +#endif // if HAVE_SECURITY return updatable; } diff --git a/src/cpp/fastdds/log/Log.cpp b/src/cpp/fastdds/log/Log.cpp index 27e37ff53b4..ff33c5f5b96 100644 --- a/src/cpp/fastdds/log/Log.cpp +++ b/src/cpp/fastdds/log/Log.cpp @@ -130,6 +130,14 @@ struct LogResources error_string_filter_.reset(new std::regex(filter)); } + //! Sets thread configuration for the logging thread. + void SetThreadConfig( + const rtps::ThreadSettings& config) + { + static_cast(config); + return; + } + //! Returns the logging_ engine to configuration defaults. void Reset() { @@ -439,6 +447,12 @@ void Log::SetErrorStringFilter( detail::get_log_resources()->SetErrorStringFilter(filter); } +void Log::SetThreadConfig( + const rtps::ThreadSettings& config) +{ + detail::get_log_resources()->SetThreadConfig(config); +} + void LogConsumer::print_timestamp( std::ostream& stream, const Log::Entry& entry, diff --git a/src/cpp/fastdds/subscriber/DataReaderImpl.cpp b/src/cpp/fastdds/subscriber/DataReaderImpl.cpp index 700de22f92b..f21d339f7c2 100644 --- a/src/cpp/fastdds/subscriber/DataReaderImpl.cpp +++ b/src/cpp/fastdds/subscriber/DataReaderImpl.cpp @@ -139,6 +139,7 @@ ReturnCode_t DataReaderImpl::enable() ReaderAttributes att; + // TODO(eduponz): Encapsulate this in QosConverters.cpp att.endpoint.durabilityKind = qos_.durability().durabilityKind(); att.endpoint.endpointKind = READER; att.endpoint.reliabilityKind = qos_.reliability().kind == RELIABLE_RELIABILITY_QOS ? RELIABLE : BEST_EFFORT; @@ -158,7 +159,7 @@ ReturnCode_t DataReaderImpl::enable() att.matched_writers_allocation = qos_.reader_resource_limits().matched_publisher_allocation; att.expectsInlineQos = qos_.expects_inline_qos(); att.disable_positive_acks = qos_.reliable_reader_qos().disable_positive_ACKs.enabled; - + att.data_sharing_listener_thread = qos_.data_sharing_listener_thread(); // TODO(Ricardo) Remove in future // Insert topic_name and partitions @@ -810,6 +811,7 @@ void DataReaderImpl::update_rtps_reader_qos() } ReaderQos rqos = qos_.get_readerqos(get_subscriber()->get_qos()); subscriber_->rtps_participant()->updateReader(reader_, topic_attributes(), rqos, filter_property); + // TODO(eduponz): RTPSReader attributes must be updated here } } @@ -1563,6 +1565,12 @@ bool DataReaderImpl::can_qos_be_updated( EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, "Positive ACKs QoS cannot be changed after the creation of a DataReader."); } + if (!(to.data_sharing_listener_thread() == from.data_sharing_listener_thread())) + { + updatable = false; + EPROSIMA_LOG_WARNING(RTPS_QOS_CHECK, + "data_sharing_listener_thread cannot be changed after the DataReader is enabled"); + } return updatable; } diff --git a/src/cpp/fastdds/utils/QosConverters.cpp b/src/cpp/fastdds/utils/QosConverters.cpp index dbfcb7453e4..6d8b0e44d5b 100644 --- a/src/cpp/fastdds/utils/QosConverters.cpp +++ b/src/cpp/fastdds/utils/QosConverters.cpp @@ -156,6 +156,12 @@ void set_qos_from_attributes( qos.transport().listen_socket_buffer_size = attr.listenSocketBufferSize; qos.name() = attr.getName(); qos.flow_controllers() = attr.flow_controllers; + qos.builtin_controllers_sender_thread() = attr.builtin_controllers_sender_thread; + qos.timed_events_thread() = attr.timed_events_thread; + qos.discovery_server_thread() = attr.discovery_server_thread; +#if HAVE_SECURITY + qos.security_log_thread() = attr.security_log_thread; +#endif // if HAVE_SECURITY // Merge attributes and qos properties for (auto property : attr.properties.properties()) @@ -196,6 +202,12 @@ void set_attributes_from_qos( attr.listenSocketBufferSize = qos.transport().listen_socket_buffer_size; attr.userData = qos.user_data().data_vec(); attr.flow_controllers = qos.flow_controllers(); + attr.builtin_controllers_sender_thread = qos.builtin_controllers_sender_thread(); + attr.timed_events_thread = qos.timed_events_thread(); + attr.discovery_server_thread = qos.discovery_server_thread(); +#if HAVE_SECURITY + attr.security_log_thread = qos.security_log_thread(); +#endif // if HAVE_SECURITY } void set_qos_from_attributes( diff --git a/src/cpp/rtps/attributes/ThreadSettings.cpp b/src/cpp/rtps/attributes/ThreadSettings.cpp new file mode 100644 index 00000000000..8ee925711d1 --- /dev/null +++ b/src/cpp/rtps/attributes/ThreadSettings.cpp @@ -0,0 +1,32 @@ +// 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. + +#include + +using namespace eprosima::fastdds::rtps; + +bool ThreadSettings::operator ==( + const ThreadSettings& rhs) const +{ + return (scheduling_policy == rhs.scheduling_policy && + priority == rhs.priority && + cpu_mask == rhs.cpu_mask && + stack_size == rhs.stack_size); +} + +bool ThreadSettings::operator !=( + const ThreadSettings& rhs) const +{ + return !(*this == rhs); +} diff --git a/src/cpp/rtps/flowcontrol/FlowControllerFactory.cpp b/src/cpp/rtps/flowcontrol/FlowControllerFactory.cpp index e1e3b9f5464..aa5860dfd63 100644 --- a/src/cpp/rtps/flowcontrol/FlowControllerFactory.cpp +++ b/src/cpp/rtps/flowcontrol/FlowControllerFactory.cpp @@ -20,31 +20,38 @@ void FlowControllerFactory::init( participant_ = participant; // Create default flow controllers. + const ThreadSettings& sender_thread_settings = + (nullptr == participant_) ? ThreadSettings{} + : participant_->getAttributes().builtin_controllers_sender_thread; + // PureSyncFlowController -> used by volatile besteffort writers. flow_controllers_.insert(decltype(flow_controllers_)::value_type( pure_sync_flow_controller_name, std::unique_ptr( new FlowControllerImpl(participant_, nullptr, 0)))); + FlowControllerFifoSchedule>(participant_, nullptr, 0, sender_thread_settings)))); // SyncFlowController -> used by rest of besteffort writers. flow_controllers_.insert(decltype(flow_controllers_)::value_type( sync_flow_controller_name, std::unique_ptr( new FlowControllerImpl(participant_, nullptr, async_controller_index_++)))); + FlowControllerFifoSchedule>(participant_, nullptr, async_controller_index_++, + sender_thread_settings)))); // AsyncFlowController flow_controllers_.insert(decltype(flow_controllers_)::value_type( async_flow_controller_name, std::unique_ptr( new FlowControllerImpl(participant_, nullptr, async_controller_index_++)))); + FlowControllerFifoSchedule>(participant_, nullptr, async_controller_index_++, + sender_thread_settings)))); #ifdef FASTDDS_STATISTICS flow_controllers_.insert(decltype(flow_controllers_)::value_type( async_statistics_flow_controller_name, std::unique_ptr( new FlowControllerImpl(participant_, nullptr, async_controller_index_++)))); + FlowControllerFifoSchedule>(participant_, nullptr, async_controller_index_++, + sender_thread_settings)))); #endif // ifndef FASTDDS_STATISTICS } @@ -58,6 +65,8 @@ void FlowControllerFactory::register_flow_controller ( return; } + const ThreadSettings& sender_thread_settings = flow_controller_descr.sender_thread; + if (0 < flow_controller_descr.max_bytes_per_period) { switch (flow_controller_descr.scheduler) @@ -68,7 +77,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; case FlowControllerSchedulerPolicy::ROUND_ROBIN: flow_controllers_.insert(decltype(flow_controllers_)::value_type( @@ -76,7 +85,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; case FlowControllerSchedulerPolicy::HIGH_PRIORITY: flow_controllers_.insert(decltype(flow_controllers_)::value_type( @@ -84,7 +93,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; case FlowControllerSchedulerPolicy::PRIORITY_WITH_RESERVATION: flow_controllers_.insert(decltype(flow_controllers_)::value_type( @@ -92,7 +101,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; default: assert(false); @@ -108,7 +117,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; case FlowControllerSchedulerPolicy::ROUND_ROBIN: flow_controllers_.insert(decltype(flow_controllers_)::value_type( @@ -116,7 +125,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; case FlowControllerSchedulerPolicy::HIGH_PRIORITY: flow_controllers_.insert(decltype(flow_controllers_)::value_type( @@ -124,7 +133,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; case FlowControllerSchedulerPolicy::PRIORITY_WITH_RESERVATION: flow_controllers_.insert(decltype(flow_controllers_)::value_type( @@ -132,7 +141,7 @@ void FlowControllerFactory::register_flow_controller ( std::unique_ptr( new FlowControllerImpl(participant_, - &flow_controller_descr, async_controller_index_++)))); + &flow_controller_descr, async_controller_index_++, sender_thread_settings)))); break; default: assert(false); diff --git a/src/cpp/rtps/flowcontrol/FlowControllerImpl.hpp b/src/cpp/rtps/flowcontrol/FlowControllerImpl.hpp index 62515ed1ce7..0ae267ff6d3 100644 --- a/src/cpp/rtps/flowcontrol/FlowControllerImpl.hpp +++ b/src/cpp/rtps/flowcontrol/FlowControllerImpl.hpp @@ -9,6 +9,7 @@ #include #include "FlowController.hpp" +#include #include #include #include @@ -930,12 +931,13 @@ class FlowControllerImpl : public FlowController FlowControllerImpl( fastrtps::rtps::RTPSParticipantImpl* participant, const FlowControllerDescriptor* descriptor, - uint32_t async_index - ) + uint32_t async_index, + ThreadSettings thread_settings) : participant_(participant) , async_mode(participant, descriptor) , participant_id_(0) , async_index_(async_index) + , thread_settings_(thread_settings) { if (nullptr != participant) { @@ -1486,6 +1488,9 @@ class FlowControllerImpl : public FlowController uint32_t participant_id_ = 0; uint32_t async_index_ = 0; + + //! Thread settings for the sender thread + ThreadSettings thread_settings_; }; } // namespace rtps diff --git a/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp b/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp new file mode 100644 index 00000000000..d57ba8d30dd --- /dev/null +++ b/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp @@ -0,0 +1,84 @@ +// 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. + +#include + +#include + +using namespace eprosima::fastdds::rtps; + +namespace eprosima { +namespace fastdds { +namespace rtps { + +PortBasedTransportDescriptor::PortBasedTransportDescriptor( + uint32_t maximumMessageSize, + uint32_t maximumInitialPeersRange) + : TransportDescriptorInterface(maximumMessageSize, maximumInitialPeersRange) +{ +} + +bool PortBasedTransportDescriptor::operator ==( + const PortBasedTransportDescriptor& t) const +{ + return (TransportDescriptorInterface::operator ==(t) && + this->default_reception_threads_ == t.default_reception_threads() && + this->reception_threads_ == t.reception_threads()); +} + +const ThreadSettings& PortBasedTransportDescriptor::get_thread_config_for_port( + uint32_t port) +{ + auto search = reception_threads_.find(port); + if (search != reception_threads_.end()) + { + return search->second; + } + return default_reception_threads_; +} + +bool PortBasedTransportDescriptor::set_thread_config_for_port( + const uint32_t& port, + const ThreadSettings& thread_settings) +{ + reception_threads_[port] = thread_settings; + return true; +} + +const ThreadSettings& PortBasedTransportDescriptor::default_reception_threads() const +{ + return default_reception_threads_; +} + +void PortBasedTransportDescriptor::default_reception_threads( + const ThreadSettings& default_reception_threads) +{ + default_reception_threads_ = default_reception_threads; +} + +const PortBasedTransportDescriptor::ReceptionThreadsConfigMap& PortBasedTransportDescriptor::reception_threads() const +{ + return reception_threads_; +} + +bool PortBasedTransportDescriptor::reception_threads( + const ReceptionThreadsConfigMap& reception_threads) +{ + reception_threads_ = reception_threads; + return true; +} + +} // namespace rtps +} // namespace fastdds +} // namespace eprosima diff --git a/src/cpp/rtps/transport/TCPTransportInterface.cpp b/src/cpp/rtps/transport/TCPTransportInterface.cpp index 2df9d257208..7b4f3ba528f 100644 --- a/src/cpp/rtps/transport/TCPTransportInterface.cpp +++ b/src/cpp/rtps/transport/TCPTransportInterface.cpp @@ -12,30 +12,60 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include "TCPTransportInterface.h" -#include -#include #include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#if TLS_FOUND +#include +#endif // if TLS_FOUND + #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#if TLS_FOUND -#include -#include -#endif // if TLS_FOUND + #include #include #include +#include "tcp/RTCPHeader.h" +#include "tcp/RTCPMessageManager.h" +#include "TCPAcceptorBasic.h" +#include "TCPChannelResourceBasic.h" +#include "TCPSenderResource.hpp" +#if TLS_FOUND +#include "TCPAcceptorSecure.h" +#include "TCPChannelResourceSecure.h" +#endif // if TLS_FOUND + using namespace std; using namespace asio; @@ -92,6 +122,8 @@ TCPTransportDescriptor::TCPTransportDescriptor( , check_crc(t.check_crc) , apply_security(t.apply_security) , tls_config(t.tls_config) + , keep_alive_thread(t.keep_alive_thread) + , accept_thread(t.accept_thread) { } @@ -117,6 +149,8 @@ TCPTransportDescriptor& TCPTransportDescriptor::operator =( check_crc = t.check_crc; apply_security = t.apply_security; tls_config = t.tls_config; + keep_alive_thread = t.keep_alive_thread; + accept_thread = t.accept_thread; return *this; } @@ -136,6 +170,8 @@ bool TCPTransportDescriptor::operator ==( this->check_crc == t.check_crc && this->apply_security == t.apply_security && this->tls_config == t.tls_config && + this->keep_alive_thread == t.keep_alive_thread && + this->accept_thread == t.accept_thread && SocketTransportDescriptor::operator ==(t)); } diff --git a/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp b/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp index ba51f754711..7b477ff0b06 100644 --- a/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp +++ b/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp @@ -12,9 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include + #include +#include +#include + using namespace eprosima::fastdds::rtps; namespace eprosima { @@ -33,7 +37,7 @@ static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000; // SharedMemTransportDescriptor //********************************************************* SharedMemTransportDescriptor::SharedMemTransportDescriptor() - : TransportDescriptorInterface(shm_default_segment_size, s_maximumInitialPeersRange) + : PortBasedTransportDescriptor(shm_default_segment_size, s_maximumInitialPeersRange) , segment_size_(shm_default_segment_size) , port_queue_capacity_(shm_default_port_queue_capacity) , healthy_check_timeout_ms_(shm_default_healthy_check_timeout_ms) @@ -49,7 +53,8 @@ bool SharedMemTransportDescriptor::operator ==( this->port_queue_capacity_ == t.port_queue_capacity() && this->healthy_check_timeout_ms_ == t.healthy_check_timeout_ms() && this->rtps_dump_file_ == t.rtps_dump_file() && - TransportDescriptorInterface::operator ==(t)); + this->dump_thread_ == t.dump_thread() && + PortBasedTransportDescriptor::operator ==(t)); } #ifdef FASTDDS_SHM_TRANSPORT_DISABLED diff --git a/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h b/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h index e5e2e283648..1f0a7312c9f 100644 --- a/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h +++ b/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h @@ -15,7 +15,7 @@ #ifndef _FASTDDS_SHAREDMEM_TRANSPORT_DESCRIPTOR_ #define _FASTDDS_SHAREDMEM_TRANSPORT_DESCRIPTOR_ -#include "fastdds/rtps/transport/TransportDescriptorInterface.h" +#include namespace eprosima { namespace fastdds { @@ -28,7 +28,7 @@ class TransportInterface; * * @ingroup TRANSPORT_MODULE */ -typedef struct SharedMemTransportDescriptor : public TransportDescriptorInterface +typedef struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor { virtual ~SharedMemTransportDescriptor() { @@ -36,7 +36,7 @@ typedef struct SharedMemTransportDescriptor : public TransportDescriptorInterfac } RTPS_DllAPI SharedMemTransportDescriptor() - : TransportDescriptorInterface(0, 0) + : PortBasedTransportDescriptor(0, 0) { } diff --git a/test/unittest/CMakeLists.txt b/test/unittest/CMakeLists.txt index d16837b321d..2eca626d922 100644 --- a/test/unittest/CMakeLists.txt +++ b/test/unittest/CMakeLists.txt @@ -14,6 +14,7 @@ add_compile_definitions(FASTRTPS_NO_LIB) +add_subdirectory(rtps/attributes) add_subdirectory(rtps/common) add_subdirectory(rtps/DataSharing) add_subdirectory(rtps/builtin) diff --git a/test/unittest/dds/participant/ParticipantTests.cpp b/test/unittest/dds/participant/ParticipantTests.cpp index a97aa46c298..84af1c34e77 100644 --- a/test/unittest/dds/participant/ParticipantTests.cpp +++ b/test/unittest/dds/participant/ParticipantTests.cpp @@ -2979,12 +2979,11 @@ TEST(ParticipantTests, SetDomainParticipantQos) } /* - * This test checks that the PropertyPolicyQos and TransportConfigQos are immutable policy qos, i.e. these can not be + * This test checks that the inmutable policy qos can not be * changed in an enabled participant */ TEST(ParticipantTests, UpdatableDomainParticipantQos) { - DomainParticipant* participant = DomainParticipantFactory::get_instance()->create_participant( (uint32_t)GET_PID() % 230, PARTICIPANT_QOS_DEFAULT); @@ -3001,7 +3000,30 @@ TEST(ParticipantTests, UpdatableDomainParticipantQos) pqos.transport().listen_socket_buffer_size = 262144; ASSERT_EQ(participant->set_qos(pqos), ReturnCode_t::RETCODE_IMMUTABLE_POLICY); + // Check that the builtin_controllers_sender_thread can not be changed in an enabled participant + participant->get_qos(pqos); + pqos.builtin_controllers_sender_thread().cpu_mask = 1; + ASSERT_EQ(participant->set_qos(pqos), ReturnCode_t::RETCODE_IMMUTABLE_POLICY); + + // Check that the timed_events_thread can not be changed in an enabled participant + participant->get_qos(pqos); + pqos.timed_events_thread().cpu_mask = 1; + ASSERT_EQ(participant->set_qos(pqos), ReturnCode_t::RETCODE_IMMUTABLE_POLICY); + + // Check that the discovery_server_thread can not be changed in an enabled participant + participant->get_qos(pqos); + pqos.discovery_server_thread().cpu_mask = 1; + ASSERT_EQ(participant->set_qos(pqos), ReturnCode_t::RETCODE_IMMUTABLE_POLICY); + +#if HAVE_SECURITY + // Check that the security_log_thread can not be changed in an enabled participant + participant->get_qos(pqos); + pqos.security_log_thread().cpu_mask = 1; + ASSERT_EQ(participant->set_qos(pqos), ReturnCode_t::RETCODE_IMMUTABLE_POLICY); + ASSERT_EQ(DomainParticipantFactory::get_instance()->delete_participant(participant), ReturnCode_t::RETCODE_OK); +#endif // if HAVE_SECURITY + } /* diff --git a/test/unittest/dds/publisher/CMakeLists.txt b/test/unittest/dds/publisher/CMakeLists.txt index 7cceabdc612..a8b9d4152f7 100644 --- a/test/unittest/dds/publisher/CMakeLists.txt +++ b/test/unittest/dds/publisher/CMakeLists.txt @@ -32,7 +32,6 @@ set(sqlite3_source_files set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${DDSSQLFILTER_SOURCES} - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp @@ -55,16 +54,16 @@ set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectHashId.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypesBase.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/common/RPCHeadersImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/common/TypeLookupTypes.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/TypeLookupManager.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/TypeLookupReplyListener.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/TypeLookupRequestListener.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/common/TypeLookupTypes.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/Entity.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/Condition.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/ConditionNotifier.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/StatusCondition.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/StatusConditionImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/WaitSetImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/Entity.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/QosPolicyUtils.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/domain/DomainParticipant.cpp @@ -85,36 +84,32 @@ set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/DataReader.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/DataReaderImpl.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/ReadCondition.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/Subscriber.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/SubscriberImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/history/DataReaderHistory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/DataReaderQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/SubscriberQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/ReadCondition.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/Subscriber.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/SubscriberImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/ContentFilteredTopic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/ContentFilteredTopicImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/qos/TopicQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/Topic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TopicImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TopicProxyFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TypeSupport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/qos/TopicQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/utils/QosConverters.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastrtps_deprecated/subscriber/SubscriberHistory.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingListener.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingNotification.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingPayloadPool.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/RTPSDomain.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/BuiltinProtocols.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/data/ParticipantProxyData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/data/ReaderProxyData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/data/WriterProxyData.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/backup/SharedBackupFunctions.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoveryDataBase.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoveryParticipantInfo.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoveryParticipantsAckStatus.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoverySharedInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/backup/SharedBackupFunctions.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/endpoint/EDP.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/endpoint/EDPClient.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/endpoint/EDPServer.cpp @@ -135,6 +130,9 @@ set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/liveliness/WLP.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/liveliness/WLPListener.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingListener.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingNotification.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingPayloadPool.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp @@ -164,7 +162,12 @@ set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/ResourceEvent.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEvent.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEventImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/RTPSDomain.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptorBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResource.cpp @@ -176,15 +179,12 @@ set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv6Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/LivelinessManager.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/LocatorSelectorSender.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/PersistentWriter.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/RTPSWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/ReaderLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/ReaderProxy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/RTPSWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/StatefulPersistentWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/StatefulWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/StatelessPersistentWriter.cpp @@ -197,11 +197,11 @@ set(DATAWRITERTESTS_SOURCE DataWriterTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/StringMatching.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ) if(SQLITE3_SUPPORT) diff --git a/test/unittest/dds/status/CMakeLists.txt b/test/unittest/dds/status/CMakeLists.txt index 4b03f13a0ef..c41b0095dd2 100644 --- a/test/unittest/dds/status/CMakeLists.txt +++ b/test/unittest/dds/status/CMakeLists.txt @@ -16,7 +16,6 @@ file(GLOB DDSSQLFILTER_SOURCES ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/DDSSQ set(LISTENERTESTS_SOURCE ListenerTests.cpp ${DDSSQLFILTER_SOURCES} - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp @@ -39,12 +38,12 @@ set(LISTENERTESTS_SOURCE ListenerTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectHashId.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypesBase.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/Entity.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/Condition.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/ConditionNotifier.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/StatusCondition.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/StatusConditionImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/WaitSetImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/Entity.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/QosPolicyUtils.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/domain/DomainParticipant.cpp @@ -67,28 +66,31 @@ set(LISTENERTESTS_SOURCE ListenerTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/DataReader.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/DataReaderImpl.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/ReadCondition.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/Subscriber.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/SubscriberImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/history/DataReaderHistory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/DataReaderQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/SubscriberQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/ReadCondition.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/Subscriber.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/SubscriberImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/ContentFilteredTopic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/ContentFilteredTopicImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/qos/TopicQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/Topic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TopicImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TopicProxyFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TypeSupport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/qos/TopicQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/utils/QosConverters.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/utils/QosConverters.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/history/CacheChangePool.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/history/TopicPayloadPool.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/history/TopicPayloadPoolRegistry.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/LocatorSelectorSender.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp @@ -99,10 +101,10 @@ set(LISTENERTESTS_SOURCE ListenerTests.cpp ${PROJECT_SOURCE_DIR}/src/cpp/statistics/fastdds/publisher/qos/DataWriterQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ) if (FASTDDS_STATISTICS) diff --git a/test/unittest/dds/subscriber/DataReaderTests.cpp b/test/unittest/dds/subscriber/DataReaderTests.cpp index 4ab05b7c493..0cf8b1a1273 100644 --- a/test/unittest/dds/subscriber/DataReaderTests.cpp +++ b/test/unittest/dds/subscriber/DataReaderTests.cpp @@ -3545,6 +3545,108 @@ TEST_F(DataReaderTests, CustomPoolCreation) DomainParticipantFactory::get_instance()->delete_participant(participant); } +// Check DataReaderQos inmutabilities +TEST_F(DataReaderTests, UpdateInmutableQos) +{ + /* Test setup */ + DomainParticipant* participant = + DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT); + ASSERT_NE(participant, nullptr); + + Subscriber* subscriber = participant->create_subscriber(SUBSCRIBER_QOS_DEFAULT); + ASSERT_NE(subscriber, nullptr); + + TypeSupport type(new FooTypeSupport()); + type.register_type(participant); + + Topic* topic = participant->create_topic("footopic", type.get_type_name(), TOPIC_QOS_DEFAULT); + ASSERT_NE(topic, nullptr); + + DataReader* data_reader = subscriber->create_datareader(topic, DATAREADER_QOS_DEFAULT); + ASSERT_NE(data_reader, nullptr); + + /* Test actions */ + // Resource limits + DataReaderQos reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.resource_limits().max_samples = reader_qos.resource_limits().max_samples - 1; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // History + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.history().kind = KEEP_ALL_HISTORY_QOS; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.history().depth = reader_qos.history().depth + 1; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Durability + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Liveliness + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.liveliness().kind = MANUAL_BY_TOPIC_LIVELINESS_QOS; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.liveliness().lease_duration = Duration_t{123, 123}; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.liveliness().announcement_period = Duration_t{123, 123}; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Relibility + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.reliability().kind = RELIABLE_RELIABILITY_QOS; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Ownsership + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.ownership().kind = EXCLUSIVE_OWNERSHIP_QOS; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Destination order (currently reports unsupported) + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.destination_order().kind = BY_SOURCE_TIMESTAMP_DESTINATIONORDER_QOS; + ASSERT_EQ(ReturnCode_t::RETCODE_UNSUPPORTED, data_reader->set_qos(reader_qos)); + + // Reader resource limits + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.reader_resource_limits().matched_publisher_allocation.maximum = + reader_qos.reader_resource_limits().matched_publisher_allocation.maximum - 1; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Datasharing + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.data_sharing().off(); + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.data_sharing().automatic("."); + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.data_sharing().add_domain_id(static_cast(12)); + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Unique network flows + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.properties().properties().push_back({"fastdds.unique_network_flows", "true"}); + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + // Datasharing listener thread + reader_qos = DATAREADER_QOS_DEFAULT; + reader_qos.data_sharing_listener_thread().priority = reader_qos.data_sharing_listener_thread().priority + 1; + ASSERT_EQ(ReturnCode_t::RETCODE_IMMUTABLE_POLICY, data_reader->set_qos(reader_qos)); + + /* Cleanup */ + participant->delete_contained_entities(); + DomainParticipantFactory::get_instance()->delete_participant(participant); +} + int main( int argc, char** argv) diff --git a/test/unittest/dynamic_types/CMakeLists.txt b/test/unittest/dynamic_types/CMakeLists.txt index 4bcb40fd526..08e5539a326 100644 --- a/test/unittest/dynamic_types/CMakeLists.txt +++ b/test/unittest/dynamic_types/CMakeLists.txt @@ -77,16 +77,17 @@ set(DYNAMIC_TYPES_TEST_SOURCE idl/BasicPubSubTypes.cxx idl/BasicTypeObject.cxx ${DYNAMIC_TYPES_SOURCE} - - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp ) set(DYNAMIC_COMPLEX_TYPES_TEST_SOURCE @@ -118,13 +119,13 @@ target_compile_definitions(DynamicTypesTests PRIVATE ) target_include_directories(DynamicTypesTests PRIVATE ${Asio_INCLUDE_DIR} + ${PROJECT_SOURCE_DIR}/test/mock/rtps/SharedMemTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/TCPTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/TCPv4TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/TCPv6TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPv4TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPv6TransportDescriptor - ${PROJECT_SOURCE_DIR}/test/mock/rtps/SharedMemTransportDescriptor $<$:${TINYXML2_INCLUDE_DIR}> ${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include ${PROJECT_SOURCE_DIR}/src/cpp diff --git a/test/unittest/rtps/attributes/CMakeLists.txt b/test/unittest/rtps/attributes/CMakeLists.txt new file mode 100644 index 00000000000..e4b28b53c24 --- /dev/null +++ b/test/unittest/rtps/attributes/CMakeLists.txt @@ -0,0 +1,47 @@ +# Copyright 2020 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. + +set(THREAD_SETTINGS_TESTS_EXEC ThreadSettingsTests) + +set(THREAD_SETTINGS_TESTS_SOURCE + ThreadSettingsTests.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp) + +if(WIN32) + add_definitions(-D_WIN32_WINNT=0x0601) +endif() + +add_executable(${THREAD_SETTINGS_TESTS_EXEC} ${THREAD_SETTINGS_TESTS_SOURCE}) + +target_include_directories( + ${THREAD_SETTINGS_TESTS_EXEC} + PRIVATE + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_BINARY_DIR}/include) + +target_link_libraries( + ${THREAD_SETTINGS_TESTS_EXEC} + GTest::gtest + ${CMAKE_DL_LIBS}) + +add_gtest( + ${THREAD_SETTINGS_TESTS_EXEC} + SOURCES + ${THREAD_SETTINGS_TESTS_SOURCE}) + +if(ANDROID) + set_property( + TARGET ${THREAD_SETTINGS_TESTS_EXEC} + PROPERTY CROSSCOMPILING_EMULATOR "adb;shell;cd;${CMAKE_CURRENT_BINARY_DIR};&&") +endif() diff --git a/test/unittest/rtps/attributes/ThreadSettingsTests.cpp b/test/unittest/rtps/attributes/ThreadSettingsTests.cpp new file mode 100644 index 00000000000..25a540a2b40 --- /dev/null +++ b/test/unittest/rtps/attributes/ThreadSettingsTests.cpp @@ -0,0 +1,149 @@ +// 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. + +#include + +#include + +TEST(ThreadSettingsTests, EqualOperators) +{ + eprosima::fastdds::rtps::ThreadSettings settings_1; + eprosima::fastdds::rtps::ThreadSettings settings_2; + + ASSERT_TRUE(settings_1 == settings_2); + ASSERT_FALSE(settings_1 != settings_2); + + // Fixed scheduling_policy cases + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + // Fixed priority cases (not already covered) + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + // Fixed cpu_mask cases (not already covered) + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + // Fixed stack_size cases (not already covered) + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); + + // All different + settings_2.scheduling_policy = settings_1.scheduling_policy + 1; + settings_2.priority = settings_1.priority + 1; + settings_2.cpu_mask = settings_1.cpu_mask + 1; + settings_2.stack_size = settings_1.stack_size + 1; + ASSERT_FALSE(settings_1 == settings_2); + ASSERT_TRUE(settings_1 != settings_2); +} + +int main() +{ + testing::InitGoogleTest(); + return RUN_ALL_TESTS(); +} diff --git a/test/unittest/rtps/flowcontrol/FlowControllerFactoryTests.cpp b/test/unittest/rtps/flowcontrol/FlowControllerFactoryTests.cpp index d6d142ec157..ba30728fbb0 100644 --- a/test/unittest/rtps/flowcontrol/FlowControllerFactoryTests.cpp +++ b/test/unittest/rtps/flowcontrol/FlowControllerFactoryTests.cpp @@ -1,5 +1,19 @@ +// 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. + #include -#include +#include #include diff --git a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnAsyncTests.cpp b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnAsyncTests.cpp index 801d753830f..e7ae98b337c 100644 --- a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnAsyncTests.cpp +++ b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnAsyncTests.cpp @@ -1,3 +1,19 @@ +// 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. + +#include + #include "FlowControllerPublishModesTests.hpp" using namespace eprosima::fastdds::rtps; @@ -7,7 +23,7 @@ TYPED_TEST(FlowControllerPublishModes, async_publish_mode) { FlowControllerDescriptor flow_controller_descr; FlowControllerImpl async(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); async.init(); // Instantiate writers. diff --git a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnLimitedAsyncTests.cpp b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnLimitedAsyncTests.cpp index a95e6144ec6..71781c1748c 100644 --- a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnLimitedAsyncTests.cpp +++ b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnLimitedAsyncTests.cpp @@ -1,3 +1,19 @@ +// 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. + +#include + #include "FlowControllerPublishModesTests.hpp" using namespace eprosima::fastdds::rtps; @@ -28,7 +44,7 @@ TYPED_TEST(FlowControllerPublishModes, limited_async_publish_mode) flow_controller_descr.max_bytes_per_period = 10200; flow_controller_descr.period_ms = 10; FlowControllerImpl async(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); async.init(); // Instantiate writers. diff --git a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnPureSyncTests.cpp b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnPureSyncTests.cpp index b06ff64d6a1..b31c5baea09 100644 --- a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnPureSyncTests.cpp +++ b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnPureSyncTests.cpp @@ -1,3 +1,19 @@ +// 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. + +#include + #include "FlowControllerPublishModesTests.hpp" using namespace eprosima::fastdds::rtps; @@ -7,7 +23,7 @@ TYPED_TEST(FlowControllerPublishModes, pure_sync_publish_mode) { FlowControllerDescriptor flow_controller_descr; FlowControllerImpl pure_sync(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); pure_sync.init(); // Initialize callback to get info. diff --git a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnSyncTests.cpp b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnSyncTests.cpp index 8c64e3940c7..63ad9fbdd8f 100644 --- a/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnSyncTests.cpp +++ b/test/unittest/rtps/flowcontrol/FlowControllerPublishModesOnSyncTests.cpp @@ -1,3 +1,19 @@ +// 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. + +#include + #include "FlowControllerPublishModesTests.hpp" using namespace eprosima::fastdds::rtps; @@ -7,7 +23,7 @@ TYPED_TEST(FlowControllerPublishModes, sync_publish_mode) { FlowControllerDescriptor flow_controller_descr; FlowControllerImpl sync(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); sync.init(); // Instantiate writers. diff --git a/test/unittest/rtps/flowcontrol/FlowControllerSchedulersTests.cpp b/test/unittest/rtps/flowcontrol/FlowControllerSchedulersTests.cpp index 2b83a4cd886..f827492eb05 100644 --- a/test/unittest/rtps/flowcontrol/FlowControllerSchedulersTests.cpp +++ b/test/unittest/rtps/flowcontrol/FlowControllerSchedulersTests.cpp @@ -1,8 +1,24 @@ -#include -#include +// 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. #include +#include +#include + +#include + namespace eprosima { namespace fastrtps { namespace rtps { @@ -90,7 +106,7 @@ TEST_F(FlowControllerSchedulers, Fifo) flow_controller_descr.max_bytes_per_period = 10200; flow_controller_descr.period_ms = 10; FlowControllerImpl async(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); async.init(); // Instantiate writers. @@ -691,7 +707,7 @@ TEST_F(FlowControllerSchedulers, RoundRobin) flow_controller_descr.max_bytes_per_period = 10200; flow_controller_descr.period_ms = 10; FlowControllerImpl async(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); async.init(); // Instantiate writers. @@ -1292,7 +1308,7 @@ TEST_F(FlowControllerSchedulers, HighPriority) flow_controller_descr.max_bytes_per_period = 10200; flow_controller_descr.period_ms = 10; FlowControllerImpl async(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); async.init(); // Instantiate writers. @@ -1916,7 +1932,7 @@ TEST_F(FlowControllerSchedulers, PriorityWithReservation) flow_controller_descr.period_ms = 10; FlowControllerImpl async(nullptr, - &flow_controller_descr, 0); + &flow_controller_descr, 0, ThreadSettings{}); async.init(); // Instantiate writers. diff --git a/test/unittest/rtps/network/CMakeLists.txt b/test/unittest/rtps/network/CMakeLists.txt index 6ab726d6425..baaac1b52a9 100644 --- a/test/unittest/rtps/network/CMakeLists.txt +++ b/test/unittest/rtps/network/CMakeLists.txt @@ -15,49 +15,41 @@ set(NETWORKFACTORYTESTS_SOURCE NetworkFactoryTests.cpp mock/MockTransport.cpp - + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp - + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp - + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/messages/RTPSMessageCreator.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/ResourceEvent.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEvent.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEventImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv6Transport.cpp - + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResourceBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptorBasic.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResourceBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPv4Transport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPv6Transport.cpp - - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/messages/RTPSMessageCreator.cpp - - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp - - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/ResourceEvent.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEvent.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEventImpl.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp - - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp - + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv6Transport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/System.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ) if(TLS_FOUND) diff --git a/test/unittest/statistics/dds/CMakeLists.txt b/test/unittest/statistics/dds/CMakeLists.txt index cf6cdc34777..b7286598000 100644 --- a/test/unittest/statistics/dds/CMakeLists.txt +++ b/test/unittest/statistics/dds/CMakeLists.txt @@ -122,16 +122,16 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectHashId.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypesBase.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/common/RPCHeadersImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/common/TypeLookupTypes.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/TypeLookupManager.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/TypeLookupReplyListener.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/TypeLookupRequestListener.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/builtin/typelookup/common/TypeLookupTypes.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/Entity.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/Condition.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/ConditionNotifier.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/StatusCondition.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/StatusConditionImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/condition/WaitSetImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/Entity.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/QosPolicyUtils.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/QosPolicyUtils.cpp @@ -152,35 +152,32 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/DataReader.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/DataReaderImpl.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/ReadCondition.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/Subscriber.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/SubscriberImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/history/DataReaderHistory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/DataReaderQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/SubscriberQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/ReadCondition.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/Subscriber.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/SubscriberImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/ContentFilteredTopic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/ContentFilteredTopicImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/qos/TopicQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/Topic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TopicImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TopicProxyFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/TypeSupport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/topic/qos/TopicQos.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/utils/QosConverters.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingListener.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingNotification.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingPayloadPool.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/RTPSDomain.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/BuiltinProtocols.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/data/ParticipantProxyData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/data/ReaderProxyData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/data/WriterProxyData.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/backup/SharedBackupFunctions.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoveryDataBase.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoveryParticipantInfo.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoveryParticipantsAckStatus.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/DiscoverySharedInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/database/backup/SharedBackupFunctions.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/endpoint/EDP.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/endpoint/EDPClient.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/discovery/endpoint/EDPServer.cpp @@ -201,6 +198,9 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/liveliness/WLP.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/builtin/liveliness/WLPListener.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingListener.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingNotification.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/DataSharing/DataSharingPayloadPool.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp @@ -221,8 +221,8 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/rtps/participant/RTPSParticipant.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/participant/RTPSParticipantImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/persistence/PersistenceFactory.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/persistence/SQLite3PersistenceService.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/persistence/sqlite3.c + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/persistence/SQLite3PersistenceService.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/reader/RTPSReader.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/reader/StatefulPersistentReader.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/reader/StatefulReader.cpp @@ -232,7 +232,12 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/ResourceEvent.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEvent.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEventImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/RTPSDomain.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptorBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResource.cpp @@ -244,15 +249,12 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv6Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/LivelinessManager.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/LocatorSelectorSender.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/PersistentWriter.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/RTPSWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/ReaderLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/ReaderProxy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/RTPSWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/StatefulPersistentWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/StatefulWriter.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/writer/StatelessPersistentWriter.cpp @@ -267,19 +269,19 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) ${PROJECT_SOURCE_DIR}/src/cpp/statistics/fastdds/domain/DomainParticipantImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/statistics/fastdds/domain/DomainParticipantStatisticsListener.cpp ${PROJECT_SOURCE_DIR}/src/cpp/statistics/fastdds/publisher/qos/DataWriterQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/statistics/rtps/StatisticsBase.cpp ${PROJECT_SOURCE_DIR}/src/cpp/statistics/rtps/reader/StatisticsReaderImpl.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/statistics/rtps/StatisticsBase.cpp ${PROJECT_SOURCE_DIR}/src/cpp/statistics/rtps/writer/StatisticsWriterImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/statistics/types/types.cxx ${PROJECT_SOURCE_DIR}/src/cpp/statistics/types/typesv1.cxx ${PROJECT_SOURCE_DIR}/src/cpp/statistics/types/typesPubSubTypes.cxx ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/StringMatching.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ) # SHM Transport @@ -301,6 +303,7 @@ if (SQLITE3_SUPPORT AND FASTDDS_STATISTICS AND NOT QNX) # Security Support if(SECURITY) list(APPEND STATISTICS_DOMAINPARTICIPANT_MOCK_TESTS_SOURCE + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/exceptions/Exception.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Token.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/security/exceptions/SecurityException.cpp diff --git a/test/unittest/transport/CMakeLists.txt b/test/unittest/transport/CMakeLists.txt index f73dfe82909..0650089a9dc 100644 --- a/test/unittest/transport/CMakeLists.txt +++ b/test/unittest/transport/CMakeLists.txt @@ -49,21 +49,23 @@ endif() set(UDPV4TESTS_SOURCE UDPv4Tests.cpp mock/MockReceiverResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ) set(UDPV6TESTS_SOURCE @@ -74,10 +76,12 @@ set(UDPV6TESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp @@ -97,6 +101,7 @@ set(TCPV4TESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/messages/RTPSMessageCreator.cpp @@ -105,23 +110,24 @@ set(TCPV4TESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEvent.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEventImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptorBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResourceBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPv4Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/System.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ) if(TLS_FOUND) @@ -141,6 +147,7 @@ set(TCPV6TESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/messages/RTPSMessageCreator.cpp @@ -149,14 +156,15 @@ set(TCPV6TESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEvent.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/resources/TimedEventImpl.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPAcceptorBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPChannelResourceBasic.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/TCPv6Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/RTCPMessageManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/tcp/TCPControlMessage.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp @@ -164,8 +172,8 @@ set(TCPV6TESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/System.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/TimedConditionVariable.cpp ) if(TLS_FOUND) @@ -178,26 +186,28 @@ endif() set(TEST_UDPV4TESTS_SOURCE test_UDPv4Tests.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/messages/RTPSMessageCreator.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/core/policy/ParameterList.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/messages/RTPSMessageCreator.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/test_UDPv4Transport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ) set(SHAREDMEMTESTS_SOURCE @@ -208,15 +218,17 @@ set(SHAREDMEMTESTS_SOURCE ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/PropertyPolicy.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/network/NetworkFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPTransportInterface.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/UDPv4Transport.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/ChannelResource.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp @@ -245,6 +257,9 @@ endif() include_directories(mock/) +########################## +# UDPv4 tests +########################## add_executable(UDPv4Tests ${UDPV4TESTS_SOURCE}) target_compile_definitions(UDPv4Tests PRIVATE BOOST_ASIO_STANDALONE @@ -273,9 +288,45 @@ endif() add_gtest(UDPv4Tests SOURCES ${UDPV4TESTS_SOURCE}) set(TRANSPORT_XFAIL_LIST XFAIL_UDP4) +add_executable(test_UDPv4Tests ${TEST_UDPV4TESTS_SOURCE}) +target_compile_definitions(test_UDPv4Tests PRIVATE + BOOST_ASIO_STANDALONE + ASIO_STANDALONE + $<$>,$>:__DEBUG> + $<$:__INTERNALDEBUG> # Internal debug activated. + ) +target_include_directories(test_UDPv4Tests PRIVATE + ${Asio_INCLUDE_DIR} + ${PROJECT_SOURCE_DIR}/test/mock/rtps/ParticipantProxyData + ${PROJECT_SOURCE_DIR}/test/mock/dds/QosPolicies + ${PROJECT_SOURCE_DIR}/test/mock/rtps/MessageReceiver + ${PROJECT_SOURCE_DIR}/test/mock/rtps/ReceiverResource + ${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include + ${PROJECT_SOURCE_DIR}/src/cpp + $<$:${ANDROID_IFADDRS_INCLUDE_DIR}> + ) +target_link_libraries(test_UDPv4Tests + fastcdr + GTest::gtest + ${MOCKS}) +if(QNX) + target_link_libraries(test_UDPv4Tests socket) +endif() +if(MSVC OR MSVC_IDE) + target_link_libraries(test_UDPv4Tests ${PRIVACY} iphlpapi Shlwapi) +endif() +add_gtest(test_UDPv4Tests SOURCES ${TEST_UDPV4TESTS_SOURCE}) +set(TRANSPORT_XFAIL_LIST ${TRANSPORT_XFAIL_LIST} XFAIL_TEST_UDP4) + +########################## +# IPv6 tests +########################## option(DISABLE_UDPV6_TESTS "Disable UDPv6 tests because fails in some systems" OFF) if(NOT DISABLE_UDPV6_TESTS) + ########################## + # UDPv6 tests + ########################## add_executable(UDPv6Tests ${UDPV6TESTS_SOURCE}) target_compile_definitions(UDPv6Tests PRIVATE BOOST_ASIO_STANDALONE @@ -303,6 +354,9 @@ if(NOT DISABLE_UDPV6_TESTS) add_gtest(UDPv6Tests SOURCES ${UDPV6TESTS_SOURCE}) set(TRANSPORT_XFAIL_LIST ${TRANSPORT_XFAIL_LIST} XFAIL_UDP6) + ########################## + # TCPv6 tests + ########################## add_executable(TCPv6Tests ${TCPV6TESTS_SOURCE}) target_compile_definitions(TCPv6Tests PRIVATE BOOST_ASIO_STANDALONE @@ -337,38 +391,9 @@ if(NOT DISABLE_UDPV6_TESTS) set(TRANSPORT_XFAIL_LIST ${TRANSPORT_XFAIL_LIST} XFAIL_TCP6) endif() -add_executable(test_UDPv4Tests ${TEST_UDPV4TESTS_SOURCE}) -target_compile_definitions(test_UDPv4Tests PRIVATE - BOOST_ASIO_STANDALONE - ASIO_STANDALONE - $<$>,$>:__DEBUG> - $<$:__INTERNALDEBUG> # Internal debug activated. - ) -target_include_directories(test_UDPv4Tests PRIVATE - ${Asio_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR}/test/mock/rtps/ParticipantProxyData - ${PROJECT_SOURCE_DIR}/test/mock/dds/QosPolicies - ${PROJECT_SOURCE_DIR}/test/mock/rtps/MessageReceiver - ${PROJECT_SOURCE_DIR}/test/mock/rtps/ReceiverResource - ${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include - ${PROJECT_SOURCE_DIR}/src/cpp - $<$:${ANDROID_IFADDRS_INCLUDE_DIR}> - ) -target_link_libraries(test_UDPv4Tests - fastcdr - GTest::gtest - ${MOCKS}) -if(QNX) - target_link_libraries(test_UDPv4Tests socket) -endif() -if(MSVC OR MSVC_IDE) - target_link_libraries(test_UDPv4Tests ${PRIVACY} iphlpapi Shlwapi) -else() - target_link_libraries(test_UDPv4Tests ${PRIVACY}) -endif() -add_gtest(test_UDPv4Tests SOURCES ${TEST_UDPV4TESTS_SOURCE}) -set(TRANSPORT_XFAIL_LIST ${TRANSPORT_XFAIL_LIST} XFAIL_TEST_UDP4) - +########################## +# TCPv4 tests +########################## add_executable(TCPv4Tests ${TCPV4TESTS_SOURCE}) target_compile_definitions(TCPv4Tests PRIVATE BOOST_ASIO_STANDALONE @@ -402,6 +427,9 @@ endif() add_gtest(TCPv4Tests SOURCES ${TCPV4TESTS_SOURCE}) set(TRANSPORT_XFAIL_LIST ${TRANSPORT_XFAIL_LIST} XFAIL_TCP4) +########################## +# SHM tests +########################## if(IS_THIRDPARTY_BOOST_OK) add_executable(SharedMemTests ${SHAREDMEMTESTS_SOURCE}) @@ -455,3 +483,34 @@ if(ANDROID) set_property(TARGET SharedMemTests PROPERTY CROSSCOMPILING_EMULATOR "adb;shell;cd;${CMAKE_CURRENT_BINARY_DIR};&&") set_property(TARGET test_UDPv4Tests PROPERTY CROSSCOMPILING_EMULATOR "adb;shell;cd;${CMAKE_CURRENT_BINARY_DIR};&&") endif() + +##################################### +# PortBasedTransportDescriptor tests +##################################### +set(PORTBASED_TRANSPORTDESCRIPTOR_TESTS_SOURCES + PortBasedTransportDescriptorTests.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp) + +set(PORTBASED_TRANSPORTDESCRIPTOR_TESTS_TARGET PortBasedTransportDescriptorTests) + +add_executable(${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_TARGET} + ${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_SOURCES}) + +target_compile_definitions(${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_TARGET} + PRIVATE + $<$>,$>:__DEBUG> + $<$:__INTERNALDEBUG>) + +target_include_directories(${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_TARGET} + PRIVATE + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_BINARY_DIR}/include) + +target_link_libraries(${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_TARGET} + GTest::gtest + ${MOCKS}) + +add_gtest(${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_TARGET} + SOURCES + ${PORTBASED_TRANSPORTDESCRIPTOR_TESTS_SOURCES}) diff --git a/test/unittest/transport/PortBasedTransportDescriptorTests.cpp b/test/unittest/transport/PortBasedTransportDescriptorTests.cpp new file mode 100644 index 00000000000..88c7b5e7021 --- /dev/null +++ b/test/unittest/transport/PortBasedTransportDescriptorTests.cpp @@ -0,0 +1,285 @@ +// 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. + +#include + +#include +#include +#include + +using namespace eprosima::fastdds::rtps; + +class CustomPortBasedTransportDescriptor : public PortBasedTransportDescriptor +{ +public: + + CustomPortBasedTransportDescriptor() + : PortBasedTransportDescriptor(0, 0) + { + } + + TransportInterface* create_transport() const override + { + return nullptr; + } + + //! Returns the minimum size required for a send operation. + uint32_t min_send_buffer_size() const override + { + return 0; + } + +}; + +class PortBasedTransportDescriptorTests : public CustomPortBasedTransportDescriptor, public testing::Test +{ +public: + + TransportInterface* create_transport() const override + { + return nullptr; + } + + //! Returns the minimum size required for a send operation. + uint32_t min_send_buffer_size() const override + { + return 0; + } + +}; + +TEST_F(PortBasedTransportDescriptorTests, get_thread_config_for_port) +{ + // Add an entry to the user-defined settings map + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings; + set_settings[1234].scheduling_policy = 33; + set_settings[1234].priority = 33; + set_settings[1234].cpu_mask = 33; + set_settings[1234].stack_size = 33; + + ASSERT_TRUE(reception_threads(set_settings)); + + // Check that the new entry can be retrieved + ASSERT_EQ(set_settings[1234], get_thread_config_for_port(1234)); + + // Check that the new entry is not the same as the default settings + ASSERT_NE(default_reception_threads(), get_thread_config_for_port(1234)); + + // Check that a non-existing entry is returns default settings + ASSERT_EQ(default_reception_threads(), get_thread_config_for_port(4321)); +} + +TEST_F(PortBasedTransportDescriptorTests, set_thread_config_for_port) +{ + // Set some initial config + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings; + set_settings[1234].scheduling_policy = 33; + set_settings[1234].priority = 33; + set_settings[1234].cpu_mask = 33; + set_settings[1234].stack_size = 33; + ASSERT_TRUE(reception_threads(set_settings)); + + // Check updating a config + ThreadSettings other_settings; + ASSERT_NE(set_settings[1234], other_settings); + ASSERT_TRUE(set_thread_config_for_port(1234, other_settings)); + ASSERT_EQ(other_settings, get_thread_config_for_port(1234)); + + // Setting a new config + other_settings.priority += 1; + ASSERT_NE(set_settings[4321], other_settings); + ASSERT_TRUE(set_thread_config_for_port(4321, other_settings)); + ASSERT_EQ(other_settings, get_thread_config_for_port(4321)); + ASSERT_NE(other_settings, get_thread_config_for_port(1234)); +} + +TEST_F(PortBasedTransportDescriptorTests, get_default_reception_threads) +{ + ASSERT_EQ(default_reception_threads_, default_reception_threads()); +} + +TEST_F(PortBasedTransportDescriptorTests, set_default_reception_threads) +{ + ThreadSettings& initial_settings = default_reception_threads_; + + ThreadSettings set_settings; + set_settings.scheduling_policy = 33; + set_settings.priority = 33; + set_settings.cpu_mask = 33; + set_settings.stack_size = 33; + + ASSERT_NE(initial_settings, set_settings); + + default_reception_threads(set_settings); + ASSERT_EQ(set_settings, default_reception_threads()); +} + +TEST_F(PortBasedTransportDescriptorTests, get_reception_threads) +{ + ASSERT_EQ(reception_threads_, reception_threads()); +} + +TEST_F(PortBasedTransportDescriptorTests, set_reception_threads) +{ + PortBasedTransportDescriptor::ReceptionThreadsConfigMap& initial_settings = reception_threads_; + + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings; + set_settings[1234].scheduling_policy = 33; + set_settings[1234].priority = 33; + set_settings[1234].cpu_mask = 33; + set_settings[1234].stack_size = 33; + + ASSERT_NE(initial_settings, set_settings); + + ASSERT_TRUE(reception_threads(set_settings)); + ASSERT_EQ(set_settings, reception_threads()); +} + +TEST_F(PortBasedTransportDescriptorTests, equal_operator) +{ + // Two new instances are equal + CustomPortBasedTransportDescriptor other; + auto original_max_message_size = other.maxMessageSize; + auto original_default_reception_thread_settings = other.default_reception_threads(); + auto original_thread_reception_settings = other.reception_threads(); + ASSERT_EQ(*this, other); + + { + // Parent is different + other.maxMessageSize += 1; + ASSERT_FALSE(*this == other); + } + { + // default_reception_threads is different + other.maxMessageSize = original_max_message_size; + other.default_reception_threads(original_default_reception_thread_settings); + ASSERT_TRUE(other.reception_threads(original_thread_reception_settings)); + ASSERT_EQ(*this, other); + + ThreadSettings set_settings; + set_settings.scheduling_policy = 33; + set_settings.priority = 33; + set_settings.cpu_mask = 33; + set_settings.stack_size = 33; + other.default_reception_threads(set_settings); + ASSERT_FALSE(*this == other); + } + { + // reception_threads is different + other.maxMessageSize = original_max_message_size; + other.default_reception_threads(original_default_reception_thread_settings); + ASSERT_TRUE(other.reception_threads(original_thread_reception_settings)); + ASSERT_EQ(*this, other); + + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings_map; + set_settings_map[1234].scheduling_policy = 33; + set_settings_map[1234].priority = 33; + set_settings_map[1234].cpu_mask = 33; + set_settings_map[1234].stack_size = 33; + ASSERT_TRUE(other.reception_threads(set_settings_map)); + ASSERT_FALSE(*this == other); + } + { + // Parent & default_reception_threads are different + other.maxMessageSize = original_max_message_size; + other.default_reception_threads(original_default_reception_thread_settings); + ASSERT_TRUE(other.reception_threads(original_thread_reception_settings)); + ASSERT_EQ(*this, other); + + other.maxMessageSize += 1; + + ThreadSettings set_settings; + set_settings.scheduling_policy = 33; + set_settings.priority = 33; + set_settings.cpu_mask = 33; + set_settings.stack_size = 33; + other.default_reception_threads(set_settings); + + ASSERT_FALSE(*this == other); + } + { + // Parent & reception_threads are different + other.maxMessageSize = original_max_message_size; + other.default_reception_threads(original_default_reception_thread_settings); + ASSERT_TRUE(other.reception_threads(original_thread_reception_settings)); + ASSERT_EQ(*this, other); + + other.maxMessageSize += 1; + + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings_map; + set_settings_map[1234].scheduling_policy = 33; + set_settings_map[1234].priority = 33; + set_settings_map[1234].cpu_mask = 33; + set_settings_map[1234].stack_size = 33; + ASSERT_TRUE(other.reception_threads(set_settings_map)); + + ASSERT_FALSE(*this == other); + } + { + // default_reception_threads & reception_threads are different + other.maxMessageSize = original_max_message_size; + other.default_reception_threads(original_default_reception_thread_settings); + ASSERT_TRUE(other.reception_threads(original_thread_reception_settings)); + ASSERT_EQ(*this, other); + + ThreadSettings set_settings; + set_settings.scheduling_policy = 33; + set_settings.priority = 33; + set_settings.cpu_mask = 33; + set_settings.stack_size = 33; + other.default_reception_threads(set_settings); + + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings_map; + set_settings_map[1234].scheduling_policy = 33; + set_settings_map[1234].priority = 33; + set_settings_map[1234].cpu_mask = 33; + set_settings_map[1234].stack_size = 33; + ASSERT_TRUE(other.reception_threads(set_settings_map)); + + ASSERT_FALSE(*this == other); + } + { + // Parent, default_reception_threads, & reception_threads are different + other.maxMessageSize = original_max_message_size; + other.default_reception_threads(original_default_reception_thread_settings); + ASSERT_TRUE(other.reception_threads(original_thread_reception_settings)); + ASSERT_EQ(*this, other); + + other.maxMessageSize += 1; + + ThreadSettings set_settings; + set_settings.scheduling_policy = 33; + set_settings.priority = 33; + set_settings.cpu_mask = 33; + set_settings.stack_size = 33; + other.default_reception_threads(set_settings); + + PortBasedTransportDescriptor::ReceptionThreadsConfigMap set_settings_map; + set_settings_map[1234].scheduling_policy = 33; + set_settings_map[1234].priority = 33; + set_settings_map[1234].cpu_mask = 33; + set_settings_map[1234].stack_size = 33; + ASSERT_TRUE(other.reception_threads(set_settings_map)); + + ASSERT_FALSE(*this == other); + } +} + +int main( + int argc, + char** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/test/unittest/xmlparser/CMakeLists.txt b/test/unittest/xmlparser/CMakeLists.txt index 1984ec75669..205c608ac9b 100644 --- a/test/unittest/xmlparser/CMakeLists.txt +++ b/test/unittest/xmlparser/CMakeLists.txt @@ -78,43 +78,45 @@ file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/regressions" DESTINATION "${CMAKE_CURRENT ################################### XMLProfileParserTests #################################################### set(XMLPROFILEPARSER_SOURCE XMLProfileParserTests.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicDataFactory.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicType.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicPubSubType.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypePtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicDataPtr.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicPubSubType.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicType.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilder.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderPtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderPtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeMember.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypePtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/MemberDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeIdentifier.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeIdentifierTypes.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeNamesGenerator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObject.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectHashId.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeNamesGenerator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypesBase.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ) # External sources @@ -177,49 +179,50 @@ add_gtest(XMLProfileParserTests SOURCES XMLProfileParserTests.cpp) set(XMLPARSER_SOURCE XMLParserTests.cpp XMLElementParserTests.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/FileConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicDataFactory.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicType.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicPubSubType.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypePtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicDataPtr.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicPubSubType.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicType.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilder.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderPtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderPtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeMember.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypePtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/MemberDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeIdentifier.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeIdentifierTypes.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeNamesGenerator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObject.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectHashId.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeNamesGenerator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypesBase.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/FileConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/ThroughputControllerDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLProfileManager.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPFinder.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/SystemInfo.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ) # External sources @@ -245,13 +248,13 @@ target_compile_definitions(XMLParserTests PRIVATE $<$:__INTERNALDEBUG> # Internal debug activated. ) target_include_directories(XMLParserTests PRIVATE + ${PROJECT_SOURCE_DIR}/test/mock/rtps/SharedMemTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/TCPTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/TCPv4TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/TCPv6TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPv4TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPv6TransportDescriptor - ${PROJECT_SOURCE_DIR}/test/mock/rtps/SharedMemTransportDescriptor ${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include ${PROJECT_SOURCE_DIR}/src/cpp @@ -307,47 +310,44 @@ add_gtest(XMLTreeTests SOURCES XMLTreeTests.cpp) ################################### XMLENDPOINTPARSERTESTS ################################################### set(XMLENDPOINTPARSERTESTS_SOURCE XMLEndpointParserTests.cpp - - # parser - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLEndpointParser.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp - - # log - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/FileConsumer.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicData.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicDataFactory.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicType.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicPubSubType.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypePtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicDataPtr.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicPubSubType.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicType.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilder.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderPtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderFactory.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeBuilderPtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypeMember.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/DynamicTypePtr.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/MemberDescriptor.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/AnnotationParameterValue.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeDescriptor.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeIdentifier.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeIdentifierTypes.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeNamesGenerator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObject.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectFactory.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeObjectHashId.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypeNamesGenerator.cpp ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/TypesBase.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/dynamic-types/BuiltinAnnotationsTypeObject.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/FileConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/Log.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/OStreamConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/log/StdoutErrConsumer.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/attributes/ThreadSettings.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/common/Time_t.cpp ${PROJECT_SOURCE_DIR}/src/cpp/rtps/flowcontrol/FlowControllerConsts.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/transport/PortBasedTransportDescriptor.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLElementParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLEndpointParser.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/rtps/xmlparser/XMLParserCommon.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/utils/md5.cpp ${PROJECT_SOURCE_DIR}/src/cpp/utils/string_convert.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/publisher/qos/WriterQos.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/fastdds/subscriber/qos/ReaderQos.cpp # locators ${PROJECT_SOURCE_DIR}/src/cpp/utils/IPLocator.cpp @@ -384,8 +384,8 @@ target_include_directories(XMLEndpointParserTests PRIVATE ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPTransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPv4TransportDescriptor ${PROJECT_SOURCE_DIR}/test/mock/rtps/UDPv6TransportDescriptor - ${PROJECT_SOURCE_DIR}/test/mock/rtps/XMLProfileManager ${PROJECT_SOURCE_DIR}/test/mock/rtps/WriterProxyData + ${PROJECT_SOURCE_DIR}/test/mock/rtps/XMLProfileManager ${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include ${PROJECT_SOURCE_DIR}/src/cpp