Skip to content

Commit b754736

Browse files
authored
Merge pull request #2452 from AlessandroCanossa/iox-2076-pub-sub-options-introspection
iox-#2076 Implement pub/sub options in introspection
2 parents f3ccf20 + b4a3d55 commit b754736

File tree

5 files changed

+92
-5
lines changed

5 files changed

+92
-5
lines changed

doc/website/release-notes/iceoryx-unreleased.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
- Add std::atomic abstraction [#2329](https://github.com/eclipse-iceoryx/iceoryx/issues/2329)
7878
- Port iceoryx to bzlmod [#2325](https://github.com/eclipse-iceoryx/iceoryx/issues/2325)
7979
- Make ACL support optional [#1176](https://github.com/eclipse-iceoryx/iceoryx/issues/1176)
80+
- Implement subscriber/publisher options in introspection [#2076](https://github.com/eclipse-iceoryx/iceoryx/issues/2076)
8081

8182
**Bugfixes:**
8283

iceoryx_posh/include/iceoryx_posh/internal/roudi/introspection/port_introspection.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "iceoryx_posh/iceoryx_posh_types.hpp"
2121
#include "iceoryx_posh/internal/popo/ports/publisher_port_data.hpp"
22+
#include "iceoryx_posh/popo/publisher_options.hpp"
23+
#include "iceoryx_posh/popo/subscriber_options.hpp"
2224
#include "iceoryx_posh/roudi/introspection_types.hpp"
2325
#include "iox/assertions.hpp"
2426
#include "iox/atomic.hpp"
@@ -76,12 +78,14 @@ class PortIntrospection
7678
: portData(&portData)
7779
, process(portData.m_runtimeName)
7880
, service(portData.m_serviceDescription)
81+
, options(portData.m_options)
7982
{
8083
}
8184

8285
typename PublisherPort::MemberType_t* portData{nullptr};
8386
RuntimeName_t process;
8487
capro::ServiceDescription service;
88+
popo::PublisherOptions options;
8589

8690
/// map from indices to ConnectionContainer indices
8791
std::map<int, ConnectionContainerIndexType> connectionMap;
@@ -96,12 +100,14 @@ class PortIntrospection
96100
: portData(&portData)
97101
, process(portData.m_runtimeName)
98102
, service(portData.m_serviceDescription)
103+
, options(portData.m_options)
99104
{
100105
}
101106

102107
typename SubscriberPort::MemberType_t* portData{nullptr};
103108
RuntimeName_t process;
104109
capro::ServiceDescription service;
110+
popo::SubscriberOptions options;
105111
};
106112

107113
struct ConnectionInfo

iceoryx_posh/include/iceoryx_posh/internal/roudi/introspection/port_introspection.inl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@ PortIntrospection<PublisherPort, SubscriberPort>::PortData::prepareTopic(PortInt
552552
publisherData.m_publisherPortID = static_cast<uint64_t>(port.getUniqueID());
553553
publisherData.m_sourceInterface = publisherInfo->service.getSourceInterface();
554554
publisherData.m_name = publisherInfo->process;
555+
publisherData.m_publisherOptions = publisherInfo->options;
555556

556557
publisherData.m_caproInstanceID = publisherInfo->service.getInstanceIDString();
557558
publisherData.m_caproServiceID = publisherInfo->service.getServiceIDString();
@@ -576,6 +577,7 @@ PortIntrospection<PublisherPort, SubscriberPort>::PortData::prepareTopic(PortInt
576577
auto& subscriberInfo = connection->subscriberInfo;
577578

578579
subscriberData.m_name = subscriberInfo.process;
580+
subscriberData.m_subscriberOptions = subscriberInfo.options;
579581

580582
subscriberData.m_caproInstanceID = subscriberInfo.service.getInstanceIDString();
581583
subscriberData.m_caproServiceID = subscriberInfo.service.getServiceIDString();

iceoryx_posh/include/iceoryx_posh/roudi/introspection_types.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "iceoryx_posh/capro/service_description.hpp"
2121
#include "iceoryx_posh/iceoryx_posh_types.hpp"
22+
#include "iceoryx_posh/popo/publisher_options.hpp"
23+
#include "iceoryx_posh/popo/subscriber_options.hpp"
2224
#include "iox/vector.hpp"
2325

2426
namespace iox
@@ -72,13 +74,17 @@ struct PortData
7274
capro::IdString_t m_caproEventMethodID;
7375
};
7476

75-
using SubscriberPortData = PortData;
77+
struct SubscriberPortData : public PortData
78+
{
79+
iox::popo::SubscriberOptions m_subscriberOptions{};
80+
};
7681

7782
/// @brief container for publisher port introspection data.
7883
struct PublisherPortData : public PortData
7984
{
8085
uint64_t m_publisherPortID{0};
8186
iox::capro::Interfaces m_sourceInterface{iox::capro::Interfaces::INTERFACE_END};
87+
iox::popo::PublisherOptions m_publisherOptions{};
8288
};
8389

8490
/// @brief the topic for the port introspection that a user can subscribe to

iceoryx_posh/test/moduletests/test_roudi_port_introspection.cpp

Lines changed: 76 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "iceoryx_posh/internal/roudi/introspection/port_introspection.hpp"
1919
#include "iceoryx_posh/mepoo/chunk_header.hpp"
20+
#include "iceoryx_posh/popo/subscriber_options.hpp"
2021
#include "iceoryx_posh/testing/mocks/chunk_mock.hpp"
2122
#include "iox/std_string_support.hpp"
2223
#include "mocks/publisher_mock.hpp"
@@ -96,6 +97,10 @@ class PortIntrospection_test : public Test
9697
{
9798
return false;
9899
}
100+
if (!comparePortOptions(a.m_subscriberOptions, b.m_subscriberOptions))
101+
{
102+
return false;
103+
}
99104

100105
return true;
101106
}
@@ -121,10 +126,73 @@ class PortIntrospection_test : public Test
121126
{
122127
return false;
123128
}
129+
if (!comparePortOptions(a.m_publisherOptions, b.m_publisherOptions))
130+
{
131+
return false;
132+
}
124133

125134
return true;
126135
}
127136

137+
bool comparePortOptions(const iox::popo::SubscriberOptions& a, const iox::popo::SubscriberOptions& b)
138+
{
139+
auto nameA = iox::into<std::string>(a.nodeName);
140+
auto nameB = iox::into<std::string>(b.nodeName);
141+
142+
if (nameA.compare(nameB) != 0)
143+
{
144+
return false;
145+
}
146+
if (a.requiresPublisherHistorySupport != b.requiresPublisherHistorySupport)
147+
{
148+
return false;
149+
}
150+
if (a.subscribeOnCreate != b.subscribeOnCreate)
151+
{
152+
return false;
153+
}
154+
if (a.historyRequest != b.historyRequest)
155+
{
156+
return false;
157+
}
158+
if (a.queueCapacity != b.queueCapacity)
159+
{
160+
return false;
161+
}
162+
if (a.queueFullPolicy != b.queueFullPolicy)
163+
{
164+
return false;
165+
}
166+
167+
return true;
168+
}
169+
170+
bool comparePortOptions(const iox::popo::PublisherOptions& a, const iox::popo::PublisherOptions& b)
171+
{
172+
auto nameA = iox::into<std::string>(a.nodeName);
173+
auto nameB = iox::into<std::string>(b.nodeName);
174+
175+
if (nameA.compare(nameB) != 0)
176+
{
177+
return false;
178+
}
179+
if (a.offerOnCreate != b.offerOnCreate)
180+
{
181+
return false;
182+
}
183+
if (a.historyCapacity != b.historyCapacity)
184+
{
185+
return false;
186+
}
187+
if (a.subscriberTooSlowPolicy != b.subscriberTooSlowPolicy)
188+
{
189+
return false;
190+
}
191+
192+
return true;
193+
}
194+
195+
128196
MockPublisherPortUser m_mockPublisherPortUserIntrospection;
129197
MockPublisherPortUser m_mockPublisherPortUserIntrospection2;
130198

@@ -189,12 +257,14 @@ TEST_F(PortIntrospection_test, addAndRemovePublisher)
189257
expected1.m_caproInstanceID = "1";
190258
expected1.m_caproServiceID = "2";
191259
expected1.m_caproEventMethodID = "3";
260+
expected1.m_publisherOptions.nodeName = "4";
192261

193262
PortData expected2;
194263
expected2.m_name = runtimeName2;
195264
expected2.m_caproInstanceID = "abc";
196265
expected2.m_caproServiceID = "def";
197266
expected2.m_caproEventMethodID = "ghi";
267+
expected2.m_publisherOptions.nodeName = "jkl";
198268

199269
// prepare inputs
200270
iox::capro::ServiceDescription service1(
@@ -203,8 +273,8 @@ TEST_F(PortIntrospection_test, addAndRemovePublisher)
203273
expected2.m_caproServiceID, expected2.m_caproInstanceID, expected2.m_caproEventMethodID);
204274

205275
iox::mepoo::MemoryManager memoryManager;
206-
iox::popo::PublisherOptions publisherOptions1;
207-
iox::popo::PublisherOptions publisherOptions2;
276+
iox::popo::PublisherOptions publisherOptions1 = expected1.m_publisherOptions;
277+
iox::popo::PublisherOptions publisherOptions2 = expected2.m_publisherOptions;
208278
iox::popo::PublisherPortData portData1(
209279
service1, runtimeName1, iox::roudi::DEFAULT_UNIQUE_ROUDI_ID, &memoryManager, publisherOptions1);
210280
iox::popo::PublisherPortData portData2(
@@ -318,12 +388,14 @@ TEST_F(PortIntrospection_test, addAndRemoveSubscriber)
318388
expected1.m_caproInstanceID = "1";
319389
expected1.m_caproServiceID = "2";
320390
expected1.m_caproEventMethodID = "3";
391+
expected1.m_subscriberOptions.nodeName = nodeName1;
321392

322393
PortData expected2;
323394
expected2.m_name = runtimeName2;
324395
expected2.m_caproInstanceID = "4";
325396
expected2.m_caproServiceID = "5";
326397
expected2.m_caproEventMethodID = "6";
398+
expected2.m_subscriberOptions.nodeName = nodeName2;
327399

328400
// prepare inputs
329401
iox::capro::ServiceDescription service1(
@@ -332,9 +404,9 @@ TEST_F(PortIntrospection_test, addAndRemoveSubscriber)
332404
expected2.m_caproServiceID, expected2.m_caproInstanceID, expected2.m_caproEventMethodID);
333405

334406
iox::popo::SubscriberOptions subscriberOptions1;
335-
subscriberOptions1.nodeName = nodeName1;
407+
subscriberOptions1 = expected1.m_subscriberOptions;
336408
iox::popo::SubscriberOptions subscriberOptions2;
337-
subscriberOptions2.nodeName = nodeName2;
409+
subscriberOptions2 = expected2.m_subscriberOptions;
338410

339411
// test adding of ports
340412
// remark: duplicate subscriber insertions are not possible

0 commit comments

Comments
 (0)