Skip to content
Snippets Groups Projects
Unverified Commit a88a64a5 authored by Juan Ignacio Ubeira's avatar Juan Ignacio Ubeira Committed by GitHub
Browse files

Merge pull request #297 from rjcausarano/master-registration-tests

Fix for failing tests in class MasterRegistrationTest.
parents 9a4116cc 1a3fbd2d
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,7 @@ import org.ros.node.topic.Publisher; ...@@ -35,6 +35,7 @@ import org.ros.node.topic.Publisher;
import org.ros.node.topic.PublisherListener; import org.ros.node.topic.PublisherListener;
import org.ros.node.topic.Subscriber; import org.ros.node.topic.Subscriber;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -63,6 +64,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ ...@@ -63,6 +64,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ
private final ListenerGroup<PublisherListener<T>> listeners; private final ListenerGroup<PublisherListener<T>> listeners;
private final NodeIdentifier nodeIdentifier; private final NodeIdentifier nodeIdentifier;
private final MessageFactory messageFactory; private final MessageFactory messageFactory;
private CountDownLatch shutdownLatch;
public DefaultPublisher(NodeIdentifier nodeIdentifier, TopicDeclaration topicDeclaration, public DefaultPublisher(NodeIdentifier nodeIdentifier, TopicDeclaration topicDeclaration,
MessageSerializer<T> serializer, MessageFactory messageFactory, MessageSerializer<T> serializer, MessageFactory messageFactory,
...@@ -105,9 +107,20 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ ...@@ -105,9 +107,20 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ
return outgoingMessageQueue.getLatchMode(); return outgoingMessageQueue.getLatchMode();
} }
/**
* Sends shutdown signals and awaits for them to be received by
* {@link DefaultPublisher#signalOnMasterUnregistrationSuccess()} or
* {@link DefaultPublisher#signalOnMasterUnregistrationFailure()} before continuing shutdown
*/
@Override @Override
public void shutdown(long timeout, TimeUnit unit) { public void shutdown(long timeout, TimeUnit unit) {
shutdownLatch = new CountDownLatch(listeners.size());
signalOnShutdown(timeout, unit); signalOnShutdown(timeout, unit);
try {
shutdownLatch.await(timeout, unit);
} catch (InterruptedException e) {
log.error(e.getMessage(), e);
}
outgoingMessageQueue.shutdown(); outgoingMessageQueue.shutdown();
listeners.shutdown(); listeners.shutdown();
} }
...@@ -252,6 +265,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ ...@@ -252,6 +265,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ
@Override @Override
public void run(PublisherListener<T> listener) { public void run(PublisherListener<T> listener) {
listener.onMasterUnregistrationSuccess(publisher); listener.onMasterUnregistrationSuccess(publisher);
shutdownLatch.countDown();
} }
}); });
} }
...@@ -269,6 +283,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ ...@@ -269,6 +283,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ
@Override @Override
public void run(PublisherListener<T> listener) { public void run(PublisherListener<T> listener) {
listener.onMasterUnregistrationFailure(publisher); listener.onMasterUnregistrationFailure(publisher);
shutdownLatch.countDown();
} }
}); });
} }
......
...@@ -73,4 +73,25 @@ public class MasterRegistrationTest extends RosTest { ...@@ -73,4 +73,25 @@ public class MasterRegistrationTest extends RosTest {
publisher.shutdown(); publisher.shutdown();
assertTrue(publisherListener.awaitMasterUnregistrationSuccess(1, TimeUnit.SECONDS)); assertTrue(publisherListener.awaitMasterUnregistrationSuccess(1, TimeUnit.SECONDS));
} }
@Test
public void testUnregisterPublisherFailure() throws InterruptedException {
publisherListener = CountDownPublisherListener.newDefault();
nodeMainExecutor.execute(new AbstractNodeMain() {
@Override
public GraphName getDefaultNodeName() {
return GraphName.of("node");
}
@Override
public void onStart(ConnectedNode connectedNode) {
publisher = connectedNode.newPublisher("topic", std_msgs.String._TYPE);
publisher.addListener(publisherListener);
}
}, nodeConfiguration);
assertTrue(publisherListener.awaitMasterRegistrationSuccess(1, TimeUnit.SECONDS));
rosCore.shutdown();
publisher.shutdown();
assertTrue(publisherListener.awaitMasterUnregistrationFailure(6, TimeUnit.SECONDS));
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment