package org.arquillian.cube.docker.drone; import java.util.Map; import org.arquillian.cube.docker.impl.client.CubeDockerConfiguration; import org.arquillian.cube.docker.impl.client.config.DockerCompositions; import org.arquillian.cube.docker.impl.util.ConfigUtil; import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor; import org.jboss.arquillian.config.descriptor.api.ExtensionDef; import org.jboss.arquillian.core.api.Instance; import org.jboss.arquillian.core.api.InstanceProducer; import org.jboss.arquillian.core.api.annotation.ApplicationScoped; import org.jboss.arquillian.core.api.annotation.Inject; import org.jboss.arquillian.core.api.annotation.Observes; /** * Class that modifies the docker composition to add Selenium docker container and if configured the VNC client container * too. */ public class InstallSeleniumCube { private static final String DEFAULT_BROWSER = "firefox"; @Inject @ApplicationScoped InstanceProducer<SeleniumContainers> seleniumContainersInstanceProducer; @Inject Instance<CubeDroneConfiguration> cubeDroneConfigurationInstance; // ten less than Cube Q public void install(@Observes(precedence = 90) CubeDockerConfiguration configuration, ArquillianDescriptor arquillianDescriptor) { DockerCompositions cubes = configuration.getDockerContainersContent(); final SeleniumContainers seleniumContainers = SeleniumContainers.create(getBrowser(arquillianDescriptor), cubeDroneConfigurationInstance.get()); cubes.add(seleniumContainers.getSeleniumContainerName(), seleniumContainers.getSeleniumContainer()); final boolean recording = cubeDroneConfigurationInstance.get().isRecording(); if (recording) { cubes.add(seleniumContainers.getVncContainerName(), seleniumContainers.getVncContainer()); cubes.add(seleniumContainers.getVideoConverterContainerName(), seleniumContainers.getVideoConverterContainer()); } seleniumContainersInstanceProducer.set(seleniumContainers); System.out.println("SELENIUM INSTALLED"); System.out.println(ConfigUtil.dump(cubes)); } private String getBrowser(ArquillianDescriptor arquillianDescriptor) { final ExtensionDef extension = arquillianDescriptor.extension("webdriver"); if (extension == null) { return DEFAULT_BROWSER; } final Map<String, String> extensionProperties = extension.getExtensionProperties(); if (extensionProperties == null) { return DEFAULT_BROWSER; } if (extensionProperties.containsKey("browser")) { return extensionProperties.get("browser"); } else { return DEFAULT_BROWSER; } } }