You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/05/07 12:49:30 UTC
[camel] 01/04: Added endpoints for create,
remove and connect to network. Unit Tests
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0f9990b92cff7cadf5afebc93324c0fd1ee5b15a
Author: Martin Bramwell <ma...@hotmail.co.uk>
AuthorDate: Sun May 5 14:43:15 2019 +0100
Added endpoints for create, remove and connect to network. Unit Tests
---
.../camel/component/docker/DockerConstants.java | 11 +++
.../camel/component/docker/DockerOperation.java | 9 ++-
.../component/docker/producer/DockerProducer.java | 78 ++++++++++++++++++++++
.../headers/ConnectToNetworkCmdHeaderTest.java | 71 ++++++++++++++++++++
.../docker/headers/CreateNetworkCmdHeaderTest.java | 67 +++++++++++++++++++
.../docker/headers/RemoveNetworkCmdHeaderTest.java | 66 ++++++++++++++++++
6 files changed, 301 insertions(+), 1 deletion(-)
diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
index 2b8a799..ba7b800 100644
--- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
+++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConstants.java
@@ -223,6 +223,17 @@ public final class DockerConstants {
public static final String DOCKER_RESTART_POLICY = "CamelDockerRestartPolicy";
/**
+ * Create Network *
+ */
+ public static final String DOCKER_NETWORK_NAME = "CamelDockerNetwork";
+
+ /**
+ * Attach to Network *
+ * Remove Network *
+ */
+ public static final String DOCKER_NETWORK_ID = "CamelDockerNetwork";
+
+ /**
* Exec *
*/
public static final String DOCKER_DETACH = "CamelDockerDetach";
diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
index 454509b..e2a855b 100644
--- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
+++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
@@ -187,6 +187,13 @@ public enum DockerOperation {
DockerConstants.DOCKER_PS_ARGS, String.class),
UNPAUSE_CONTAINER("containerunpause", false, true, false,
DockerConstants.DOCKER_CONTAINER_ID, String.class),
+ CREATE_NETWORK("networkcreate", false, true, false,
+ DockerConstants.DOCKER_NETWORK_NAME, String.class),
+ REMOVE_NETWORK("networkremove", false, true, false,
+ DockerConstants.DOCKER_NETWORK_ID, String.class),
+ CONNECT_NETWORK("networkconnect", false, true, false,
+ DockerConstants.DOCKER_NETWORK_ID, String.class,
+ DockerConstants.DOCKER_CONTAINER_ID, String.class),
WAIT_CONTAINER("containerwait", false, true, true,
DockerConstants.DOCKER_CONTAINER_ID, String.class),
@@ -268,4 +275,4 @@ public enum DockerOperation {
return null;
}
-}
\ No newline at end of file
+}
diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java
index 6be98ef..b0d08ab 100644
--- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java
+++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/producer/DockerProducer.java
@@ -21,10 +21,12 @@ import java.io.InputStream;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.AuthCmd;
import com.github.dockerjava.api.command.CommitCmd;
+import com.github.dockerjava.api.command.ConnectToNetworkCmd;
import com.github.dockerjava.api.command.ContainerDiffCmd;
import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd;
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.command.CreateImageCmd;
+import com.github.dockerjava.api.command.CreateNetworkCmd;
import com.github.dockerjava.api.command.ExecCreateCmd;
import com.github.dockerjava.api.command.InfoCmd;
import com.github.dockerjava.api.command.InspectContainerCmd;
@@ -36,6 +38,7 @@ import com.github.dockerjava.api.command.PauseContainerCmd;
import com.github.dockerjava.api.command.PingCmd;
import com.github.dockerjava.api.command.RemoveContainerCmd;
import com.github.dockerjava.api.command.RemoveImageCmd;
+import com.github.dockerjava.api.command.RemoveNetworkCmd;
import com.github.dockerjava.api.command.RestartContainerCmd;
import com.github.dockerjava.api.command.SearchImagesCmd;
import com.github.dockerjava.api.command.StartContainerCmd;
@@ -49,6 +52,7 @@ import com.github.dockerjava.api.model.Capability;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.ExposedPorts;
import com.github.dockerjava.api.model.HostConfig;
+import com.github.dockerjava.api.model.Mount;
import com.github.dockerjava.api.model.Volume;
import com.github.dockerjava.api.model.Volumes;
import com.github.dockerjava.api.model.VolumesFrom;
@@ -167,6 +171,15 @@ public class DockerProducer extends DefaultProducer {
case UNPAUSE_CONTAINER:
result = executeUnpauseContainerRequest(client, message).exec();
break;
+ case CREATE_NETWORK:
+ result = executeCreateNetworkRequest(client, message).exec();
+ break;
+ case REMOVE_NETWORK:
+ result = executeRemoveNetworkRequest(client, message).exec();
+ break;
+ case CONNECT_NETWORK:
+ result = executeConnectToNetworkRequest(client, message).exec();
+ break;
case EXEC_CREATE:
result = executeExecCreateRequest(client, message).exec();
break;
@@ -1086,6 +1099,71 @@ public class DockerProducer extends DefaultProducer {
}
+ /**
+ * Produces a network create request
+ *
+ * @param client
+ * @param message
+ * @return
+ */
+ private CreateNetworkCmd executeCreateNetworkRequest(DockerClient client, Message message) {
+
+ LOGGER.debug("Executing Docker Network Create Request");
+
+ String networkName = DockerHelper.getProperty(DockerConstants.DOCKER_NETWORK_NAME, configuration, message, String.class);
+
+ ObjectHelper.notNull(networkName, "Network Name must be specified");
+
+ CreateNetworkCmd createNetworkCmd = client.createNetworkCmd().withName(networkName);
+
+ return createNetworkCmd;
+
+ }
+
+ /**
+ * Produces a network remove request
+ *
+ * @param client
+ * @param message
+ * @return
+ */
+ private RemoveNetworkCmd executeRemoveNetworkRequest(DockerClient client, Message message) {
+
+ LOGGER.debug("Executing Docker Network Remove Request");
+
+ String networkId = DockerHelper.getProperty(DockerConstants.DOCKER_NETWORK_ID, configuration, message, String.class);
+
+ ObjectHelper.notNull(networkId, "Network ID must be specified");
+
+ RemoveNetworkCmd removeNetworkCmd = client.removeNetworkCmd(networkId);
+
+ return removeNetworkCmd;
+
+ }
+
+ /**
+ * Produces a network connect request
+ *
+ * @param client
+ * @param message
+ * @return
+ */
+ private ConnectToNetworkCmd executeConnectToNetworkRequest(DockerClient client, Message message) {
+
+ LOGGER.debug("Executing Docker Network Connect Request");
+
+ String networkId = DockerHelper.getProperty(DockerConstants.DOCKER_NETWORK_NAME, configuration, message, String.class);
+ String containerId = DockerHelper.getProperty(DockerConstants.DOCKER_CONTAINER_ID, configuration, message, String.class);
+
+ ObjectHelper.notNull(networkId, "Network ID must be specified");
+ ObjectHelper.notNull(containerId, "Container ID must be specified");
+
+ ConnectToNetworkCmd connectToNetworkCmd = client.connectToNetworkCmd().withNetworkId(networkId).withContainerId(containerId);
+
+ return connectToNetworkCmd;
+
+ }
+
/*********************
* Exec Requests
********************/
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ConnectToNetworkCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ConnectToNetworkCmdHeaderTest.java
new file mode 100644
index 0000000..17e75a2
--- /dev/null
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ConnectToNetworkCmdHeaderTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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 com.github.dockerjava.api.command.ConnectToNetworkCmd;
+import com.github.dockerjava.api.model.ExposedPort;
+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 java.util.Map;
+
+import static org.mockito.ArgumentMatchers.anyString;
+
+/**
+ * Validates Connect To Network Request headers are applied properly
+ */
+public class ConnectToNetworkCmdHeaderTest extends BaseDockerHeaderTest<ConnectToNetworkCmd> {
+
+ @Mock
+ ExposedPort exposedPort;
+
+ @Mock
+ private ConnectToNetworkCmd mockObject;
+
+ @Test
+ public void createNetworkHeaderTest() {
+
+ String networkId = "ID1234";
+ String containerId = "CID1234";
+
+ Map<String, Object> headers = getDefaultParameters();
+ headers.put(DockerConstants.DOCKER_NETWORK_ID, networkId);
+ headers.put(DockerConstants.DOCKER_CONTAINER_ID, containerId);
+
+ template.sendBodyAndHeaders("direct:in", "", headers);
+
+ Mockito.verify(dockerClient.connectToNetworkCmd(), Mockito.times(1)).withContainerId(containerId);
+ Mockito.verify(dockerClient.connectToNetworkCmd(), Mockito.times(1)).withNetworkId(networkId);
+
+ }
+
+ @Override
+ protected void setupMocks() {
+ Mockito.when(dockerClient.connectToNetworkCmd()).thenReturn(mockObject);
+ Mockito.when(mockObject.withContainerId(anyString())).thenReturn(mockObject);
+ Mockito.when(mockObject.withNetworkId(anyString())).thenReturn(mockObject);
+ }
+
+ @Override
+ protected DockerOperation getOperation() {
+ return DockerOperation.CONNECT_NETWORK;
+ }
+
+}
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateNetworkCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateNetworkCmdHeaderTest.java
new file mode 100644
index 0000000..5918eb7
--- /dev/null
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateNetworkCmdHeaderTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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 com.github.dockerjava.api.command.CreateNetworkCmd;
+import com.github.dockerjava.api.model.ExposedPort;
+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 java.util.Map;
+
+import static org.mockito.ArgumentMatchers.anyString;
+
+/**
+ * Validates Create Network Request headers are applied properly
+ */
+public class CreateNetworkCmdHeaderTest extends BaseDockerHeaderTest<CreateNetworkCmd> {
+
+ @Mock
+ ExposedPort exposedPort;
+
+ @Mock
+ private CreateNetworkCmd mockObject;
+
+ @Test
+ public void createNetworkHeaderTest() {
+
+ String networkName = "TestNetwork";
+
+ Map<String, Object> headers = getDefaultParameters();
+ headers.put(DockerConstants.DOCKER_NETWORK_NAME, networkName);
+
+ template.sendBodyAndHeaders("direct:in", "", headers);
+
+ Mockito.verify(dockerClient.createNetworkCmd(), Mockito.times(1)).withName(networkName);
+
+ }
+
+ @Override
+ protected void setupMocks() {
+ Mockito.when(dockerClient.createNetworkCmd()).thenReturn(mockObject);
+ Mockito.when(mockObject.withName(anyString())).thenReturn(mockObject);
+ }
+
+ @Override
+ protected DockerOperation getOperation() {
+ return DockerOperation.CREATE_NETWORK;
+ }
+
+}
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveNetworkCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveNetworkCmdHeaderTest.java
new file mode 100644
index 0000000..1bb2253
--- /dev/null
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveNetworkCmdHeaderTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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 com.github.dockerjava.api.command.RemoveNetworkCmd;
+import com.github.dockerjava.api.model.ExposedPort;
+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 java.util.Map;
+
+import static org.mockito.ArgumentMatchers.anyString;
+
+/**
+ * Validates Remove Network Request headers are applied properly
+ */
+public class RemoveNetworkCmdHeaderTest extends BaseDockerHeaderTest<RemoveNetworkCmd> {
+
+ @Mock
+ ExposedPort exposedPort;
+
+ @Mock
+ private RemoveNetworkCmd mockObject;
+
+ @Test
+ public void createNetworkHeaderTest() {
+
+ String networkId = "ID1234";
+
+ Map<String, Object> headers = getDefaultParameters();
+ headers.put(DockerConstants.DOCKER_NETWORK_ID, networkId);
+
+ template.sendBodyAndHeaders("direct:in", "", headers);
+
+ Mockito.verify(dockerClient, Mockito.times(1)).removeNetworkCmd(networkId);
+
+ }
+
+ @Override
+ protected void setupMocks() {
+ Mockito.when(dockerClient.removeNetworkCmd(anyString())).thenReturn(mockObject);
+ }
+
+ @Override
+ protected DockerOperation getOperation() {
+ return DockerOperation.REMOVE_NETWORK;
+ }
+
+}