// Copyright © 2011-2013, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.launcher;
import fi.jumi.actors.*;
import fi.jumi.core.network.NetworkServer;
import org.junit.*;
import org.junit.rules.Timeout;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
public class JumiLauncherTest {
@Rule
public final Timeout timeout = new Timeout(5000);
private ExecutorService actorsThreadPool;
@Test
public void on_close_stops_the_actor_thread() throws IOException {
final ActorThread actorThread = spy(new FakeActorThread());
JumiLauncherBuilder builder = new JumiLauncherBuilder() {
@Override
protected ActorThread startActorThread(Actors actors) {
return actorThread;
}
};
JumiLauncher launcher = builder.build();
launcher.close();
verify(actorThread).stop();
}
@Test
public void on_close_terminates_the_actor_thread_pool() throws IOException {
JumiLauncherBuilder builder = new JumiLauncherBuilder() {
@Override
protected ExecutorService createActorsThreadPool() {
actorsThreadPool = super.createActorsThreadPool();
return actorsThreadPool;
}
};
JumiLauncher launcher = builder.build();
launcher.close();
assertTrue("should have terminated the actors thread pool", actorsThreadPool.isTerminated());
}
@Test
public void on_close_closes_network_sockets() throws IOException {
final NetworkServer networkServer = mock(NetworkServer.class);
JumiLauncherBuilder builder = new JumiLauncherBuilder() {
@Override
protected NetworkServer createNetworkServer() {
return networkServer;
}
};
JumiLauncher launcher = builder.build();
launcher.close();
verify(networkServer).close();
}
@Test
public void closing_more_than_once_has_no_effect() throws IOException {
JumiLauncherBuilder builder = new JumiLauncherBuilder();
JumiLauncher launcher = builder.build();
launcher.close();
launcher.close();
}
}