private void mergeContainerObjectConfiguration() { mergedConfiguration = new CubeContainer(); if (providedConfiguration != null) { mergedConfiguration.merge(providedConfiguration); } mergedConfiguration.merge(generatedConfigutation); // TODO if both provided and generated configurations have environment variables or volumes, they must be merged instead. // TODO should this be handled in CubeContainer::merge() instead? if (providedConfiguration != null) { // environment variables if (providedConfiguration.getEnv() != null && generatedConfigutation.getEnv() != null) { Collection<String> env = new ArrayList<>(); env.addAll(mergedConfiguration.getEnv()); env.addAll(generatedConfigutation.getEnv()); mergedConfiguration.setEnv(env); } // volumes if (providedConfiguration.getBinds() != null && generatedConfigutation.getBinds() != null) { Collection<String> binds = new ArrayList<>(); binds.addAll(mergedConfiguration.getBinds()); binds.addAll(generatedConfigutation.getBinds()); mergedConfiguration.setBinds(binds); } } }
private void mergeContainerObjectConfiguration() { mergedConfiguration = new CubeContainer(); if (providedConfiguration != null) { mergedConfiguration.merge(providedConfiguration); } mergedConfiguration.merge(generatedConfigutation); // TODO if both provided and generated configurations have environment variables or volumes, they must be merged instead. // TODO should this be handled in CubeContainer::merge() instead? if (providedConfiguration != null) { // environment variables if (providedConfiguration.getEnv() != null && generatedConfigutation.getEnv() != null) { Collection<String> env = new ArrayList<>(); env.addAll(mergedConfiguration.getEnv()); env.addAll(generatedConfigutation.getEnv()); mergedConfiguration.setEnv(env); } // volumes if (providedConfiguration.getBinds() != null && generatedConfigutation.getBinds() != null) { Collection<String> binds = new ArrayList<>(); binds.addAll(mergedConfiguration.getBinds()); binds.addAll(generatedConfigutation.getBinds()); mergedConfiguration.setBinds(binds); } } }
@Test public void shouldResolveBinding() throws URISyntaxException { URI simpleDockerComposeVolumes = DockerComposeConverterTest.class.getResource("/simple-docker-compose-volumes.yml").toURI(); DockerComposeConverter dockerComposeConverter = DockerComposeConverter.create(Paths.get(simpleDockerComposeVolumes)); DockerCompositions convert = dockerComposeConverter.convert(); CubeContainer webapp = convert.get("webapp"); Collection<String> binds = webapp.getBinds(); assertEquals(3, binds.size()); assertTrue(binds.toString().contains("docker/local:container")); assertFalse(binds.toString().contains("\\")); if (System.getProperty("os.name").toLowerCase().contains("windows")) { assertTrue(binds.toString().contains("//")); } } }
@Test public void should_load_volumes_from_docker_compose_version_2() { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("serverVersion", "1.13"); parameters.put("serverUri", "http://localhost:25123"); parameters.put("dockerContainers", VERSION_2_WITH_VOLUMES); parameters.put("definitionFormat", DefinitionFormat.COMPOSE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final DockerCompositions dockerContainersContent = cubeConfiguration.getDockerContainersContent(); final CubeContainer ngnix = dockerContainersContent.get("nginx"); final Collection<String> volumes = ngnix.getVolumes(); final String volume = volumes.iterator().next(); assertThat(volume, is("/tmp/www:/usr/share/nginx/html")); final Collection<String> binds = ngnix.getBinds(); final String bind = volumes.iterator().next(); assertThat(bind, is("/tmp/www:/usr/share/nginx/html")); }
@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 shouldStartAContainerObjectDefinedUsingImageAndVolumes() { final AtomicReference<DockerCube> cubeRef = new AtomicReference<>(); try { CubeContainer ccconfig = new CubeContainer(); ccconfig.setBinds(Collections.singleton("/mypath3:/containerPath3:Z")); CubeContainerObjectConfiguration ccoconfig = new CubeContainerObjectConfiguration(ccconfig); TestContainerObjectDefinedUsingImageAndVolumes containerObject = new DockerContainerObjectBuilder<TestContainerObjectDefinedUsingImageAndVolumes>(dockerClientExecutor, cubeController, cubeRegistry) .withContainerObjectClass(TestContainerObjectDefinedUsingImageAndVolumes.class) .withContainerObjectConfiguration(ccoconfig) .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)); assertThat(cube.configuration().getBinds(), hasItems("/mypath:/containerPath:Z", "/mypath2:/containerPath2:Z", "/mypath3:/containerPath3:Z")); verify(cubeController, times(1)).create("containerWithVolumes"); verify(cubeController, times(1)).start("containerWithVolumes"); }