package org.arquillian.cube.docker.impl.client;
import org.arquillian.cube.docker.impl.await.HealthCheckBeforeClassObserver;
import org.arquillian.cube.docker.impl.await.SleepBeforeClassObserver;
import org.arquillian.cube.docker.impl.client.container.DockerServerIPConfigurator;
import org.arquillian.cube.docker.impl.client.containerobject.AfterClassContainerObjectObserver;
import org.arquillian.cube.docker.impl.client.containerobject.ContainerObjectFactoryProvider;
import org.arquillian.cube.docker.impl.client.containerobject.CubeContainerObjectTestEnricher;
import org.arquillian.cube.docker.impl.client.containerobject.dsl.AfterClassNetworkContainerObserver;
import org.arquillian.cube.docker.impl.client.containerobject.dsl.ContainerNetworkObjectDslTestEnricher;
import org.arquillian.cube.docker.impl.client.enricher.CubeResourceProvider;
import org.jboss.arquillian.core.spi.LoadableExtension;
import org.jboss.arquillian.test.spi.TestEnricher;
import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
public class CubeDockerExtension implements LoadableExtension {
@Override
public void register(ExtensionBuilder builder) {
builder.observer(TopCreator.class)
.observer(CubeDockerConfigurator.class)
.observer(DockerClientCreator.class)
.observer(CubeDockerRegistrar.class)
.observer(CubeSuiteLifecycleController.class)
//.observer(ClientCubeControllerCreator.class)
.observer(BeforeStopContainerObserver.class)
.observer(Boot2DockerCreator.class)
.observer(DockerMachineCreator.class)
.observer(AfterClassContainerObjectObserver.class)
.observer(AfterClassNetworkContainerObserver.class)
.observer(StopDockerMachineAfterSuiteObserver.class)
.observer(NetworkRegistrar.class)
.observer(NetworkLifecycleController.class)
.observer(ContainerObjectFactoryRegistrar.class)
.observer(DockerImageController.class)
.observer(HealthCheckBeforeClassObserver.class)
.observer(SleepBeforeClassObserver.class);
builder.service(ResourceProvider.class, CubeResourceProvider.class);
builder.service(ResourceProvider.class, ContainerObjectFactoryProvider.class);
builder.service(TestEnricher.class, CubeContainerObjectTestEnricher.class);
builder.service(TestEnricher.class, ContainerNetworkObjectDslTestEnricher.class);
// Arquillian Container integration
// Only register if container-test-spi is on classpath
if (Validate.classExists("org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender")
&& doesNotContainStandaloneExtension()) {
builder.observer(DockerServerIPConfigurator.class);
builder.observer(CubeDockerAutoStartConfigurator.class);
} else {
// Arquillian in Standalone mode
builder.observer(StandaloneAutoStartConfigurator.class);
}
}
private boolean doesNotContainStandaloneExtension() {
final boolean junitStandalone =
Validate.classExists("org.jboss.arquillian.junit.standalone.JUnitStandaloneExtension");
final boolean testngStandalone =
Validate.classExists("org.jboss.arquillian.testng.standalone.TestNGStandaloneExtension");
final boolean spockStandalone =
Validate.classExists("org.jboss.arquillian.spock.standalone.SpockStandaloneExtension");
return !junitStandalone && !testngStandalone && !spockStandalone;
}
}