Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ services:
- docker

jdk:
- oraclejdk7
- oraclejdk8

install: true

env:
global:
- CODECOV=true
- DOCKER_TLS_VERIFY=""
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key
Expand All @@ -21,14 +22,16 @@ env:
- COVERITY_SCAN_NOTIFICATION_EMAIL="kanstantsin.sha@gmail.com"

matrix:
# - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.13.1-0~ubuntu-trusty" CODECOV=true
# - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.13.1-0~ubuntu-trusty" CODECOV=true
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.12.6-0~ubuntu-trusty" DEPLOY=true COVERITY=true CODECOV=true
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.12.6-0~ubuntu-trusty" CODECOV=true
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.11.2-0~trusty" CODECOV=true
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.11.2-0~trusty" CODECOV=true
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.10.3-0~trusty" CODECOV=true
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.10.3-0~trusty" CODECOV=true
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="17.05.0~ce-0~ubuntu-trusty" DEPLOY=true COVERITY=true
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="17.05.0~ce-0~ubuntu-trusty"
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.13.1-0~ubuntu-trusty"
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.13.1-0~ubuntu-trusty"
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.12.6-0~ubuntu-trusty"
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.12.6-0~ubuntu-trusty"
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.11.2-0~trusty"
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.11.2-0~trusty"
- repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.10.3-0~trusty"
- repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.10.3-0~trusty"
# - repo="testing" DOCKER_HOST="tcp://127.0.0.1:2375"
# - repo="testing" DOCKER_HOST="unix:///var/run/docker.sock"
# - repo="experimental" DOCKER_HOST="tcp://127.0.0.1:2375"
Expand All @@ -50,5 +53,5 @@ script:
after_success:
- ./.travis/travis-after-success.sh

after_script:
- sudo cat /var/log/upstart/docker.log
#after_script:
# - sudo cat /var/log/upstart/docker.log
87 changes: 83 additions & 4 deletions .travis/travis-before-install.sh
Original file line number Diff line number Diff line change
@@ -1,19 +1,32 @@
#!/usr/bin/env bash

SWARM_VERSION="${SWARM_VERSION:-}"
FAST_BUILD="${FAST_BUILD:-}"

## fix coverity issue
sudo apt-get install -y -q ca-certificates

export HOST_PORT=2375
echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
##


if [ "$FAST_BUILD" == true ]; then
if [ "$FAST_BUILD" == "true" ]; then
echo "Fast build, skipping docker installations."
exit 0
fi

set -exu

sudo ip a ls
sudo ip r ls
sudo ss -antpl

export HOST_PORT="2375"
export SWARM_PORT="2377"
export HOST_IP="$(ip a show dev eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)"
# because of swarm use docker-engine directly
export PRE_DOCKER_HOST="$DOCKER_HOST"
export DOCKER_HOST="tcp://127.0.0.1:${HOST_PORT}"


docker info
docker version

Expand Down Expand Up @@ -89,3 +102,69 @@ registry.email=${registry_email}
registry.url=https://index.docker.io/v1/

EOF

if [[ -n $SWARM_VERSION ]]; then
# export SWARM_PORT="${PRE_DOCKER_HOST##*:}"

docker pull swarm

# # kv store https://docs.docker.com/v1.11/engine/userguide/networking/get-started-overlay/
# docker run -d \
# -p "8500:8500" \
# -h "consul" \
# --name=consul \
# progrium/consul -server -bootstrap
#
# sleep 5

# SWARM_TOKEN=$(docker run swarm c)

# docker run \
# -d \
# --name=swarm_manager \
# -p ${SWARM_PORT}:2375 \
# "swarm:${SWARM_VERSION}" \
# manage token://${SWARM_TOKEN}

docker run \
-d \
-p ${SWARM_PORT}:2375 \
--name=swarm_manager \
swarm manage --engine-refresh-min-interval "3s" --engine-refresh-max-interval "6s" "nodes://${HOST_IP}:${HOST_PORT}"
# swarm manage --engine-refresh-min-interval "3s" --engine-refresh-max-interval "6s" "consul://${HOST_IP}:8500"

# join engine to swarm
docker run \
-d \
"--name=swarm_join" \
"swarm:${SWARM_VERSION}" \
join --advertise="${HOST_IP}:${HOST_PORT}" --delay="0s" --heartbeat "5s" "nodes://${HOST_IP}:${HOST_PORT}"
# join --advertise="${HOST_IP}:${HOST_PORT}" --delay="0s" --heartbeat "5s" "token://${SWARM_TOKEN}"

docker run --rm \
"swarm:${SWARM_VERSION}" list "nodes://${HOST_IP}:${HOST_PORT}"

docker ps -a
sudo ss -antpl

sleep 30

docker logs swarm_join
docker logs swarm_manager
# docker logs consul

# switch to swarm connection
DOCKER_HOST="$PRE_DOCKER_HOST"

docker version
docker info

NODES=$(docker info | grep "Nodes:" | awk '{ print $2 }')
if [[ $NODES -eq "0" ]]; then
echo "Swarm didn't connect"
exit 1
fi

# test via swarm
docker pull busybox
fi
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.github.dockerjava.api.model.VolumeRW;
import com.github.dockerjava.api.model.VolumesRW;
import com.github.dockerjava.core.RemoteApiVersion;
import org.apache.commons.lang.builder.ToStringStyle;

/**
*
Expand Down Expand Up @@ -217,7 +218,7 @@ public List<String> getExecIds() {

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}

@JsonIgnoreProperties(ignoreUnknown = true)
Expand Down
26 changes: 21 additions & 5 deletions src/main/java/com/github/dockerjava/core/AuthConfigFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.AuthConfigurations;

Expand All @@ -26,11 +27,12 @@ public class AuthConfigFile {
private static final TypeReference<Map<String, Map<String, AuthConfig>>> CONFIG_JSON_MAP_TYPE =
new TypeReference<Map<String, Map<String, AuthConfig>>>() {
};
private static final String AUTHS_PROPERTY = "auths";

private final Map<String, AuthConfig> authConfigMap;

public AuthConfigFile() {
authConfigMap = new HashMap<String, AuthConfig>();
authConfigMap = new HashMap<>();
}

void addConfig(AuthConfig config) {
Expand Down Expand Up @@ -114,10 +116,12 @@ public static AuthConfigFile loadConfig(File confFile) throws IOException {
*/
try {
// try registry version 2
Map<String, Map<String, AuthConfig>> configJson = MAPPER.readValue(confFile, CONFIG_JSON_MAP_TYPE);
if (configJson != null) {
configMap = configJson.get("auths");
final ObjectNode node = filterNonAuthsFromJSON(confFile);
Map<String, Map<String, AuthConfig>> configJson = MAPPER.convertValue(node, CONFIG_JSON_MAP_TYPE);
if (configJson != null && !configJson.isEmpty()) {
configMap = configJson.get(AUTHS_PROPERTY);
}

} catch (IOException e1) {
try {
// try registry version 1
Expand All @@ -130,7 +134,10 @@ public static AuthConfigFile loadConfig(File confFile) throws IOException {
if (configMap != null) {
for (Map.Entry<String, AuthConfig> entry : configMap.entrySet()) {
AuthConfig authConfig = entry.getValue();
decodeAuth(authConfig.getAuth(), authConfig);
final String auth = authConfig.getAuth();
if (auth == null) continue;

decodeAuth(auth, authConfig);
authConfig.withAuth(null);
authConfig.withRegistryAddress(entry.getKey());
configFile.addConfig(authConfig);
Expand Down Expand Up @@ -158,6 +165,15 @@ public static AuthConfigFile loadConfig(File confFile) throws IOException {

}

private static ObjectNode filterNonAuthsFromJSON(final File confFile) throws IOException {
final ObjectNode node = MAPPER.readValue(confFile, ObjectNode.class);
if (!node.has(AUTHS_PROPERTY)) {
throw new IOException("No Auth Config contained");
}
node.retain(AUTHS_PROPERTY);
return node;
}

static void decodeAuth(String auth, AuthConfig config) throws IOException {
String str = new String(Base64.decodeBase64(auth), Charset.forName("UTF-8"));
String[] parts = str.split(":", 2);
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/github/dockerjava/jaxrs/CommitCmdExec.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,12 @@ public CommitCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConf

@Override
protected String execute(CommitCmd command) {
WebTarget webTarget = getBaseResource().path("/commit").queryParam("container", command.getContainerId())
.queryParam("repo", command.getRepository()).queryParam("tag", command.getTag())
.queryParam("m", command.getMessage()).queryParam("author", command.getAuthor());
WebTarget webTarget = getBaseResource().path("/commit")
.queryParam("container", command.getContainerId())
.queryParam("repo", command.getRepository())
.queryParam("tag", command.getTag())
.queryParam("m", command.getMessage())
.queryParam("author", command.getAuthor());

webTarget = booleanQueryParam(webTarget, "pause", command.hasPauseEnabled());

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.github.dockerjava.netty.exec;

import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -29,7 +27,7 @@ protected Void execute0(EventsCmd command, ResultCallback<Event> resultCallback)

if (command.getFilters() != null && !command.getFilters().isEmpty()) {
webTarget = webTarget
.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters())));
.queryParam("filters", FiltersEncoder.jsonEncode(command.getFilters()));
}

LOGGER.trace("GET: {}", webTarget);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package com.github.dockerjava.netty.exec;

import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.core.type.TypeReference;
import com.github.dockerjava.api.command.ListContainersCmd;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.util.FiltersEncoder;
import com.github.dockerjava.netty.MediaType;
import com.github.dockerjava.netty.WebTarget;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

public class ListContainersCmdExec extends AbstrSyncDockerCmdExec<ListContainersCmd, List<Container>> implements
ListContainersCmd.Exec {
Expand All @@ -38,7 +35,7 @@ protected List<Container> execute(ListContainersCmd command) {

if (command.getFilters() != null && !command.getFilters().isEmpty()) {
webTarget = webTarget
.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters())));
.queryParam("filters", FiltersEncoder.jsonEncode(command.getFilters()));
}

LOGGER.trace("GET: {}", webTarget);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.github.dockerjava.netty.exec;

import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;

import java.util.List;

import org.slf4j.Logger;
Expand Down Expand Up @@ -30,11 +28,11 @@ protected List<Image> execute(ListImagesCmd command) {
webTarget = booleanQueryParam(webTarget, "all", command.hasShowAllEnabled());

if (command.getFilters() != null && !command.getFilters().isEmpty()) {
webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters())));
webTarget = webTarget.queryParam("filters", FiltersEncoder.jsonEncode(command.getFilters()));
}

if (command.getImageNameFilter() != null) {
webTarget = webTarget.queryParam("filter", urlPathSegmentEscaper().escape(command.getImageNameFilter()));
webTarget = webTarget.queryParam("filter", command.getImageNameFilter());
}

LOGGER.trace("GET: {}", webTarget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@

import java.util.List;

import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;

public class ListNetworksCmdExec extends AbstrSyncDockerCmdExec<ListNetworksCmd, List<Network>> implements
ListNetworksCmd.Exec {

Expand All @@ -29,7 +27,7 @@ protected List<Network> execute(ListNetworksCmd command) {
WebTarget webTarget = getBaseResource().path("/networks");

if (command.getFilters() != null && !command.getFilters().isEmpty()) {
webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters())));
webTarget = webTarget.queryParam("filters", FiltersEncoder.jsonEncode(command.getFilters()));
}

LOGGER.trace("GET: {}", webTarget);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.github.dockerjava.netty.exec;

import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -27,7 +25,7 @@ protected ListVolumesResponse execute(ListVolumesCmd command) {
WebTarget webTarget = getBaseResource().path("/volumes");

if (command.getFilters() != null && !command.getFilters().isEmpty()) {
webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(FiltersEncoder.jsonEncode(command.getFilters())));
webTarget = webTarget.queryParam("filters", FiltersEncoder.jsonEncode(command.getFilters()));
}

LOGGER.trace("GET: {}", webTarget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,11 @@ protected DefaultDockerClientConfig config(String password) {
}

public void afterTest() {
LOG.info("======================= END OF AFTERTEST =======================");
LOG.debug("======================= END OF AFTERTEST =======================");
}

public void beforeMethod(Method method) {
LOG.info(String.format("################################## STARTING %s ##################################",
LOG.debug(String.format("################################## STARTING %s ##################################",
method.getName()));
}

Expand Down
15 changes: 14 additions & 1 deletion src/test/java/com/github/dockerjava/core/AuthConfigFileTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,23 @@ public void validJson() throws IOException {
expected.addConfig(authConfig1);
expected.addConfig(authConfig2);

Assert.assertEquals(runTest("validJson"), expected);
Assert.assertEquals(runTest("validJson.json"), expected);

}

@Test
public void validJsonWithUnknown() throws IOException {
AuthConfig authConfig1 = new AuthConfig()
.withEmail("foo@example.com")
.withUsername("foo")
.withPassword("bar")
.withRegistryAddress("quay.io");

AuthConfigFile expected = new AuthConfigFile();
expected.addConfig(authConfig1);
runTest("validJsonWithUnknown.json");
}

@Test
public void validLegacy() throws IOException {
AuthConfig authConfig = new AuthConfig()
Expand Down
Loading