blob: ff781fdf715f0020b549146b6a22ce82c8af4692 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.docker.headers;
import java.util.Map;
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.model.Capability;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Volume;
import com.github.dockerjava.api.model.VolumesFrom;
import org.apache.camel.component.docker.DockerConstants;
import org.apache.camel.component.docker.DockerOperation;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
/**
* Validates Create Container Request headers are parsed properly
*/
public class CreateContainerCmdHeaderTest extends BaseDockerHeaderTest<CreateContainerCmd> {
@Mock
private CreateContainerCmd mockObject;
@Mock
private HostConfig hostConfig;
@Test
public void createContainerHeaderTest() {
String image = "busybox";
ExposedPort exposedPort = ExposedPort.tcp(22);
boolean tty = true;
String name = "cameldocker";
String workingDir = "/opt";
boolean disableNetwork = false;
String domainName = "apache.org";
String hostname = "dockerjava";
String user = "docker";
boolean stdInOpen = false;
boolean stdInOnce = false;
boolean attachStdErr = true;
boolean attachStdOut = true;
boolean attachStdIn = false;
Long memoryLimit = 2048L;
Long swapMemory = 512L;
Integer cpuShares = 512;
Volume volumes = new Volume("/example");
VolumesFrom volumesFromContainer = new VolumesFrom("/etc");
String env = "FOO=bar";
String cmd = "whoami";
Capability capAdd = Capability.NET_BROADCAST;
Capability capDrop = Capability.BLOCK_SUSPEND;
String[] entrypoint = new String[]{"sleep", "9999"};
String portSpecs = "80";
String dns = "8.8.8.8";
Map<String, Object> headers = getDefaultParameters();
headers.put(DockerConstants.DOCKER_IMAGE, image);
headers.put(DockerConstants.DOCKER_EXPOSED_PORTS, exposedPort);
headers.put(DockerConstants.DOCKER_TTY, tty);
headers.put(DockerConstants.DOCKER_NAME, name);
headers.put(DockerConstants.DOCKER_WORKING_DIR, workingDir);
headers.put(DockerConstants.DOCKER_DISABLE_NETWORK, disableNetwork);
headers.put(DockerConstants.DOCKER_HOSTNAME, hostname);
headers.put(DockerConstants.DOCKER_USER, user);
headers.put(DockerConstants.DOCKER_STD_IN_OPEN, stdInOpen);
headers.put(DockerConstants.DOCKER_STD_IN_ONCE, stdInOnce);
headers.put(DockerConstants.DOCKER_ATTACH_STD_IN, attachStdIn);
headers.put(DockerConstants.DOCKER_ATTACH_STD_ERR, attachStdErr);
headers.put(DockerConstants.DOCKER_ATTACH_STD_OUT, attachStdOut);
headers.put(DockerConstants.DOCKER_MEMORY_LIMIT, memoryLimit);
headers.put(DockerConstants.DOCKER_MEMORY_SWAP, swapMemory);
headers.put(DockerConstants.DOCKER_CPU_SHARES, cpuShares);
headers.put(DockerConstants.DOCKER_VOLUMES, volumes);
headers.put(DockerConstants.DOCKER_VOLUMES_FROM, volumesFromContainer);
headers.put(DockerConstants.DOCKER_ENV, env);
headers.put(DockerConstants.DOCKER_CMD, cmd);
headers.put(DockerConstants.DOCKER_HOST_CONFIG, hostConfig);
headers.put(DockerConstants.DOCKER_CAP_ADD, capAdd);
headers.put(DockerConstants.DOCKER_CAP_DROP, capDrop);
headers.put(DockerConstants.DOCKER_ENTRYPOINT, entrypoint);
headers.put(DockerConstants.DOCKER_PORT_SPECS, portSpecs);
headers.put(DockerConstants.DOCKER_DNS, dns);
headers.put(DockerConstants.DOCKER_DOMAIN_NAME, domainName);
Mockito.when(mockObject.getHostConfig()).thenReturn(hostConfig);
template.sendBodyAndHeaders("direct:in", "", headers);
Mockito.verify(dockerClient, Mockito.times(1)).createContainerCmd(image);
Mockito.verify(mockObject, Mockito.times(1)).withExposedPorts(eq(exposedPort));
Mockito.verify(mockObject, Mockito.times(1)).withTty(eq(tty));
Mockito.verify(mockObject, Mockito.times(1)).withName(eq(name));
Mockito.verify(mockObject, Mockito.times(1)).withWorkingDir(workingDir);
Mockito.verify(mockObject, Mockito.times(1)).withNetworkDisabled(disableNetwork);
Mockito.verify(mockObject, Mockito.times(1)).withHostName(hostname);
Mockito.verify(mockObject, Mockito.times(1)).withUser(user);
Mockito.verify(mockObject, Mockito.times(1)).withStdinOpen(stdInOpen);
Mockito.verify(mockObject, Mockito.times(1)).withStdInOnce(stdInOnce);
Mockito.verify(mockObject, Mockito.times(1)).withAttachStderr(attachStdErr);
Mockito.verify(mockObject, Mockito.times(1)).withAttachStdin(attachStdIn);
Mockito.verify(mockObject, Mockito.times(1)).withAttachStdout(attachStdOut);
Mockito.verify(mockObject, Mockito.times(1)).withVolumes(volumes);
Mockito.verify(mockObject, Mockito.times(1)).withEnv(env);
Mockito.verify(mockObject, Mockito.times(1)).withCmd(cmd);
Mockito.verify(mockObject, Mockito.times(1)).withHostConfig(hostConfig);
Mockito.verify(mockObject, Mockito.times(1)).withEntrypoint(entrypoint);
Mockito.verify(mockObject, Mockito.times(1)).withPortSpecs(portSpecs);
Mockito.verify(mockObject, Mockito.times(1)).withDomainName(domainName);
Mockito.verify(hostConfig, Mockito.times(1)).withVolumesFrom(volumesFromContainer);
Mockito.verify(hostConfig, Mockito.times(1)).withCapAdd(capAdd);
Mockito.verify(hostConfig, Mockito.times(1)).withCapDrop(capDrop);
Mockito.verify(hostConfig, Mockito.times(1)).withDns(dns);
Mockito.verify(hostConfig, Mockito.times(1)).withMemory(memoryLimit);
Mockito.verify(hostConfig, Mockito.times(1)).withMemorySwap(swapMemory);
Mockito.verify(hostConfig, Mockito.times(1)).withCpuShares(cpuShares);
}
@Override
protected void setupMocks() {
Mockito.when(dockerClient.createContainerCmd(anyString())).thenReturn(mockObject);
}
@Override
protected DockerOperation getOperation() {
return DockerOperation.CREATE_CONTAINER;
}
}