private static void setDefaultSeleniumCubeProperties(CubeContainer cubeContainer, int seleniumBoundedPort) { final ArrayList<PortBinding> portBindings = new ArrayList<>(); portBindings.add(PortBinding.valueOf(seleniumBoundedPort + "->4444")); final Image image = cubeContainer.getImage(); if (null != image && image.getName().toLowerCase().contains("debug")) { //Expose VNC portBindings.add(PortBinding.valueOf("5900->5900")); } cubeContainer.setPortBindings( portBindings ); Await await = new Await(); await.setStrategy("http"); await.setResponseCode(getSeleniumExpectedResponseCode()); await.setUrl("http://dockerHost:" + seleniumBoundedPort); cubeContainer.setAwait(await); cubeContainer.setKillContainer(true); }
private void testResolvePlaceholders(String dockerComposeFile, String expectedImageName) throws URISyntaxException, IOException { URI readEnvsDockerCompose = DockerComposeConverterTest.class.getResource(dockerComposeFile).toURI(); DockerComposeConverter dockerComposeConverter = DockerComposeConverter.create(Paths.get(readEnvsDockerCompose)); DockerCompositions convert = dockerComposeConverter.convert(); CubeContainer webapp = convert.get("webapp2"); assertThat(webapp.getImage(), is(notNullValue())); final String image = webapp.getImage().toImageRef(); assertThat(image, is(expectedImageName)); }
@Test public void should_load_cube_configuration_from_cube_file_if_no_file_is_provided() { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); CubeContainer actualTomcat = dockerContainersContent.get("tomcat"); assertThat(actualTomcat, is(notNullValue())); String image = actualTomcat.getImage().toImageRef(); assertThat(image, is("tomcat:7.0")); }
@Test public void should_override_custom_cube_properties() throws IOException { File newFile = testFolder.newFile("config.yaml"); Files.write(Paths.get(newFile.toURI()), CONTENT.getBytes()); Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("dockerContainersFiles", newFile.toURI().toString()); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); parameters.put("cubeSpecificProperties", OVERRIDE_CUSTOM); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); final CubeContainer tomcat = dockerContainersContent.get("tomcat"); assertThat(tomcat, is(notNullValue())); assertThat(tomcat.getImage().getTag(), is("7.0")); assertThat(tomcat.getAwait().getStrategy(), is("polling")); assertThat(tomcat.getBeforeStop().size(), is(1)); }
@Test public void should_parse_and_load_configuration_file_from_container_configuration_file() throws IOException { File newFile = testFolder.newFile("config.yaml"); Files.write(Paths.get(newFile.toURI()), CONTENT.getBytes()); Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); parameters.put("dockerContainersFile", newFile.toURI().toString()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); assertThat(cubeConfiguration.getDockerServerUri(), is("http://localhost:25123")); assertThat(cubeConfiguration.getDockerServerVersion(), is("1.13")); DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); CubeContainer actualTomcat = dockerContainersContent.get("tomcat"); assertThat(actualTomcat, is(notNullValue())); String image = actualTomcat.getImage().toImageRef(); assertThat(image, is("tutum/tomcat:7.0")); }
@Test public void should_parse_and_load_configuration_file_from_container_configuration_file_and_property_set_file() throws IOException { File newFile = testFolder.newFile("config.yml"); Files.write(Paths.get(newFile.toURI()), CONTENT.getBytes()); File newFile2 = testFolder.newFile("config.demo.yml"); Files.write(Paths.get(newFile2.toURI()), CONTENT2.getBytes()); System.setProperty("cube.environment", "demo"); Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); parameters.put("dockerContainersFile", newFile.toURI().toString()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); assertThat(cubeConfiguration.getDockerServerUri(), is("http://localhost:25123")); assertThat(cubeConfiguration.getDockerServerVersion(), is("1.13")); DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); CubeContainer actualTomcat = dockerContainersContent.get("tomcat"); assertThat(actualTomcat, is(notNullValue())); String image = actualTomcat.getImage().toImageRef(); assertThat(image, is("tutum/tomcat:7.0")); assertThat(dockerContainersContent.get("tomcat2"), is(notNullValue())); }
@Test public void should_load_docker_compose_format() { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("dockerContainers", DOCKER_COMPOSE_CONTENT); parameters.put("definitionFormat", DefinitionFormat.COMPOSE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); CubeContainer actualWeb = dockerContainersContent.get("web"); assertThat(actualWeb.getBuildImage(), is(notNullValue())); assertThat(actualWeb.getPortBindings(), is(notNullValue())); assertThat(actualWeb.getVolumes(), is(notNullValue())); assertThat(actualWeb.getLinks(), is(notNullValue())); CubeContainer actualRedis = dockerContainersContent.get("redis"); assertThat(actualRedis.getImage(), is(notNullValue())); }
@Test public void should_parse_and_load_configuration_file() { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); parameters.put("dockerContainers", CONTENT); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); assertThat(cubeConfiguration.getDockerServerUri(), is("http://localhost:25123")); assertThat(cubeConfiguration.getDockerServerVersion(), is("1.13")); DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); CubeContainer actualTomcat = dockerContainersContent.get("tomcat"); assertThat(actualTomcat, is(notNullValue())); String image = actualTomcat.getImage().toImageRef(); assertThat(image, is("tutum/tomcat:7.0")); }
@Test public void should_parse_and_load_configuration_from_container_configuration_resource() throws IOException { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); parameters.put("dockerContainersResource", "test-topologies/topology1.yaml"); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); assertThat(cubeConfiguration.getDockerServerUri(), is("http://localhost:25123")); assertThat(cubeConfiguration.getDockerServerVersion(), is("1.13")); DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); CubeContainer actualTomcat = dockerContainersContent.get("tomcat"); assertThat(actualTomcat, is(notNullValue())); String image = actualTomcat.getImage().toImageRef(); assertThat(image, is("tutum/tomcat:7.0")); }
@Test public void shouldCreateCustomContainerFromImageName() { when(cubeDroneConfiguration.isBrowserDockerfileDirectorySet()).thenReturn(false); when(cubeDroneConfiguration.isBrowserImageSet()).thenReturn(true); when(cubeDroneConfiguration.getBrowserImage()).thenReturn("mycompany/mybrowser:1.0"); when(cubeDroneConfiguration.getContainerNameStrategy()).thenReturn(ContainerNameStrategy.STATIC); final SeleniumContainers firefox = SeleniumContainers.create("firefox", cubeDroneConfiguration); assertThat(firefox.getBrowser(), is("firefox")); assertThat(firefox.getSeleniumContainer().getImage().toString(), is("mycompany/mybrowser:1.0")); assertThat(firefox.getSeleniumContainer().getPortBindings(), hasItem(PortBinding.valueOf("14444->4444"))); }
@Test public void shouldTakePrecedenceDockerfileDirectoryThanImage() { when(cubeDroneConfiguration.isBrowserDockerfileDirectorySet()).thenReturn(true); when(cubeDroneConfiguration.isBrowserImageSet()).thenReturn(true); when(cubeDroneConfiguration.getBrowserDockerfileLocation()).thenReturn("src/test/resources/browser"); when(cubeDroneConfiguration.getContainerNameStrategy()).thenReturn(ContainerNameStrategy.STATIC); final SeleniumContainers firefox = SeleniumContainers.create("firefox", cubeDroneConfiguration); assertThat(firefox.getBrowser(), is("firefox")); assertThat(firefox.getSeleniumContainer().getBuildImage().getDockerfileLocation().toString(), is("src/test/resources/browser")); assertThat(firefox.getSeleniumContainer().getImage(), is(nullValue())); assertThat(firefox.getSeleniumContainer().getPortBindings(), hasItem(PortBinding.valueOf("14444->4444"))); }
@Test public void shouldStartAContainerObjectDefinedAsImage() { CubeContainerObjectTestEnricher cubeContainerObjectTestEnricher = new CubeContainerObjectTestEnricher(); cubeContainerObjectTestEnricher.containerObjectFactoryInstance = () -> dockerContainerObjectFactory; when(serviceLoader.all(TestEnricher.class)).thenReturn(Arrays.asList(cubeContainerObjectTestEnricher)); FourthInjectableTest injectableTest = new FourthInjectableTest(); cubeContainerObjectTestEnricher.enrich(injectableTest); final org.arquillian.cube.spi.Cube<?> image = cubeRegistry.getCube("image"); assertThat(image, is(notNullValue())); assertThat(image.hasMetadata(IsContainerObject.class), is(true)); assertThat(image.getMetadata(IsContainerObject.class).getTestClass().getName(), is(FourthInjectableTest.class.getName())); verify(cubeController, times(1)).start("image"); verify(cubeController, times(1)).create("image"); DockerCube dockerCube = (DockerCube) image; assertThat(dockerCube.configuration().getImage().toImageRef(), is("tomee:8-jre-1.7.2-webprofile")); }
@Test public void shouldCreateContainerForChrome() { when(cubeDroneConfiguration.isBrowserDockerfileDirectorySet()).thenReturn(false); when(cubeDroneConfiguration.isBrowserImageSet()).thenReturn(false); when(cubeDroneConfiguration.getContainerNameStrategy()).thenReturn(ContainerNameStrategy.STATIC); when(cubeDroneConfiguration.getDockerRegistry()).thenReturn(""); final SeleniumContainers firefox = SeleniumContainers.create("chrome", cubeDroneConfiguration); assertThat(firefox.getBrowser(), is("chrome")); assertThat(firefox.getSeleniumContainer().getImage().toString(), is("selenium/standalone-chrome-debug:2.53.0")); assertThat(firefox.getSeleniumContainer().getPortBindings(), hasItem(PortBinding.valueOf("14444->4444"))); assertThat(firefox.getSeleniumContainer().getAwait().getResponseCode(), is(403)); }
@Test public void shouldCreateContainerForFirefox() { when(cubeDroneConfiguration.isBrowserDockerfileDirectorySet()).thenReturn(false); when(cubeDroneConfiguration.isBrowserImageSet()).thenReturn(false); when(cubeDroneConfiguration.getContainerNameStrategy()).thenReturn(ContainerNameStrategy.STATIC); when(cubeDroneConfiguration.getDockerRegistry()).thenReturn(""); final SeleniumContainers firefox = SeleniumContainers.create("firefox", cubeDroneConfiguration); assertThat(firefox.getBrowser(), is("firefox")); assertThat(firefox.getSeleniumContainer().getImage().toString(), is("selenium/standalone-firefox-debug:2.53.0")); assertThat(firefox.getSeleniumContainer().getPortBindings(), hasItem(PortBinding.valueOf("14444->4444"))); assertThat(firefox.getSeleniumContainer().getAwait().getResponseCode(), is(403)); }
@Test public void shouldStartAContainerObjectDefinedAsImageAndEnvironmentVariables() { CubeContainerObjectTestEnricher cubeContainerObjectTestEnricher = new CubeContainerObjectTestEnricher(); cubeContainerObjectTestEnricher.containerObjectFactoryInstance = () -> dockerContainerObjectFactory; when(serviceLoader.all(TestEnricher.class)).thenReturn(Arrays.asList(cubeContainerObjectTestEnricher)); FifthInjectableTest injectableTest = new FifthInjectableTest(); cubeContainerObjectTestEnricher.enrich(injectableTest); final org.arquillian.cube.spi.Cube<?> image = cubeRegistry.getCube("image"); assertThat(image, is(notNullValue())); assertThat(image.hasMetadata(IsContainerObject.class), is(true)); assertThat(image.getMetadata(IsContainerObject.class).getTestClass().getName(), is(FifthInjectableTest.class.getName())); verify(cubeController, times(1)).start("image"); verify(cubeController, times(1)).create("image"); DockerCube dockerCube = (DockerCube) image; assertThat(dockerCube.configuration().getImage().toImageRef(), is("tomee:8-jre-1.7.2-webprofile")); assertThat(dockerCube.configuration().getEnv(), hasItems("a=b", "c=d")); }
@Test public void shouldStartAContainerObjectDefinedUsingImage() { final AtomicReference<DockerCube> cubeRef = new AtomicReference<>(); try { TestContainerObjectDefinedUsingImage containerObject = new DockerContainerObjectBuilder<TestContainerObjectDefinedUsingImage>(dockerClientExecutor, cubeController, cubeRegistry) .withContainerObjectClass(TestContainerObjectDefinedUsingImage.class) .onCubeCreated(cubeRef::set) .build(); assertThat(containerObject, is(notNullValue())); } catch (IllegalAccessException|InvocationTargetException|IOException e) { fail(); } DockerCube cube = cubeRef.get(); assertThat(cube, is(notNullValue())); assertThat(cube.hasMetadata(IsContainerObject.class), is(true)); assertThat(cube.getMetadata(IsContainerObject.class).getTestClass(), is(nullValue())); assertThat(cube.configuration().getImage().toImageRef(), is(BASE_IMAGE)); verify(cubeController, times(1)).create("containerDefinedUsingImage"); verify(cubeController, times(1)).start("containerDefinedUsingImage"); }
private void checkRegistry(CubeDroneConfiguration conf) { final SeleniumContainers seleniumContainers = SeleniumContainers.create("firefox", conf); assertThat(seleniumContainers.getSeleniumContainer().getImage().toString(), startsWith("my.registry/selenium")); assertThat(seleniumContainers.getVideoConverterContainer().getImage().toString(), startsWith("my.registry/arquillian")); assertThat(seleniumContainers.getVncContainer().getImage().toString(), startsWith("my.registry/richnorth")); } }
@Test public void shouldStartAContainerObjectDefinedAsImageAndVolumesVariables() { CubeContainerObjectTestEnricher cubeContainerObjectTestEnricher = new CubeContainerObjectTestEnricher(); cubeContainerObjectTestEnricher.containerObjectFactoryInstance = () -> dockerContainerObjectFactory; when(serviceLoader.all(TestEnricher.class)).thenReturn(Arrays.asList(cubeContainerObjectTestEnricher)); SixthInjectableTest injectableTest = new SixthInjectableTest(); cubeContainerObjectTestEnricher.enrich(injectableTest); final org.arquillian.cube.spi.Cube<?> image = cubeRegistry.getCube("image"); assertThat(image, is(notNullValue())); assertThat(image.hasMetadata(IsContainerObject.class), is(true)); assertThat(image.getMetadata(IsContainerObject.class).getTestClass().getName(), is(SixthInjectableTest.class.getName())); verify(cubeController, times(1)).start("image"); verify(cubeController, times(1)).create("image"); DockerCube dockerCube = (DockerCube) image; assertThat(dockerCube.configuration().getImage().toImageRef(), is("tomee:8-jre-1.7.2-webprofile")); assertThat(dockerCube.configuration().getBinds(), hasItems("/mypath:/containerPath:Z", "/mypath2:/containerPath2:Z")); }
@Test public void should_be_able_to_extend_and_override_toplevel() throws Exception { String config = "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()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); CubeContainer tomcat7 = cubeConfiguration.getDockerContainersContent().get("tomcat7"); Assert.assertEquals("tutum/tomcat:7.0", tomcat7.getImage().toImageRef()); Assert.assertTrue(tomcat7.getAwait() != null); Assert.assertEquals("8089/tcp", tomcat7.getExposedPorts().iterator().next().toString()); }
@Test public void shouldTransformSimpleDockerComposeFormat() throws URISyntaxException, IOException { URI simpleDockerCompose = DockerComposeConverterTest.class.getResource("/simple-docker-compose.yml").toURI(); DockerComposeConverter dockerComposeConverter = DockerComposeConverter.create(Paths.get(simpleDockerCompose)); DockerCompositions convert = dockerComposeConverter.convert(); CubeContainer webapp = convert.get("webapp"); assertThat(webapp.getBuildImage(), is(notNullValue())); assertThat(webapp.getPortBindings(), is(notNullValue())); Collection<PortBinding> ports = webapp.getPortBindings(); assertThat(ports, containsInAnyOrder(PortBinding.valueOf("8000->8000"))); assertThat(webapp.getDevices(), is(notNullValue())); assertThat(webapp.getVolumes(), is(notNullValue())); Collection<String> volumes = (Collection<String>) webapp.getVolumes(); assertThat(volumes, containsInAnyOrder("/data")); CubeContainer webapp2 = convert.get("webapp2"); assertThat(webapp2.getImage(), is(notNullValue())); assertThat(webapp2.getPortBindings(), is(notNullValue())); assertThat(webapp2.getLinks(), is(notNullValue())); Collection<Link> links = webapp2.getLinks(); assertThat(links, containsInAnyOrder(Link.valueOf("webapp:webapp"))); assertThat(webapp2.getEnv(), is(notNullValue())); Collection<String> env = webapp2.getEnv(); assertThat(env, containsInAnyOrder("RACK_ENV=development")); }