package org.arquillian.cube.docker.impl.client;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.arquillian.cube.docker.impl.client.config.Network;
import org.arquillian.cube.docker.impl.docker.DockerClientExecutor;
import org.arquillian.cube.docker.impl.model.LocalDockerNetworkRegistry;
import org.arquillian.cube.docker.impl.model.NetworkRegistry;
import org.arquillian.cube.spi.CubeConfiguration;
import org.jboss.arquillian.core.api.annotation.ApplicationScoped;
import org.jboss.arquillian.core.test.AbstractManagerTestBase;
import org.jboss.arquillian.test.spi.event.suite.AfterSuite;
import org.jboss.arquillian.test.spi.event.suite.BeforeSuite;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class NetworkLifecycleControllerTest extends AbstractManagerTestBase {
@Override
protected void addExtensions(List<Class<?>> extensions) {
extensions.add(NetworkLifecycleController.class);
super.addExtensions(extensions);
}
@Test
public void shouldStartNetworks() {
DockerClientExecutor executor = Mockito.mock(DockerClientExecutor.class);
String config =
"networks:\n" +
" mynetwork:\n " +
" driver: bridge\n" +
"tomcat6:\n" +
" image: tutum/tomcat:6.0\n" +
" exposedPorts: [8089/tcp]\n" +
" await:\n" +
" strategy: static\n" +
" ip: localhost\n" +
" ports: [8080, 8089]\n" +
"tomcat7:\n" +
" extends: tomcat6\n" +
" image: tutum/tomcat:7.0\n";
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("dockerContainers", config);
parameters.put("definitionFormat", DefinitionFormat.CUBE.name());
CubeConfiguration cubeConfiguration = CubeConfiguration.fromMap(new HashMap<String, String>());
bind(ApplicationScoped.class, CubeConfiguration.class, cubeConfiguration);
CubeDockerConfiguration dockerConfiguration = CubeDockerConfiguration.fromMap(parameters, null);
bind(ApplicationScoped.class, CubeDockerConfiguration.class, dockerConfiguration);
final LocalDockerNetworkRegistry localDockerNetworkRegistry = new LocalDockerNetworkRegistry();
bind(ApplicationScoped.class, NetworkRegistry.class, localDockerNetworkRegistry);
bind(ApplicationScoped.class, DockerClientExecutor.class, executor);
fire(new BeforeSuite());
Mockito.verify(executor).createNetwork(Matchers.eq("mynetwork"), Matchers.any(Network.class));
}
@Test
public void shouldStopNetworks() {
DockerClientExecutor executor = Mockito.mock(DockerClientExecutor.class);
String config =
"networks:\n" +
" mynetwork:\n " +
" driver: bridge\n" +
"tomcat6:\n" +
" image: tutum/tomcat:6.0\n" +
" exposedPorts: [8089/tcp]\n" +
" await:\n" +
" strategy: static\n" +
" ip: localhost\n" +
" ports: [8080, 8089]\n" +
"tomcat7:\n" +
" extends: tomcat6\n" +
" image: tutum/tomcat:7.0\n";
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("dockerContainers", config);
parameters.put("definitionFormat", DefinitionFormat.CUBE.name());
CubeConfiguration cubeConfiguration = CubeConfiguration.fromMap(new HashMap<String, String>());
bind(ApplicationScoped.class, CubeConfiguration.class, cubeConfiguration);
CubeDockerConfiguration dockerConfiguration = CubeDockerConfiguration.fromMap(parameters, null);
bind(ApplicationScoped.class, CubeDockerConfiguration.class, dockerConfiguration);
final LocalDockerNetworkRegistry localDockerNetworkRegistry = new LocalDockerNetworkRegistry();
localDockerNetworkRegistry.addNetwork("mynetwork", new Network());
bind(ApplicationScoped.class, NetworkRegistry.class, localDockerNetworkRegistry);
bind(ApplicationScoped.class, DockerClientExecutor.class, executor);
fire(new AfterSuite());
Mockito.verify(executor).removeNetwork(Matchers.eq("mynetwork"));
}
}