diff options
author | Jose <jose@zeroc.com> | 2013-08-01 21:13:59 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2013-08-01 21:13:59 +0200 |
commit | b2071d94a9b44e662c3b5e0953419527eae8c809 (patch) | |
tree | b6c107e3a063b1e23aa4a554db53f3490db9fbf8 /cpp/test/IceStorm/single/Subscriber.cpp | |
parent | Minor Slice doc fix - number of processor sockets is default to 1 as 3.5.0 (diff) | |
download | ice-b2071d94a9b44e662c3b5e0953419527eae8c809.tar.bz2 ice-b2071d94a9b44e662c3b5e0953419527eae8c809.tar.xz ice-b2071d94a9b44e662c3b5e0953419527eae8c809.zip |
Fixed ICE-1638 - add ability to list subscribers
Diffstat (limited to 'cpp/test/IceStorm/single/Subscriber.cpp')
-rw-r--r-- | cpp/test/IceStorm/single/Subscriber.cpp | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/cpp/test/IceStorm/single/Subscriber.cpp b/cpp/test/IceStorm/single/Subscriber.cpp index 5799821513b..d6d513f39c3 100644 --- a/cpp/test/IceStorm/single/Subscriber.cpp +++ b/cpp/test/IceStorm/single/Subscriber.cpp @@ -139,36 +139,47 @@ run(int, char* argv[], const CommunicatorPtr& communicator) // Create subscribers with different QoS. // vector<SingleIPtr> subscribers; + vector<Ice::Identity> subscriberIdentities; // // First we use the old deprecated API. // { subscribers.push_back(new SingleI(communicator, "default")); - topic->subscribe(IceStorm::QoS(), adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribe(IceStorm::QoS(), object); } { subscribers.push_back(new SingleI(communicator, "oneway")); IceStorm::QoS qos; qos["reliability"] = "oneway"; - topic->subscribe(qos, adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribe(qos, object); } { subscribers.push_back(new SingleI(communicator, "twoway")); IceStorm::QoS qos; qos["reliability"] = "twoway"; - topic->subscribe(qos, adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribe(qos, object); } { subscribers.push_back(new SingleI(communicator, "batch")); IceStorm::QoS qos; qos["reliability"] = "batch"; - topic->subscribe(qos, adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribe(qos, object); } { subscribers.push_back(new SingleI(communicator, "twoway ordered")); // Ordered IceStorm::QoS qos; qos["reliability"] = "twoway ordered"; - topic->subscribe(qos, adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribe(qos, object); } { // Use a separate adapter to ensure a separate connection is used for the subscriber @@ -178,7 +189,9 @@ run(int, char* argv[], const CommunicatorPtr& communicator) subscribers.push_back(new SingleI(communicator, "datagram")); IceStorm::QoS qos; qos["reliability"] = "oneway"; - topic->subscribe(IceStorm::QoS(), adpt->addWithUUID(subscribers.back())->ice_datagram()); + Ice::ObjectPrx object = adpt->addWithUUID(subscribers.back())->ice_datagram(); + topic->subscribe(IceStorm::QoS(), object); + subscriberIdentities.push_back(object->ice_getIdentity()); adpt->activate(); } { @@ -189,7 +202,9 @@ run(int, char* argv[], const CommunicatorPtr& communicator) subscribers.push_back(new SingleI(communicator, "batch datagram")); IceStorm::QoS qos; qos["reliability"] = "batch"; - topic->subscribe(IceStorm::QoS(), adpt->addWithUUID(subscribers.back())->ice_datagram()); + Ice::ObjectPrx object = adpt->addWithUUID(subscribers.back())->ice_datagram(); + topic->subscribe(IceStorm::QoS(), object); + subscriberIdentities.push_back(object->ice_getIdentity()); adpt->activate(); } // @@ -197,25 +212,35 @@ run(int, char* argv[], const CommunicatorPtr& communicator) // { subscribers.push_back(new SingleI(communicator, "default")); - topic->subscribeAndGetPublisher(IceStorm::QoS(), adapter->addWithUUID(subscribers.back())->ice_oneway()); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back())->ice_oneway(); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(IceStorm::QoS(), object); } { subscribers.push_back(new SingleI(communicator, "oneway")); - topic->subscribeAndGetPublisher(IceStorm::QoS(), adapter->addWithUUID(subscribers.back())->ice_oneway()); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back())->ice_oneway(); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(IceStorm::QoS(), object); } { subscribers.push_back(new SingleI(communicator, "twoway")); - topic->subscribeAndGetPublisher(IceStorm::QoS(), adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(IceStorm::QoS(), object); } { subscribers.push_back(new SingleI(communicator, "batch")); - topic->subscribeAndGetPublisher(IceStorm::QoS(), adapter->addWithUUID(subscribers.back())->ice_batchOneway()); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back())->ice_batchOneway(); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(IceStorm::QoS(), object); } { subscribers.push_back(new SingleI(communicator, "twoway ordered")); // Ordered IceStorm::QoS qos; qos["reliability"] = "ordered"; - topic->subscribeAndGetPublisher(qos, adapter->addWithUUID(subscribers.back())); + Ice::ObjectPrx object = adapter->addWithUUID(subscribers.back()); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(qos, object); } { // Use a separate adapter to ensure a separate connection is used for the subscriber @@ -223,7 +248,9 @@ run(int, char* argv[], const CommunicatorPtr& communicator) // packet loss, see bug 1784). ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdapter3", "udp"); subscribers.push_back(new SingleI(communicator, "datagram")); - topic->subscribeAndGetPublisher(IceStorm::QoS(), adpt->addWithUUID(subscribers.back())->ice_datagram()); + Ice::ObjectPrx object = adpt->addWithUUID(subscribers.back())->ice_datagram(); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(IceStorm::QoS(), object); adpt->activate(); } { @@ -232,11 +259,20 @@ run(int, char* argv[], const CommunicatorPtr& communicator) // packet loss, see bug 1784). ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdapter4", "udp"); subscribers.push_back(new SingleI(communicator, "batch datagram")); - topic->subscribeAndGetPublisher(IceStorm::QoS(), adpt->addWithUUID(subscribers.back())->ice_batchDatagram()); + Ice::ObjectPrx object = adpt->addWithUUID(subscribers.back())->ice_batchDatagram(); + subscriberIdentities.push_back(object->ice_getIdentity()); + topic->subscribeAndGetPublisher(IceStorm::QoS(), object); adpt->activate(); } adapter->activate(); + + vector<Ice::Identity> ids = topic->getSubscribers(); + test(ids.size() == subscriberIdentities.size()); + for(vector<Ice::Identity>::const_iterator i = ids.begin(); i != ids.end(); ++i) + { + test(find(subscriberIdentities.begin(), subscriberIdentities.end(), *i) != subscriberIdentities.end()); + } for(vector<SingleIPtr>::const_iterator p = subscribers.begin(); p != subscribers.end(); ++p) { |