package com.tacitknowledge.slowlight.proxyserver.server;
import com.tacitknowledge.slowlight.proxyserver.config.ConfigBuilder;
import com.tacitknowledge.slowlight.proxyserver.config.ServerConfig;
import com.tacitknowledge.slowlight.proxyserver.config.SlowlightConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Arrays;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
/**
* @author Alexandr Donciu (adonciu@tacitknowledge.com)
*/
@RunWith(MockitoJUnitRunner.class)
public class SlowlightServerTest
{
private static final String CONFIG_FILE_NAME = "the.config";
@Mock
private ConfigBuilder configBuilder;
@Spy
@InjectMocks
private final SlowlightServer slowlightServer = new SlowlightServer();
@Test(expected = IllegalArgumentException.class)
public void serverShouldThrowExceptionIfNotAllRequiredArgumentsWereSpecified() throws Exception
{
slowlightServer.start(new String[] {});
}
@Test(expected = RuntimeException.class)
public void serverShouldThrowExceptionIfCannotInstantiateServer() throws Exception
{
final ServerConfig serverConfig = mock(ServerConfig.class);
final SlowlightConfig mainConfig = mock(SlowlightConfig.class);
doReturn(Arrays.asList(serverConfig)).when(mainConfig).getServers();
doReturn(mainConfig).when(configBuilder).getConfig(CONFIG_FILE_NAME);
doThrow(new RuntimeException()).when(slowlightServer).start(new String[] {CONFIG_FILE_NAME});
slowlightServer.start(new String[] {CONFIG_FILE_NAME});
}
@Test
public void serverShouldGetConfigurationAndStartAllServers() throws Exception
{
final ServerConfig serverConfig1 = mock(ServerConfig.class);
final ServerConfig serverConfig2 = mock(ServerConfig.class);
final SlowlightConfig mainConfig = mock(SlowlightConfig.class);
doReturn(Arrays.asList(serverConfig1, serverConfig2)).when(mainConfig).getServers();
doReturn(mainConfig).when(configBuilder).getConfig(CONFIG_FILE_NAME);
final Server server1 = mock(Server.class);
final Server server2 = mock(Server.class);
doReturn(server1).when(slowlightServer).instantiateServer(mainConfig, serverConfig1);
doReturn(server2).when(slowlightServer).instantiateServer(mainConfig, serverConfig2);
slowlightServer.start(new String[] {CONFIG_FILE_NAME});
verify(server1).start();
verify(server2).start();
}
}