Skip to content
This repository was archived by the owner on Aug 11, 2023. It is now read-only.

Commit a88a64a

Browse files
author
Juan Ignacio Ubeira
authored
Merge pull request #297 from rjcausarano/master-registration-tests
Fix for failing tests in class MasterRegistrationTest.
2 parents 9a4116c + 1a3fbd2 commit a88a64a

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

rosjava/src/main/java/org/ros/internal/node/topic/DefaultPublisher.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.ros.node.topic.PublisherListener;
3636
import org.ros.node.topic.Subscriber;
3737

38+
import java.util.concurrent.CountDownLatch;
3839
import java.util.concurrent.ScheduledExecutorService;
3940
import java.util.concurrent.TimeUnit;
4041

@@ -63,6 +64,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ
6364
private final ListenerGroup<PublisherListener<T>> listeners;
6465
private final NodeIdentifier nodeIdentifier;
6566
private final MessageFactory messageFactory;
67+
private CountDownLatch shutdownLatch;
6668

6769
public DefaultPublisher(NodeIdentifier nodeIdentifier, TopicDeclaration topicDeclaration,
6870
MessageSerializer<T> serializer, MessageFactory messageFactory,
@@ -105,9 +107,20 @@ public boolean getLatchMode() {
105107
return outgoingMessageQueue.getLatchMode();
106108
}
107109

110+
/**
111+
* Sends shutdown signals and awaits for them to be received by
112+
* {@link DefaultPublisher#signalOnMasterUnregistrationSuccess()} or
113+
* {@link DefaultPublisher#signalOnMasterUnregistrationFailure()} before continuing shutdown
114+
*/
108115
@Override
109116
public void shutdown(long timeout, TimeUnit unit) {
117+
shutdownLatch = new CountDownLatch(listeners.size());
110118
signalOnShutdown(timeout, unit);
119+
try {
120+
shutdownLatch.await(timeout, unit);
121+
} catch (InterruptedException e) {
122+
log.error(e.getMessage(), e);
123+
}
111124
outgoingMessageQueue.shutdown();
112125
listeners.shutdown();
113126
}
@@ -252,6 +265,7 @@ public void signalOnMasterUnregistrationSuccess() {
252265
@Override
253266
public void run(PublisherListener<T> listener) {
254267
listener.onMasterUnregistrationSuccess(publisher);
268+
shutdownLatch.countDown();
255269
}
256270
});
257271
}
@@ -269,6 +283,7 @@ public void signalOnMasterUnregistrationFailure() {
269283
@Override
270284
public void run(PublisherListener<T> listener) {
271285
listener.onMasterUnregistrationFailure(publisher);
286+
shutdownLatch.countDown();
272287
}
273288
});
274289
}

rosjava/src/test/java/org/ros/internal/node/MasterRegistrationTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,25 @@ public void onStart(ConnectedNode connectedNode) {
7373
publisher.shutdown();
7474
assertTrue(publisherListener.awaitMasterUnregistrationSuccess(1, TimeUnit.SECONDS));
7575
}
76+
77+
@Test
78+
public void testUnregisterPublisherFailure() throws InterruptedException {
79+
publisherListener = CountDownPublisherListener.newDefault();
80+
nodeMainExecutor.execute(new AbstractNodeMain() {
81+
@Override
82+
public GraphName getDefaultNodeName() {
83+
return GraphName.of("node");
84+
}
85+
86+
@Override
87+
public void onStart(ConnectedNode connectedNode) {
88+
publisher = connectedNode.newPublisher("topic", std_msgs.String._TYPE);
89+
publisher.addListener(publisherListener);
90+
}
91+
}, nodeConfiguration);
92+
assertTrue(publisherListener.awaitMasterRegistrationSuccess(1, TimeUnit.SECONDS));
93+
rosCore.shutdown();
94+
publisher.shutdown();
95+
assertTrue(publisherListener.awaitMasterUnregistrationFailure(6, TimeUnit.SECONDS));
96+
}
7697
}

0 commit comments

Comments
 (0)