diff --git a/docker/pom.xml b/docker/pom.xml index d179a4155..ae9c675c8 100644 --- a/docker/pom.xml +++ b/docker/pom.xml @@ -63,7 +63,12 @@ commons-compress 1.5 - + + com.google.auto.value + auto-value + 1.0-rc2 + provided + org.apache.jclouds.driver jclouds-sshj diff --git a/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java b/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java index 3ec7f5cb8..7b070fbfb 100644 --- a/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java +++ b/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java @@ -76,26 +76,25 @@ public ContainerToNodeMetadata(ProviderMetadata providerMetadata, Function getPrivateIpAddresses(Container container) { - if (container.getNetworkSettings() == null) return ImmutableList.of(); - return ImmutableList.of(container.getNetworkSettings().getIpAddress()); + if (container.networkSettings() == null) return ImmutableList.of(); + return ImmutableList.of(container.networkSettings().ipAddress()); } private List getPublicIpAddresses() { @@ -120,16 +119,16 @@ private List getPublicIpAddresses() { } protected static int getLoginPort(Container container) { - if (container.getNetworkSettings() != null) { - Map>> ports = container.getNetworkSettings().getPorts(); + if (container.networkSettings() != null) { + Map>> ports = container.networkSettings().ports(); if (ports != null && ports.containsKey("22/tcp")) { return Integer.parseInt(getOnlyElement(ports.get("22/tcp")).get("HostPort")); } // this is needed in case the container list is coming from listContainers - } else if (container.getPorts() != null) { - for (Port port : container.getPorts()) { - if (port.getPrivatePort() == 22) { - return port.getPublicPort(); + } else if (container.ports() != null) { + for (Port port : container.ports()) { + if (port.privatePort() == 22) { + return port.publicPort(); } } } diff --git a/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java b/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java index 4e3358df4..551c44104 100644 --- a/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java +++ b/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java @@ -44,7 +44,7 @@ public class ImageToImage implements Function { @Override public Status apply(final State state) { if (state == null) return Status.UNRECOGNIZED; - return state.isRunning() ? Status.RUNNING : Status.TERMINATED; + return state.running() ? Status.RUNNING : Status.TERMINATED; } } diff --git a/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java b/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java index d1c1260dd..fa83ffc8f 100644 --- a/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java +++ b/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java @@ -89,7 +89,7 @@ public NodeAndInitialCredentials createNodeWithGroupEncodedIntoName(S } Config.Builder containerConfigBuilder = Config.builder() - .imageId(imageId) + .image(imageId) .exposedPorts(exposedPorts); if (templateOptions.getCommands().isPresent()) { @@ -123,7 +123,7 @@ public NodeAndInitialCredentials createNodeWithGroupEncodedIntoName(S logger.debug(">> creating new container with containerConfig(%s)", containerConfig); Container container = api.getRemoteApi().createContainer(name, containerConfig); - logger.trace("<< container(%s)", container.getId()); + logger.trace("<< container(%s)", container.id()); HostConfig.Builder hostConfigBuilder = HostConfig.builder() .publishAllPorts(true) @@ -140,13 +140,13 @@ public NodeAndInitialCredentials createNodeWithGroupEncodedIntoName(S } HostConfig hostConfig = hostConfigBuilder.build(); - api.getRemoteApi().startContainer(container.getId(), hostConfig); - container = api.getRemoteApi().inspectContainer(container.getId()); - if (container.getState().getExitCode() != 0) { - destroyNode(container.getId()); - throw new IllegalStateException(String.format("Container %s has not started correctly", container.getId())); + api.getRemoteApi().startContainer(container.id(), hostConfig); + container = api.getRemoteApi().inspectContainer(container.id()); + if (container.state().exitCode() != 0) { + destroyNode(container.id()); + throw new IllegalStateException(String.format("Container %s has not started correctly", container.id())); } - return new NodeAndInitialCredentials(container, container.getId(), + return new NodeAndInitialCredentials(container, container.id(), LoginCredentials.builder().user(loginUser).password(loginUserPassword).build()); } @@ -166,9 +166,11 @@ public Set listImages() { Set images = Sets.newHashSet(); for (Image image : api.getRemoteApi().listImages()) { // less efficient than just listImages but returns richer json that needs repoTags coming from listImages - Image inspected = api.getRemoteApi().inspectImage(image.getId()); - if (inspected.getRepoTags().isEmpty()) { - inspected = Image.builder().fromImage(inspected).repoTags(image.getRepoTags()).build(); + Image inspected = api.getRemoteApi().inspectImage(image.id()); + if (inspected.repoTags().isEmpty()) { + inspected = Image.create(inspected.id(), inspected.parent(), inspected.created(), inspected.container(), + inspected.dockerVersion(), inspected.architecture(), inspected.os(), inspected.size(), + inspected.virtualSize(), image.repoTags()); } images.add(inspected); } @@ -182,7 +184,7 @@ public Image getImage(final String imageId) { @Override public boolean apply(Image input) { - return input.getId().equals(imageId); + return input.id().equals(imageId); } }, null); } @@ -192,7 +194,7 @@ public Iterable listNodes() { Set containers = Sets.newHashSet(); for (Container container : api.getRemoteApi().listContainers(ListContainerOptions.Builder.all(true))) { // less efficient than just listNodes but returns richer json - containers.add(api.getRemoteApi().inspectContainer(container.getId())); + containers.add(api.getRemoteApi().inspectContainer(container.id())); } return containers; } diff --git a/docker/src/main/java/org/jclouds/docker/config/DockerParserModule.java b/docker/src/main/java/org/jclouds/docker/config/DockerParserModule.java index 533184f82..ea777a419 100644 --- a/docker/src/main/java/org/jclouds/docker/config/DockerParserModule.java +++ b/docker/src/main/java/org/jclouds/docker/config/DockerParserModule.java @@ -16,47 +16,35 @@ */ package org.jclouds.docker.config; -import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.inject.AbstractModule; -import com.google.inject.Provides; -import org.jclouds.docker.domain.Container; +import java.lang.reflect.Field; + import org.jclouds.json.config.GsonModule; -import javax.inject.Singleton; -import java.lang.reflect.Type; -import java.util.Map; +import com.google.gson.FieldNamingPolicy; +import com.google.gson.FieldNamingStrategy; +import com.google.inject.AbstractModule; public class DockerParserModule extends AbstractModule { - - @Override - protected void configure() { + @Override protected void configure() { + bind(FieldNamingStrategy.class).toInstance(FIELD_NAMING_STRATEGY); bind(GsonModule.DateAdapter.class).to(GsonModule.Iso8601DateAdapter.class); } - @Provides - @Singleton - public Map provideCustomAdapterBindings() { - return new ImmutableMap.Builder() - .put(Container.class, new ContainerTypeAdapter()) - .build(); - } - - protected static class ContainerTypeAdapter implements JsonDeserializer { - - @Override - public Container deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws - JsonParseException { - Gson gson = new GsonBuilder().serializeNulls().create(); - final JsonObject jsonObject = json.getAsJsonObject(); - return gson.fromJson(jsonObject, Container.class); + /** When serializing, Most fields are UpperCamelCase, with some exceptions. */ + private static final FieldNamingStrategy FIELD_NAMING_STRATEGY = new FieldNamingStrategy() { + private final FieldNamingStrategy delegate = FieldNamingPolicy.UPPER_CAMEL_CASE; + + @Override public String translateName(Field f) { + String result = delegate.translateName(f); + // IP not Ip as code wins over docs https://github.com/docker/docker/blob/master/daemon/network_settings.go + if (result.equals("IpAddress")) { + return "IPAddress"; + } else if (result.equals("IpPrefixLen")) { + return "IPPrefixLen"; + } else if (result.equals("Ip")) { + return "IP"; + } + return result; } - } - + }; } diff --git a/docker/src/main/java/org/jclouds/docker/domain/Config.java b/docker/src/main/java/org/jclouds/docker/domain/Config.java index f5190fa60..396ab2f3f 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/Config.java +++ b/docker/src/main/java/org/jclouds/docker/domain/Config.java @@ -17,260 +17,78 @@ package org.jclouds.docker.domain; import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.docker.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; import java.util.List; import java.util.Map; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -import com.google.common.base.Objects; +import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.gson.annotations.SerializedName; - -public class Config { - - @SerializedName("Hostname") - private final String hostname; - @SerializedName("Domainname") - private final String domainName; - @SerializedName("User") - private final String user; - @SerializedName("Memory") - private final int memory; - @SerializedName("MemorySwap") - private final int memorySwap; - @SerializedName("CpuShares") - private final int cpuShares; - @SerializedName("AttachStdin") - private final boolean attachStdin; - @SerializedName("AttachStdout") - private final boolean attachStdout; - @SerializedName("AttachStderr") - private final boolean attachStderr; - @SerializedName("ExposedPorts") - private final Map exposedPorts; - @SerializedName("Tty") - private final boolean tty; - @SerializedName("OpenStdin") - private final boolean openStdin; - @SerializedName("StdinOnce") - private final boolean stdinOnce; - @SerializedName("Env") - private final List env; - @SerializedName("Cmd") - private final List cmd; - @SerializedName("Dns") - private final List dns; - @SerializedName("Image") - private final String imageId; - @SerializedName("Volumes") - private final Map volumes; - @SerializedName("VolumesFrom") - private final String volumesFrom; - @SerializedName("WorkingDir") - private final String workingDir; - @SerializedName("Entrypoint") - private final List entrypoint; - @SerializedName("NetworkDisabled") - private final boolean networkDisabled; - @SerializedName("OnBuild") - private final List onBuild; - - - @ConstructorProperties({ "Hostname", "Domainname", "User", "Memory", "MemorySwap", "CpuShares", "AttachStdin", - "AttachStdout", "AttachStderr", "ExposedPorts", "Tty", "OpenStdin", "StdinOnce", "Env", "Cmd", - "Dns", "Image", "Volumes", "VolumesFrom", "WorkingDir", "Entrypoint", "NetworkDisabled", "OnBuild" }) - protected Config(@Nullable String hostname, @Nullable String domainName, @Nullable String user, - int memory, int memorySwap, int cpuShares, boolean attachStdin, boolean attachStdout, - boolean attachStderr, Map exposedPorts, boolean tty, boolean openStdin, - boolean stdinOnce, @Nullable List env, @Nullable List cmd, - @Nullable List dns, String imageId, @Nullable Map volumes, - @Nullable String volumesFrom, @Nullable String workingDir, @Nullable List entrypoint, - @Nullable boolean networkDisabled, @Nullable List onBuild) { - this.hostname = hostname; - this.domainName = domainName; - this.user = user; - this.memory = checkNotNull(memory, "memory"); - this.memorySwap = checkNotNull(memorySwap, "memorySwap"); - this.cpuShares = checkNotNull(cpuShares, "cpuShares"); - this.attachStdin = checkNotNull(attachStdin, "attachStdin"); - this.attachStdout = checkNotNull(attachStdout, "attachStdout"); - this.attachStderr = checkNotNull(attachStderr, "attachStderr"); - this.exposedPorts = exposedPorts != null ? ImmutableMap.copyOf(exposedPorts) : ImmutableMap. of(); - this.tty = checkNotNull(tty, "tty"); - this.openStdin = checkNotNull(openStdin, "openStdin"); - this.stdinOnce = checkNotNull(stdinOnce, "stdinOnce"); - this.env = env != null ? ImmutableList.copyOf(env) : ImmutableList. of(); - this.cmd = cmd != null ? ImmutableList.copyOf(cmd) : ImmutableList. of(); - this.dns = dns != null ? ImmutableList.copyOf(dns) : ImmutableList. of(); - this.imageId = checkNotNull(imageId, "imageId"); - this.volumes = volumes != null ? ImmutableMap.copyOf(volumes) : ImmutableMap. of(); - this.volumesFrom = volumesFrom; - this.workingDir = workingDir; - this.entrypoint = entrypoint; - this.networkDisabled = networkDisabled; - this.onBuild = onBuild != null ? ImmutableList.copyOf(onBuild) : ImmutableList. of(); - } - - public String getHostname() { - return hostname; - } - public String getDomainName() { - return domainName; - } +@AutoValue +public abstract class Config { + @Nullable public abstract String hostname(); - public String getUser() { - return user; - } - - public int getMemory() { - return memory; - } + @Nullable public abstract String domainname(); - public int getMemorySwap() { - return memorySwap; - } + @Nullable public abstract String user(); - public int getCpuShares() { - return cpuShares; - } + public abstract int memory(); - public boolean isAttachStdin() { - return attachStdin; - } + public abstract int memorySwap(); - public boolean isAttachStdout() { - return attachStdout; - } + public abstract int cpuShares(); - public boolean isAttachStderr() { - return attachStderr; - } + public abstract boolean attachStdin(); - public Map getExposedPorts() { - return exposedPorts; - } + public abstract boolean attachStdout(); - public boolean isTty() { - return tty; - } + public abstract boolean attachStderr(); - public boolean isOpenStdin() { - return openStdin; - } + public abstract Map exposedPorts(); - public boolean isStdinOnce() { - return stdinOnce; - } + public abstract boolean tty(); - public List getEnv() { - return env; - } + public abstract boolean openStdin(); - public List getCmd() { - return cmd; - } + public abstract boolean stdinOnce(); - public List getDns() { - return dns; - } + public abstract List env(); - public String getImageId() { - return imageId; - } + public abstract List cmd(); - public Map getVolumes() { - return volumes; - } + public abstract List dns(); - public String getVolumesFrom() { - return volumesFrom; - } + public abstract String image(); - public String getWorkingDir() { - return workingDir; - } + public abstract Map volumes(); - public List getEntrypoint() { - return entrypoint; - } + @Nullable public abstract String volumesFrom(); - public boolean isNetworkDisabled() { - return networkDisabled; - } + @Nullable public abstract String workingDir(); - public List getOnBuild() { - return onBuild; - } + public abstract List entrypoint(); - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Config that = (Config) o; - - return Objects.equal(this.hostname, that.hostname) && - Objects.equal(this.domainName, that.domainName) && - Objects.equal(this.user, that.user) && - Objects.equal(this.memory, that.memory) && - Objects.equal(this.memorySwap, that.memorySwap) && - Objects.equal(this.cpuShares, that.cpuShares) && - Objects.equal(this.attachStdin, that.attachStdin) && - Objects.equal(this.attachStdout, that.attachStdout) && - Objects.equal(this.attachStderr, that.attachStderr) && - Objects.equal(this.exposedPorts, that.exposedPorts) && - Objects.equal(this.tty, that.tty) && - Objects.equal(this.openStdin, that.openStdin) && - Objects.equal(this.stdinOnce, that.stdinOnce) && - Objects.equal(this.env, that.env) && - Objects.equal(this.cmd, that.cmd) && - Objects.equal(this.dns, that.dns) && - Objects.equal(this.imageId, that.imageId) && - Objects.equal(this.volumes, that.volumes) && - Objects.equal(this.volumesFrom, that.volumesFrom) && - Objects.equal(this.workingDir, that.workingDir) && - Objects.equal(this.entrypoint, that.entrypoint) && - Objects.equal(this.onBuild, that.onBuild); - } + public abstract boolean networkDisabled(); - @Override - public int hashCode() { - return Objects.hashCode(hostname, domainName, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, - attachStderr, exposedPorts, tty, openStdin, stdinOnce, env, cmd, dns, imageId, volumes, - volumesFrom, workingDir, entrypoint, networkDisabled, onBuild); - } + public abstract List onBuild(); - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("hostname", hostname) - .add("domainName", domainName) - .add("user", user) - .add("memory", memory) - .add("memorySwap", memorySwap) - .add("cpuShares", cpuShares) - .add("attachStdin", attachStdin) - .add("attachStdout", attachStdout) - .add("attachStderr", attachStderr) - .add("exposedPorts", exposedPorts) - .add("tty", tty) - .add("openStdin", openStdin) - .add("stdinOnce", stdinOnce) - .add("env", env) - .add("cmd", cmd) - .add("dns", dns) - .add("imageId", imageId) - .add("volumes", volumes) - .add("volumesFrom", volumesFrom) - .add("workingDir", workingDir) - .add("entrypoint", entrypoint) - .add("networkDisabled", networkDisabled) - .add("onBuild", onBuild) - .toString(); + @SerializedNames( + { "Hostname", "Domainname", "User", "Memory", "MemorySwap", "CpuShares", "AttachStdin", "AttachStdout", + "AttachStderr", "ExposedPorts", "Tty", "OpenStdin", "StdinOnce", "Env", "Cmd", "Dns", "Image", "Volumes", + "VolumesFrom", "WorkingDir", "Entrypoint", "NetworkDisabled", "OnBuild" }) + public static Config create(String hostname, String domainname, String user, int memory, int memorySwap, + int cpuShares, boolean attachStdin, boolean attachStdout, boolean attachStderr, Map exposedPorts, + boolean tty, boolean openStdin, boolean stdinOnce, List env, List cmd, List dns, + String image, Map volumes, String volumesFrom, String workingDir, List entrypoint, + boolean networkDisabled, List onBuild) { + return new AutoValue_Config(hostname, domainname, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, + attachStderr, copyOf(exposedPorts), tty, openStdin, stdinOnce, copyOf(env), copyOf(cmd), copyOf(dns), image, + copyOf(volumes), volumesFrom, workingDir, copyOf(entrypoint), networkDisabled, copyOf(onBuild)); } public static Builder builder() { @@ -283,7 +101,7 @@ public Builder toBuilder() { public static final class Builder { private String hostname; - private String domainName; + private String domainname; private String user; private int memory; private int memorySwap; @@ -298,7 +116,7 @@ public static final class Builder { private boolean stdinOnce; private List cmd = ImmutableList.of(); private List dns = ImmutableList.of(); - private String imageId; + private String image; private Map volumes = ImmutableMap.of(); private String volumesFrom; private String workingDir; @@ -311,8 +129,8 @@ public Builder hostname(String hostname) { return this; } - public Builder domainName(String domainName) { - this.domainName = domainName; + public Builder domainname(String domainname) { + this.domainname = domainname; return this; } @@ -386,8 +204,8 @@ public Builder dns(List dns) { return this; } - public Builder imageId(String imageId) { - this.imageId = imageId; + public Builder image(String image) { + this.image = image; return this; } @@ -422,36 +240,19 @@ public Builder onBuild(List onBuild) { } public Config build() { - return new Config(hostname, domainName, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, - attachStderr, exposedPorts, tty, openStdin, stdinOnce, env, cmd, dns, imageId, volumes, - volumesFrom, workingDir, entrypoint, networkDisabled, onBuild); + return Config.create(hostname, domainname, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, + attachStderr, exposedPorts, tty, openStdin, stdinOnce, env, cmd, dns, image, volumes, volumesFrom, + workingDir, entrypoint, networkDisabled, onBuild); } public Builder fromConfig(Config in) { - return this - .hostname(in.getHostname()) - .domainName(in.getDomainName()) - .user(in.getUser()) - .memory(in.getMemory()) - .memorySwap(in.getMemorySwap()) - .cpuShares(in.getCpuShares()) - .attachStdin(in.isAttachStdin()) - .attachStdout(in.isAttachStdout()) - .attachStderr(in.isAttachStderr()) - .exposedPorts(in.getExposedPorts()) - .tty(in.isTty()) - .openStdin(in.isOpenStdin()) - .stdinOnce(in.isStdinOnce()) - .env(in.getEnv()) - .cmd(in.getCmd()) - .dns(in.getDns()) - .imageId(in.getImageId()) - .volumes(in.getVolumes()) - .volumesFrom(in.getVolumesFrom()) - .workingDir(in.getWorkingDir()) - .entrypoint(in.getEntrypoint()) - .networkDisabled(in.isNetworkDisabled()) - .onBuild(in.getOnBuild()); + return hostname(in.hostname()).domainname(in.domainname()).user(in.user()).memory(in.memory()) + .memorySwap(in.memorySwap()).cpuShares(in.cpuShares()).attachStdin(in.attachStdin()) + .attachStdout(in.attachStdout()).attachStderr(in.attachStderr()).exposedPorts(in.exposedPorts()) + .tty(in.tty()).openStdin(in.openStdin()).stdinOnce(in.stdinOnce()).env(in.env()).cmd(in.cmd()) + .dns(in.dns()).image(in.image()).volumes(in.volumes()).volumesFrom(in.volumesFrom()) + .workingDir(in.workingDir()).entrypoint(in.entrypoint()).networkDisabled(in.networkDisabled()) + .onBuild(in.onBuild()); } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/Container.java b/docker/src/main/java/org/jclouds/docker/domain/Container.java index efaf5b515..b06c3a56f 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/Container.java +++ b/docker/src/main/java/org/jclouds/docker/domain/Container.java @@ -16,222 +16,69 @@ */ package org.jclouds.docker.domain; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.gson.annotations.SerializedName; -import org.jclouds.javax.annotation.Nullable; +import static org.jclouds.docker.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; -import java.util.Arrays; import java.util.List; import java.util.Map; -import static com.google.common.base.Preconditions.checkNotNull; - -public class Container { - - @SerializedName("Id") - private final String id; - @SerializedName("Name") - private final String name; - @SerializedName("Created") - private final String created; - @SerializedName("Path") - private final String path; - @SerializedName("Args") - private final String[] args; - @SerializedName("Config") - private final Config containerConfig; - @SerializedName("State") - private final State state; - @SerializedName("Image") - private final String image; - @SerializedName("NetworkSettings") - private final NetworkSettings networkSettings; - @SerializedName("ResolvConfPath") - private final String resolvConfPath; - @SerializedName("Driver") - private final String driver; - @SerializedName("ExecDriver") - private final String execDriver; - @SerializedName("Volumes") - private final Map volumes; - @SerializedName("VolumesRW") - private final Map volumesRW; - @SerializedName("Command") - private final String command; - @SerializedName("Status") - private final String status; - @SerializedName("HostConfig") - private final HostConfig hostConfig; - @SerializedName("Ports") - private final List ports; - @SerializedName("HostnamePath") - private final String hostnamePath; - - @ConstructorProperties({ "Id", "Name", "Created", "Path", "Args", "Config", "State", "Image", "NetworkSettings", - "ResolvConfPath", "Driver", "ExecDriver", "Volumes", "VolumesRW", "Command", "Status", "HostConfig", - "Ports", "HostnamePath" }) - protected Container(String id, @Nullable String name, @Nullable String created, @Nullable String path, @Nullable String[] args, - @Nullable Config containerConfig, @Nullable State state, @Nullable String image, @Nullable NetworkSettings networkSettings, - @Nullable String resolvConfPath, @Nullable String driver, @Nullable String execDriver, @Nullable Map volumes, - @Nullable Map volumesRW, @Nullable String command, @Nullable String status, - @Nullable HostConfig hostConfig, @Nullable List ports, @Nullable String hostnamePath) { - this.id = checkNotNull(id, "id"); - this.name = name; - this.created = created; - this.path = path; - this.args = args; - this.containerConfig = containerConfig; - this.state = state; - this.image = image; - this.networkSettings = networkSettings; - this.resolvConfPath = resolvConfPath; - this.driver = driver; - this.execDriver = execDriver; - this.volumes = volumes != null ? ImmutableMap.copyOf(volumes) : ImmutableMap.of(); - this.volumesRW = volumesRW != null ? ImmutableMap.copyOf(volumesRW) : ImmutableMap.of(); - this.command = command; - this.status = status; - this.hostConfig = hostConfig; - this.ports = ports != null ? ImmutableList.copyOf(ports) : ImmutableList.of(); - this.hostnamePath = hostnamePath; - } +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; - public String getId() { - return id; - } +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; - public String getName() { - return name; - } +@AutoValue +public abstract class Container { + public abstract String id(); - public String getCreated() { - return created; - } + @Nullable public abstract String name(); - public String getPath() { - return path; - } + @Nullable public abstract String created(); - public String[] getArgs() { - return args; - } + @Nullable public abstract String path(); - public Config getContainerConfig() { - return containerConfig; - } + public abstract List args(); - public State getState() { - return state; - } + @Nullable public abstract Config config(); - public String getImage() { - return image; - } + @Nullable public abstract State state(); - public NetworkSettings getNetworkSettings() { - return networkSettings; - } + @Nullable public abstract String image(); - public String getResolvConfPath() { - return resolvConfPath; - } + @Nullable public abstract NetworkSettings networkSettings(); - public String getDriver() { - return driver; - } + @Nullable public abstract String resolvConfPath(); - public String getExecDriver() { - return execDriver; - } + @Nullable public abstract String driver(); - public Map getVolumes() { - return volumes; - } - - public Map getvolumesRW() { - return volumesRW; - } + @Nullable public abstract String execDriver(); - public String getCommand() { - return command; - } + public abstract Map volumes(); - public String getStatus() { - return status; - } + public abstract Map volumesRW(); - public HostConfig getHostConfig() { - return hostConfig; - } + @Nullable public abstract String command(); - public List getPorts() { - return ports; - } + @Nullable public abstract String status(); - public String getHostnamePath() { - return hostnamePath; - } + @Nullable public abstract HostConfig hostConfig(); - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Container that = (Container) o; - - return Objects.equal(this.id, that.id) && - Objects.equal(this.name, that.name) && - Objects.equal(this.created, that.created) && - Objects.equal(this.path, that.path) && - Arrays.equals(this.args, that.args) && - Objects.equal(this.containerConfig, that.containerConfig) && - Objects.equal(this.state, that.state) && - Objects.equal(this.image, that.image) && - Objects.equal(this.networkSettings, that.networkSettings) && - Objects.equal(this.resolvConfPath, that.resolvConfPath) && - Objects.equal(this.driver, that.driver) && - Objects.equal(this.execDriver, that.execDriver) && - Objects.equal(this.volumes, that.volumes) && - Objects.equal(this.volumesRW, that.volumesRW) && - Objects.equal(this.command, that.command) && - Objects.equal(this.status, that.status) && - Objects.equal(this.hostConfig, that.hostConfig) && - Objects.equal(this.ports, that.ports) && - Objects.equal(this.hostnamePath, that.hostnamePath); - } + public abstract List ports(); - @Override - public int hashCode() { - return Objects.hashCode(id, name, created, path, args, containerConfig, state, image, networkSettings, resolvConfPath, - driver, execDriver, volumes, volumesRW, command, status, hostConfig, ports, hostnamePath); - } + @Nullable public abstract String hostnamePath(); - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("id", id) - .add("name", name) - .add("created", created) - .add("path", path) - .add("args", args) - .add("containerConfig", containerConfig) - .add("state", state) - .add("image", image) - .add("networkSettings", networkSettings) - .add("resolvConfPath", resolvConfPath) - .add("driver", driver) - .add("execDriver", execDriver) - .add("volumes", volumes) - .add("volumesRW", volumesRW) - .add("command", command) - .add("status", status) - .add("hostConfig", hostConfig) - .add("ports", ports) - .add("hostnamePath", hostnamePath) - .toString(); + @SerializedNames( + { "Id", "Name", "Created", "Path", "Args", "Config", "State", "Image", "NetworkSettings", "ResolvConfPath", + "Driver", "ExecDriver", "Volumes", "VolumesRW", "Command", "Status", "HostConfig", "Ports", + "HostnamePath" }) + public static Container create(String id, String name, String created, String path, List args, Config config, + State state, String image, NetworkSettings networkSettings, String resolvConfPath, String driver, + String execDriver, Map volumes, Map volumesRW, String command, String status, + HostConfig hostConfig, List ports, String hostnamePath) { + return new AutoValue_Container(id, name, created, path, copyOf(args), config, state, image, networkSettings, + resolvConfPath, driver, execDriver, copyOf(volumes), copyOf(volumesRW), command, status, hostConfig, + copyOf(ports), hostnamePath); } public static Builder builder() { @@ -248,8 +95,8 @@ public static final class Builder { private String name; private String created; private String path; - private String[] args; - private Config containerConfig; + private List args; + private Config config; private State state; private String image; private NetworkSettings networkSettings; @@ -284,13 +131,13 @@ public Builder path(String path) { return this; } - public Builder args(String[] args) { + public Builder args(List args) { this.args = args; return this; } - public Builder containerConfig(Config containerConfig) { - this.containerConfig = containerConfig; + public Builder config(Config config) { + this.config = config; return this; } @@ -360,31 +207,16 @@ public Builder hostnamePath(String hostnamePath) { } public Container build() { - return new Container(id, name, created, path, args, containerConfig, state, image, networkSettings, resolvConfPath, + return Container.create(id, name, created, path, args, config, state, image, networkSettings, resolvConfPath, driver, execDriver, volumes, volumesRW, command, status, hostConfig, ports, hostnamePath); } public Builder fromContainer(Container in) { - return this - .id(in.getId()) - .name(in.getName()) - .created(in.getCreated()) - .path(in.getPath()) - .args(in.getArgs()) - .containerConfig(in.getContainerConfig()) - .state(in.getState()) - .image(in.getImage()) - .networkSettings(in.getNetworkSettings()) - .resolvConfPath(in.getResolvConfPath()) - .driver(in.getDriver()) - .execDriver(in.getExecDriver()) - .volumes(in.getVolumes()) - .volumesRW(in.getvolumesRW()) - .command(in.getCommand()) - .status(in.getStatus()) - .hostConfig(in.getHostConfig()) - .ports(in.getPorts()) - .hostnamePath(in.getHostnamePath()); + return this.id(in.id()).name(in.name()).created(in.created()).path(in.path()).args(in.args()) + .config(in.config()).state(in.state()).image(in.image()).networkSettings(in.networkSettings()) + .resolvConfPath(in.resolvConfPath()).driver(in.driver()).execDriver(in.execDriver()) + .volumes(in.volumes()).volumesRW(in.volumesRW()).command(in.command()).status(in.status()) + .hostConfig(in.hostConfig()).ports(in.ports()).hostnamePath(in.hostnamePath()); } } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java b/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java index b7a831a64..413c84f49 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java +++ b/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java @@ -16,91 +16,22 @@ */ package org.jclouds.docker.domain; -import static com.google.common.base.Preconditions.checkNotNull; -import java.beans.ConstructorProperties; -import java.util.Set; +import static org.jclouds.docker.internal.NullSafeCopies.copyOf; -import org.jclouds.javax.annotation.Nullable; +import java.util.List; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSet; -import com.google.gson.annotations.SerializedName; +import org.jclouds.json.SerializedNames; -public class ExposedPorts { +import com.google.auto.value.AutoValue; - @SerializedName("PortAndProtocol") - private final String portAndProtocol; - @SerializedName("HostPorts") - private final Set hostPorts; +@AutoValue +public abstract class ExposedPorts { + public abstract String portAndProtocol(); - @ConstructorProperties({ "PortAndProtocol", "HostPorts" }) - protected ExposedPorts(String portAndProtocol, @Nullable Set hostPorts) { - this.portAndProtocol = checkNotNull(portAndProtocol, "portAndProtocol"); - this.hostPorts = hostPorts != null ? ImmutableSet.copyOf(hostPorts) : ImmutableSet. of(); - } - - public String getPortAndProtocol() { - return portAndProtocol; - } - - public Set getHostPorts() { - return hostPorts; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ExposedPorts that = (ExposedPorts) o; - - return Objects.equal(this.portAndProtocol, that.portAndProtocol) && - Objects.equal(this.hostPorts, that.hostPorts); - } - - @Override - public int hashCode() { - return Objects.hashCode(portAndProtocol, hostPorts); - } - - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("portAndProtocol", portAndProtocol) - .add("hostPorts", hostPorts) - .toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromExposedPorts(this); - } - - public static final class Builder { - - private String portAndProtocol; - private Set hostPorts = ImmutableSet.of(); - - public Builder portAndProtocol(String portAndProtocol) { - this.portAndProtocol = portAndProtocol; - return this; - } - - public Builder hostPorts(Set hostPorts) { - this.hostPorts = ImmutableSet.copyOf(checkNotNull(hostPorts, "hostPorts")); - return this; - } - - public ExposedPorts build() { - return new ExposedPorts(portAndProtocol, hostPorts); - } + public abstract List hostPorts(); - public Builder fromExposedPorts(ExposedPorts in) { - return this.portAndProtocol(in.getPortAndProtocol()) - .hostPorts(in.getHostPorts()); - } + @SerializedNames({ "PortAndProtocol", "HostPorts" }) + public static ExposedPorts create(String portAndProtocol, List hostPorts) { + return new AutoValue_ExposedPorts(portAndProtocol, copyOf(hostPorts)); } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java b/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java index 275961fe9..757157c45 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java +++ b/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java @@ -17,136 +17,47 @@ package org.jclouds.docker.domain; import static com.google.common.base.Preconditions.checkNotNull; -import java.beans.ConstructorProperties; +import static org.jclouds.docker.internal.NullSafeCopies.copyOf; + import java.util.List; import java.util.Map; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; +import com.google.auto.value.AutoValue; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.gson.annotations.SerializedName; - -public class HostConfig { - - @SerializedName("ContainerIDFile") - private final String containerIDFile; - @SerializedName("Binds") - private final List binds; - @SerializedName("LxcConf") - private final Map lxcConf; - @SerializedName("Privileged") - private final boolean privileged; - @SerializedName("Dns") - private final String dns; - @SerializedName("DnsSearch") - private final String dnsSearch; - @SerializedName("PortBindings") - private final Map>> portBindings; - @SerializedName("Links") - private final List links; - @SerializedName("PublishAllPorts") - private final boolean publishAllPorts; - @SerializedName("VolumesFrom") - private final List volumesFrom; - - @ConstructorProperties({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings", - "Links", "PublishAllPorts", "VolumesFrom" }) - protected HostConfig(@Nullable String containerIDFile, @Nullable List binds, - Map lxcConf, boolean privileged, @Nullable String dns, - @Nullable String dnsSearch, @Nullable Map>> portBindings, - @Nullable List links, boolean publishAllPorts, @Nullable List volumesFrom) { - this.containerIDFile = containerIDFile; - this.binds = binds != null ? ImmutableList.copyOf(binds) : ImmutableList. of(); - this.lxcConf = lxcConf != null ? ImmutableMap.copyOf(lxcConf) : ImmutableMap. of(); - this.privileged = checkNotNull(privileged, "privileged"); - this.dns = dns; - this.dnsSearch = dnsSearch; - this.portBindings = portBindings != null ? ImmutableMap.copyOf(portBindings) : ImmutableMap.>> of(); - this.links = links != null ? ImmutableList.copyOf(links) : ImmutableList. of(); - this.publishAllPorts = checkNotNull(publishAllPorts, "publishAllPorts"); - this.volumesFrom = volumesFrom != null ? ImmutableList.copyOf(volumesFrom) : ImmutableList. of(); - } - - public String getContainerIDFile() { - return containerIDFile; - } - - public List getBinds() { - return binds; - } - public Map getLxcConf() { - return lxcConf; - } +@AutoValue +public abstract class HostConfig { + @Nullable public abstract String containerIDFile(); - public boolean isPrivileged() { - return privileged; - } + public abstract List binds(); - public String getDns() { return dns; } + public abstract Map lxcConf(); - public String getDnsSearch() { return dnsSearch; } + public abstract boolean privileged(); - public Map>> getPortBindings() { - return portBindings; - } + @Nullable public abstract String dns(); - @Nullable - public List getLinks() { - return links; - } + @Nullable public abstract String dnsSearch(); - public boolean isPublishAllPorts() { - return publishAllPorts; - } + public abstract Map>> portBindings(); - public List getVolumesFrom() { - return volumesFrom; - } + public abstract List links(); - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - HostConfig that = (HostConfig) o; - - return Objects.equal(this.containerIDFile, that.containerIDFile) && - Objects.equal(this.binds, that.binds) && - Objects.equal(this.lxcConf, that.lxcConf) && - Objects.equal(this.privileged, that.privileged) && - Objects.equal(this.dns, that.dns) && - Objects.equal(this.dnsSearch, that.dnsSearch) && - Objects.equal(this.portBindings, that.portBindings) && - Objects.equal(this.links, that.links) && - Objects.equal(this.publishAllPorts, that.publishAllPorts) && - Objects.equal(this.volumesFrom, that.volumesFrom); - } + public abstract boolean publishAllPorts(); - @Override - public int hashCode() { - return Objects.hashCode(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links, - publishAllPorts, volumesFrom); - } + public abstract List volumesFrom(); - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("containerIDFile", containerIDFile) - .add("binds", binds) - .add("lxcConf", lxcConf) - .add("privileged", privileged) - .add("dns", dns) - .add("dnsSearch", dnsSearch) - .add("portBindings", portBindings) - .add("links", links) - .add("publishAllPorts", publishAllPorts) - .add("volumesFrom", volumesFrom) - .toString(); + @SerializedNames({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings", + "Links", "PublishAllPorts", "VolumesFrom" }) + public static HostConfig create(String containerIDFile, List binds, Map lxcConf, + boolean privileged, String dns, String dnsSearch, Map>> portBindings, + List links, boolean publishAllPorts, List volumesFrom) { + return new AutoValue_HostConfig(containerIDFile, copyOf(binds), copyOf(lxcConf), privileged, dns, dnsSearch, + copyOf(portBindings), copyOf(links), publishAllPorts, copyOf(volumesFrom)); } public static Builder builder() { @@ -221,22 +132,14 @@ public Builder volumesFrom(List volumesFrom) { } public HostConfig build() { - return new HostConfig(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links, - publishAllPorts, volumesFrom); + return HostConfig.create(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links, + publishAllPorts, volumesFrom); } public Builder fromHostConfig(HostConfig in) { - return this - .containerIDFile(in.getContainerIDFile()) - .binds(in.getBinds()) - .lxcConf(in.getLxcConf()) - .privileged(in.isPrivileged()) - .dns(in.getDns()) - .dnsSearch(in.getDnsSearch()) - .links(in.getLinks()) - .portBindings(in.getPortBindings()) - .publishAllPorts(in.isPublishAllPorts()) - .volumesFrom(in.getVolumesFrom()); + return this.containerIDFile(in.containerIDFile()).binds(in.binds()).lxcConf(in.lxcConf()) + .privileged(in.privileged()).dns(in.dns()).dnsSearch(in.dnsSearch()).links(in.links()) + .portBindings(in.portBindings()).publishAllPorts(in.publishAllPorts()).volumesFrom(in.volumesFrom()); } } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/Image.java b/docker/src/main/java/org/jclouds/docker/domain/Image.java index 186ece32f..99b25943e 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/Image.java +++ b/docker/src/main/java/org/jclouds/docker/domain/Image.java @@ -16,224 +16,42 @@ */ package org.jclouds.docker.domain; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableList; -import com.google.gson.annotations.SerializedName; -import org.jclouds.javax.annotation.Nullable; +import static org.jclouds.docker.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; import java.util.List; -import static com.google.common.base.Preconditions.checkNotNull; - -public class Image { - - @SerializedName("Id") - private final String id; - @SerializedName("Parent") - private final String parent; - @SerializedName("Created") - private final String created; - @SerializedName("Container") - private final String container; - @SerializedName("DockerVersion") - private final String dockerVersion; - @SerializedName("Architecture") - private final String architecture; - @SerializedName("Os") - private final String os; - @SerializedName("Size") - private final long size; - @SerializedName("VirtualSize") - private final long virtualSize; - @SerializedName("RepoTags") - private final List repoTags; - - @ConstructorProperties({ "Id", "Parent", "Created", "Container", "DockerVersion", "Architecture", "Os", "Size", - "VirtualSize", "RepoTags", "Architecture" }) - protected Image(String id, @Nullable String parent, @Nullable String created, @Nullable String container, - @Nullable String dockerVersion, @Nullable String architecture, @Nullable String os, long size, - @Nullable long virtualSize, @Nullable List repoTags) { - this.id = checkNotNull(id, "id"); - this.parent = parent; - this.created = created; - this.container = container; - this.dockerVersion = dockerVersion; - this.architecture = architecture; - this.os = os; - this.size = size; - this.virtualSize = virtualSize; - this.repoTags = repoTags != null ? ImmutableList.copyOf(repoTags) : ImmutableList. of(); - } - - public String getId() { - return id; - } - - public String getParent() { - return parent; - } - - public String getCreated() { - return created; - } - - public String getContainer() { - return container; - } - - public String getDockerVersion() { - return dockerVersion; - } - - public String getArchitecture() { - return architecture; - } - - public String getOs() { - return os; - } - - public long getSize() { - return size; - } - - public long getVirtualSize() { - return virtualSize; - } - - public List getRepoTags() { - return repoTags; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Image that = (Image) o; - - return Objects.equal(this.id, that.id) && - Objects.equal(this.parent, that.parent) && - Objects.equal(this.created, that.created) && - Objects.equal(this.container, that.container) && - Objects.equal(this.dockerVersion, that.dockerVersion) && - Objects.equal(this.architecture, that.architecture) && - Objects.equal(this.os, that.os) && - Objects.equal(this.size, that.size) && - Objects.equal(this.virtualSize, that.virtualSize); - } - - @Override - public int hashCode() { - return Objects.hashCode(id, parent, created, container, dockerVersion, architecture, os, size, - virtualSize); - } - - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("id", id) - .add("parent", parent) - .add("created", created) - .add("container", container) - .add("dockerVersion", dockerVersion) - .add("architecture", architecture) - .add("os", os) - .add("size", size) - .add("virtualSize", virtualSize) - .add("repoTags", repoTags) - .toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromImage(this); - } - - public static final class Builder { - - private String id; - private String parent; - private String created; - private String container; - private String dockerVersion; - private String architecture; - private String os; - private long size; - private long virtualSize; - private List repoTags = ImmutableList.of(); +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; - public Builder id(String id) { - this.id = id; - return this; - } +import com.google.auto.value.AutoValue; - public Builder parent(String parent) { - this.parent = parent; - return this; - } +@AutoValue +public abstract class Image { + public abstract String id(); - public Builder created(String created) { - this.created = created; - return this; - } + @Nullable public abstract String parent(); - public Builder container(String container) { - this.container = container; - return this; - } + @Nullable public abstract String created(); - public Builder dockerVersion(String dockerVersion) { - this.dockerVersion = dockerVersion; - return this; - } + @Nullable public abstract String container(); - public Builder architecture(String architecture) { - this.architecture = architecture; - return this; - } + @Nullable public abstract String dockerVersion(); - public Builder os(String os) { - this.os = os; - return this; - } + @Nullable public abstract String architecture(); - public Builder size(long size) { - this.size = size; - return this; - } + @Nullable public abstract String os(); - public Builder virtualSize(long virtualSize) { - this.virtualSize = virtualSize; - return this; - } + public abstract long size(); - public Builder repoTags(List repoTags) { - this.repoTags = ImmutableList.copyOf(checkNotNull(repoTags, "repoTags")); - return this; - } + @Nullable public abstract long virtualSize(); - public Image build() { - return new Image(id, parent, created, container, dockerVersion, architecture, os, size, - virtualSize, repoTags); - } + public abstract List repoTags(); - public Builder fromImage(Image in) { - return this - .id(in.getId()) - .parent(in.getParent()) - .created(in.getCreated()) - .container(in.getContainer()) - .dockerVersion(in.getDockerVersion()) - .architecture(in.getArchitecture()) - .os(in.getOs()) - .size(in.getSize()) - .virtualSize(in.getVirtualSize()); - //DO NOT add .repoTags(in.getRepoTags()); - } + @SerializedNames({ "Id", "Parent", "Created", "Container", "DockerVersion", "Architecture", "Os", "Size", + "VirtualSize", "RepoTags", "Architecture" }) + public static Image create(String id, String parent, String created, String container, String dockerVersion, + String architecture, String os, long size, long virtualSize, List repoTags) { + return new AutoValue_Image(id, parent, created, container, dockerVersion, architecture, os, size, virtualSize, + copyOf(repoTags)); } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java index 23f3fbede..f99bd7f3d 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java +++ b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java @@ -16,97 +16,36 @@ */ package org.jclouds.docker.domain; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableMap; -import com.google.gson.annotations.SerializedName; -import org.jclouds.javax.annotation.Nullable; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.docker.internal.NullSafeCopies.copyOf; -import java.beans.ConstructorProperties; import java.util.List; import java.util.Map; -import static com.google.common.base.Preconditions.checkNotNull; - -public class NetworkSettings { - - @SerializedName("IPAddress") - private final String ipAddress; - @SerializedName("IPPrefixLen") - private final int ipPrefixLen; - @SerializedName("Gateway") - private final String gateway; - @SerializedName("Bridge") - private final String bridge; - @SerializedName("PortMapping") - private final String portMapping; - @SerializedName("Ports") - private final Map>> ports; - - @ConstructorProperties({ "IPAddress", "IPPrefixLen", "Gateway", "Bridge", "PortMapping", "Ports" }) - protected NetworkSettings(String ipAddress, int ipPrefixLen, String gateway, String bridge, - @Nullable String portMapping, @Nullable Map>> ports) { - this.ipAddress = checkNotNull(ipAddress, "ipAddress"); - this.ipPrefixLen = checkNotNull(ipPrefixLen, "ipPrefixLen"); - this.gateway = checkNotNull(gateway, "gateway"); - this.bridge = checkNotNull(bridge, "bridge"); - this.portMapping = portMapping; - this.ports = ports != null ? ImmutableMap.copyOf(ports) : ImmutableMap.>> of(); - } - - public String getIpAddress() { - return ipAddress; - } - - public int getIpPrefixLen() { - return ipPrefixLen; - } - - public String getGateway() { - return gateway; - } +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; - public String getBridge() { - return bridge; - } +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableMap; - public String getPortMapping() { - return portMapping; - } +@AutoValue +public abstract class NetworkSettings { + public abstract String ipAddress(); - public Map>> getPorts() { - return ports; - } + public abstract int ipPrefixLen(); - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + public abstract String gateway(); - NetworkSettings that = (NetworkSettings) o; + public abstract String bridge(); - return Objects.equal(this.ipAddress, that.ipAddress) && - Objects.equal(this.ipPrefixLen, that.ipPrefixLen) && - Objects.equal(this.gateway, that.gateway) && - Objects.equal(this.bridge, that.bridge) && - Objects.equal(this.portMapping, that.portMapping) && - Objects.equal(this.ports, that.ports); - } + @Nullable public abstract String portMapping(); - @Override - public int hashCode() { - return Objects.hashCode(ipAddress, ipPrefixLen, gateway, bridge, portMapping, ports); - } + public abstract Map>> ports(); - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("ipAddress", ipAddress) - .add("ipPrefixLen", ipPrefixLen) - .add("gateway", gateway) - .add("bridge", bridge) - .add("portMapping", portMapping) - .add("ports", ports) - .toString(); + @SerializedNames({ "IPAddress", "IPPrefixLen", "Gateway", "Bridge", "PortMapping", "Ports" }) + public static NetworkSettings create(String ipAddress, int ipPrefixLen, String gateway, String bridge, + String portMapping, Map>> ports) { + return new AutoValue_NetworkSettings(ipAddress, ipPrefixLen, gateway, bridge, portMapping, copyOf(ports)); } public static Builder builder() { @@ -157,19 +96,13 @@ public Builder ports(Map>> ports) { } public NetworkSettings build() { - return new NetworkSettings(ipAddress, ipPrefixLen, gateway, bridge, portMapping, ports); + return NetworkSettings.create(ipAddress, ipPrefixLen, gateway, bridge, portMapping, ports); } public Builder fromNetworkSettings(NetworkSettings in) { - return this - .ipAddress(in.getIpAddress()) - .ipPrefixLen(in.getIpPrefixLen()) - .gateway(in.getGateway()) - .bridge(in.getBridge()) - .portMapping(in.getPortMapping()) - .ports(in.getPorts()); + return this.ipAddress(in.ipAddress()).ipPrefixLen(in.ipPrefixLen()).gateway(in.gateway()).bridge(in.bridge()) + .portMapping(in.portMapping()).ports(in.ports()); } - } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/Port.java b/docker/src/main/java/org/jclouds/docker/domain/Port.java index b49dfa694..0522be185 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/Port.java +++ b/docker/src/main/java/org/jclouds/docker/domain/Port.java @@ -16,73 +16,22 @@ */ package org.jclouds.docker.domain; -import com.google.common.base.Objects; -import com.google.gson.annotations.SerializedName; +import org.jclouds.json.SerializedNames; -import java.beans.ConstructorProperties; +import com.google.auto.value.AutoValue; -import static com.google.common.base.Preconditions.checkNotNull; +@AutoValue +public abstract class Port { + public abstract String ip(); -public class Port { + public abstract int privatePort(); - @SerializedName("PrivatePort") - private final int privatePort; - @SerializedName("PublicPort") - private final int publicPort; - @SerializedName("Type") - private final String type; - @SerializedName("IP") - private final String ip; + public abstract int publicPort(); - @ConstructorProperties({ "PrivatePort", "PublicPort", "Type", "IP" }) - protected Port(int privatePort, int publicPort, String type, String ip) { - this.privatePort = checkNotNull(privatePort, "privatePort"); - this.publicPort = checkNotNull(publicPort, "publicPort"); - this.type = checkNotNull(type, "type"); - this.ip = checkNotNull(ip, "ip"); - } - - public int getPrivatePort() { - return privatePort; - } - - public int getPublicPort() { - return publicPort; - } - - public String getType() { - return type; - } - - public String getIp() { - return ip; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Port that = (Port) o; - - return Objects.equal(this.privatePort, that.privatePort) && - Objects.equal(this.publicPort, that.publicPort) && - Objects.equal(this.type, that.type) && - Objects.equal(this.ip, that.ip); - } - - @Override - public int hashCode() { - return Objects.hashCode(privatePort, publicPort, type, ip); - } + public abstract String type(); - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("privatePort", privatePort) - .add("publicPort", publicPort) - .add("type", type) - .add("ip", ip) - .toString(); + @SerializedNames({ "IP", "PrivatePort", "PublicPort", "Type" }) + public static Port create(String ip, int privatePort, int publicPort, String type) { + return new AutoValue_Port(ip, privatePort, publicPort, type); } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/State.java b/docker/src/main/java/org/jclouds/docker/domain/State.java index ac1ba85e0..c0a858602 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/State.java +++ b/docker/src/main/java/org/jclouds/docker/domain/State.java @@ -16,151 +16,27 @@ */ package org.jclouds.docker.domain; -import static com.google.common.base.Preconditions.checkNotNull; -import java.beans.ConstructorProperties; +import org.jclouds.json.SerializedNames; -import com.google.common.base.Objects; -import com.google.gson.annotations.SerializedName; +import com.google.auto.value.AutoValue; -public class State { - @SerializedName("Pid") - private final int pid; - @SerializedName("Running") - private final boolean running; - @SerializedName("ExitCode") - private final int exitCode; - @SerializedName("StartedAt") - private final String startedAt; - @SerializedName("FinishedAt") - private final String finishedAt; - @SerializedName("Ghost") - private final boolean ghost; +@AutoValue +public abstract class State { + public abstract int pid(); - @ConstructorProperties({ "Pid", "Running", "ExitCode", "StartedAt", "FinishedAt", "Ghost" }) - protected State(int pid, boolean running, int exitCode, String startedAt, String finishedAt, boolean ghost) { - this.pid = checkNotNull(pid, "pid"); - this.running = checkNotNull(running, "running"); - this.exitCode = checkNotNull(exitCode, "exitCode"); - this.startedAt = checkNotNull(startedAt, "startedAt"); - this.finishedAt = checkNotNull(finishedAt, "finishedAt"); - this.ghost = checkNotNull(ghost, "ghost"); - } - - public int getPid() { - return pid; - } - - public boolean isRunning() { - return running; - } - - public int getExitCode() { - return exitCode; - } - - public String getStartedAt() { - return startedAt; - } - - public String getFinishedAt() { - return finishedAt; - } - - public boolean isGhost() { - return ghost; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - State that = (State) o; - - return Objects.equal(this.pid, that.pid) && - Objects.equal(this.running, that.running) && - Objects.equal(this.exitCode, that.exitCode) && - Objects.equal(this.startedAt, that.startedAt) && - Objects.equal(this.finishedAt, that.finishedAt) && - Objects.equal(this.ghost, that.ghost); - } - - @Override - public int hashCode() { - return Objects.hashCode(pid, running, exitCode, startedAt, finishedAt, ghost); - } - - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("pid", pid) - .add("running", running) - .add("exitCode", exitCode) - .add("startedAt", startedAt) - .add("finishedAt", finishedAt) - .add("ghost", ghost) - .toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromState(this); - } - - public static final class Builder { - - private int pid; - private boolean running; - private int exitCode; - private String startedAt; - private String finishedAt; - private boolean ghost; - - public Builder pid(int pid) { - this.pid = pid; - return this; - } - - public Builder running(boolean running) { - this.running = running; - return this; - } - - public Builder exitCode(int exitCode) { - this.exitCode = exitCode; - return this; - } + public abstract boolean running(); - public Builder startedAt(String startedAt) { - this.startedAt = startedAt; - return this; - } + public abstract int exitCode(); - public Builder finishedAt(String finishedAt) { - this.finishedAt = finishedAt; - return this; - } + public abstract String startedAt(); - public Builder ghost(boolean ghost) { - this.ghost = ghost; - return this; - } + public abstract String finishedAt(); - public State build() { - return new State(pid, running, exitCode, startedAt, finishedAt, ghost); - } + public abstract boolean ghost(); - public Builder fromState(State in) { - return this - .pid(in.getPid()) - .running(in.isRunning()) - .exitCode(in.getExitCode()) - .startedAt(in.getStartedAt()) - .finishedAt(in.getFinishedAt()) - .ghost(in.isGhost()); - } + @SerializedNames({ "Pid", "Running", "ExitCode", "StartedAt", "FinishedAt", "Ghost" }) + public static State create(int pid, boolean running, int exitCode, String startedAt, String finishedAt, + boolean ghost) { + return new AutoValue_State(pid, running, exitCode, startedAt, finishedAt, ghost); } } diff --git a/docker/src/main/java/org/jclouds/docker/domain/Version.java b/docker/src/main/java/org/jclouds/docker/domain/Version.java index 445a225c3..ee0ba1972 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/Version.java +++ b/docker/src/main/java/org/jclouds/docker/domain/Version.java @@ -16,151 +16,27 @@ */ package org.jclouds.docker.domain; -import static com.google.common.base.Preconditions.checkNotNull; -import java.beans.ConstructorProperties; +import org.jclouds.json.SerializedNames; -import com.google.common.base.Objects; -import com.google.gson.annotations.SerializedName; +import com.google.auto.value.AutoValue; -public class Version { - @SerializedName("Arch") - private final String arch; - @SerializedName("GitCommit") - private final String gitCommit; - @SerializedName("GoVersion") - private final String goVersion; - @SerializedName("KernelVersion") - private final String kernelVersion; - @SerializedName("Os") - private final String os; - @SerializedName("Version") - private final String version; +@AutoValue +public abstract class Version { + public abstract String arch(); - @ConstructorProperties({ "Arch", "GitCommit", "GoVersion", "KernelVersion", "Os", "Version" }) - protected Version(String arch, String gitCommit, String goVersion, String kernelVersion, String os, String version) { - this.arch = checkNotNull(arch, "arch"); - this.gitCommit = checkNotNull(gitCommit, "gitCommit"); - this.goVersion = checkNotNull(goVersion, "goVersion"); - this.kernelVersion = checkNotNull(kernelVersion, "kernelVersion"); - this.os = checkNotNull(os, "os"); - this.version = checkNotNull(version, "version"); - } - - public String getArch() { - return arch; - } - - public String getGitCommit() { - return gitCommit; - } - - public String getGoVersion() { - return goVersion; - } - - public String getKernelVersion() { - return kernelVersion; - } - - public String getOs() { - return os; - } - - public String getVersion() { - return version; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Version that = (Version) o; - - return Objects.equal(this.arch, that.arch) && - Objects.equal(this.gitCommit, that.gitCommit) && - Objects.equal(this.goVersion, that.goVersion) && - Objects.equal(this.kernelVersion, that.kernelVersion) && - Objects.equal(this.os, that.os) && - Objects.equal(this.version, that.version); - } - - @Override - public int hashCode() { - return Objects.hashCode(arch, gitCommit, goVersion, kernelVersion, os, version); - } - - @Override - public String toString() { - return Objects.toStringHelper(this) - .add("arch", arch) - .add("gitCommit", gitCommit) - .add("goVersion", goVersion) - .add("kernelVersion", kernelVersion) - .add("os", os) - .add("version", version) - .toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public Builder toBuilder() { - return builder().fromVersion(this); - } - - public static final class Builder { - - private String arch; - private String gitCommit; - private String goVersion; - private String kernelVersion; - private String os; - private String version; - - public Builder arch(String arch) { - this.arch = arch; - return this; - } - - public Builder gitCommit(String gitCommit) { - this.gitCommit = gitCommit; - return this; - } - - public Builder goVersion(String goVersion) { - this.goVersion = goVersion; - return this; - } + public abstract String gitCommit(); - public Builder kernelVersion(String kernelVersion) { - this.kernelVersion = kernelVersion; - return this; - } + public abstract String goVersion(); - public Builder os(String os) { - this.os = os; - return this; - } + public abstract String kernelVersion(); - public Builder version(String version) { - this.version = version; - return this; - } + public abstract String os(); - public Version build() { - return new Version(arch, gitCommit, goVersion, kernelVersion, os, version); - } + public abstract String version(); - public Builder fromVersion(Version in) { - return this - .arch(in.getArch()) - .gitCommit(in.getGitCommit()) - .goVersion(in.getGoVersion()) - .kernelVersion(in.getKernelVersion()) - .os(in.getOs()) - .version(in.getVersion()); - } + @SerializedNames({ "Arch", "GitCommit", "GoVersion", "KernelVersion", "Os", "Version" }) + public static Version create(String arch, String gitCommit, String goVersion, String kernelVersion, String os, + String version) { + return new AutoValue_Version(arch, gitCommit, goVersion, kernelVersion, os, version); } } diff --git a/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java b/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java new file mode 100644 index 000000000..c02d44952 --- /dev/null +++ b/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java @@ -0,0 +1,39 @@ +/* + * 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.jclouds.docker.internal; + +import java.util.List; +import java.util.Map; + +import org.jclouds.javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; + +public class NullSafeCopies { + + public static Map copyOf(@Nullable Map map) { + return map != null ? ImmutableMap.copyOf(map) : ImmutableMap.of(); + } + + public static List copyOf(@Nullable List list) { + return list != null ? ImmutableList.copyOf(list) : ImmutableList.of(); + } + + private NullSafeCopies() { + } +} diff --git a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java index faee98267..b64dace91 100644 --- a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java +++ b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java @@ -61,7 +61,7 @@ public void testCreateNodeWithGroupEncodedIntoNameThenStoreCredentials() { .osDescriptionMatches("jclouds/default:latest").build(); guest = adapter.createNodeWithGroupEncodedIntoName(group, name, template); - assertEquals(guest.getNodeId(), guest.getNode().getId() + ""); + assertEquals(guest.getNodeId(), guest.getNode().id() + ""); } public void testListHardwareProfiles() { @@ -76,7 +76,7 @@ public void testListHardwareProfiles() { @AfterGroups(groups = "live") protected void tearDown() { if (guest != null) { - adapter.destroyNode(guest.getNode().getId() + ""); + adapter.destroyNode(guest.getNode().id() + ""); } super.tearDown(); } diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java index b062f2fbf..6e79685e9 100644 --- a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java +++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java @@ -21,6 +21,8 @@ import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.testng.Assert.assertEquals; + +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; @@ -65,7 +67,7 @@ public class ContainerToNodeMetadataTest { public void setup() { Config containerConfig = Config.builder() .hostname("6d35806c1bd2") - .domainName("") + .domainname("") .user("") .memory(0) .memorySwap(0) @@ -79,27 +81,27 @@ public void setup() { .stdinOnce(false) .env(null) .cmd(ImmutableList.of("/usr/sbin/sshd", "-D")) - .imageId("jclouds/ubuntu") + .image("jclouds/ubuntu") .volumesFrom("") .workingDir("") .entrypoint(null) .networkDisabled(false) .build(); - State state = State.builder() - .pid(3626) - .running(true) - .exitCode(0) - .startedAt("2014-03-24T20:28:37.537659054Z") - .finishedAt("0001-01-01T00:00:00Z") - .ghost(false) - .build(); + State state = State.create( // + 3626, // pid + true, // running + 0, // exitCode + "2014-03-24T20:28:37.537659054Z", // startedAt + "0001-01-01T00:00:00Z", // finishedAt + false // ghost + ); container = Container.builder() .id("6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9") .name("/hopeful_mclean") .created("2014-03-22T07:16:45.784120972Z") .path("/usr/sbin/sshd") - .args(new String[] {"-D"}) - .containerConfig(containerConfig) + .args(Arrays.asList("-D")) + .config(containerConfig) .state(state) .image("af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6") .networkSettings(NetworkSettings.builder() @@ -190,12 +192,12 @@ public void testVirtualMachineToNodeMetadata() { private Container mockContainer() { Container mockContainer = EasyMock.createMock(Container.class); - expect(mockContainer.getId()).andReturn(container.getId()); - expect(mockContainer.getName()).andReturn(container.getName()); - expect(mockContainer.getContainerConfig()).andReturn(container.getContainerConfig()).anyTimes(); - expect(mockContainer.getNetworkSettings()).andReturn(container.getNetworkSettings()).anyTimes(); - expect(mockContainer.getState()).andReturn(container.getState()); - expect(mockContainer.getImage()).andReturn(container.getImage()).anyTimes(); + expect(mockContainer.id()).andReturn(container.id()); + expect(mockContainer.name()).andReturn(container.name()); + expect(mockContainer.config()).andReturn(container.config()).anyTimes(); + expect(mockContainer.networkSettings()).andReturn(container.networkSettings()).anyTimes(); + expect(mockContainer.state()).andReturn(container.state()); + expect(mockContainer.image()).andReturn(container.image()).anyTimes(); replay(mockContainer); return mockContainer; diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java index 0141c70d5..0d357929e 100644 --- a/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java +++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java @@ -39,14 +39,18 @@ public class ImageToImageTest { @BeforeMethod public void setup() { - image = org.jclouds.docker.domain.Image.builder() - .id("id") - .parent("parent") - .created("created") - .architecture("x86_64") - .repoTags(ImmutableList.of("repoTag1:version")) - .size(0l) - .build(); + image = org.jclouds.docker.domain.Image.create( + "id", // id + "parent", // parent + "created", // created + null, // container + null, // dockerVersion + "x86_64", // architecture + null, // os + 0l, // size + 0l, // virtualSize + ImmutableList.of("repoTag1:version") // repoTags + ); function = new ImageToImage(); } @@ -57,15 +61,15 @@ public void testImageToImage() { verify(mockImage); - assertEquals(mockImage.getId(), image.getId().toString()); + assertEquals(mockImage.id(), image.getId().toString()); } private org.jclouds.docker.domain.Image mockImage() { org.jclouds.docker.domain.Image mockImage = EasyMock.createMock(org.jclouds.docker.domain.Image.class); - expect(mockImage.getId()).andReturn(image.getId()).anyTimes(); - expect(mockImage.getRepoTags()).andReturn(image.getRepoTags()).anyTimes(); - expect(mockImage.getArchitecture()).andReturn(image.getArchitecture()).anyTimes(); + expect(mockImage.id()).andReturn(image.id()).anyTimes(); + expect(mockImage.repoTags()).andReturn(image.repoTags()).anyTimes(); + expect(mockImage.architecture()).andReturn(image.architecture()).anyTimes(); replay(mockImage); return mockImage; diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java index b9739abc6..f66f04048 100644 --- a/docker/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java +++ b/docker/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java @@ -46,7 +46,7 @@ public void testStateRunningToStatusRunning() { verify(mockState); - assertEquals(mockState.isRunning(), true); + assertEquals(mockState.running(), true); assertEquals(status, NodeMetadata.Status.RUNNING); } @@ -57,14 +57,14 @@ public void testStateNotRunningToStatusTerminated() { verify(mockState); - assertEquals(mockState.isRunning(), false); + assertEquals(mockState.running(), false); assertEquals(status, NodeMetadata.Status.TERMINATED); } private State mockStateRunning() { State mockState = EasyMock.createMock(State.class); - expect(mockState.isRunning()).andReturn(true).anyTimes(); + expect(mockState.running()).andReturn(true).anyTimes(); replay(mockState); return mockState; @@ -73,7 +73,7 @@ private State mockStateRunning() { private State mockStateNotRunning() { State mockState = EasyMock.createMock(State.class); - expect(mockState.isRunning()).andReturn(false).anyTimes(); + expect(mockState.running()).andReturn(false).anyTimes(); replay(mockState); return mockState; diff --git a/docker/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java b/docker/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java index 4f5ba7586..57659c597 100644 --- a/docker/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java +++ b/docker/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java @@ -16,15 +16,18 @@ */ package org.jclouds.docker.config; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + import org.jclouds.docker.domain.Container; -import org.testng.annotations.BeforeMethod; +import org.jclouds.docker.domain.NetworkSettings; +import org.jclouds.docker.domain.Port; +import org.jclouds.json.Json; +import org.jclouds.json.config.GsonModule; import org.testng.annotations.Test; -import static org.jclouds.docker.config.DockerParserModule.ContainerTypeAdapter; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; +import com.google.common.collect.ImmutableMap; +import com.google.inject.Guice; /** * Unit tests for the {@link org.jclouds.docker.config.DockerParserModule} class. @@ -32,21 +35,27 @@ @Test(groups = "unit", testName = "DockerParserModuleTest") public class DockerParserModuleTest { - private Gson gson; + private Json json = Guice.createInjector(new GsonModule(), new DockerParserModule()).getInstance(Json.class); - @BeforeMethod - public void setup() { - gson = new GsonBuilder() - .registerTypeAdapter(Container.class, new ContainerTypeAdapter()) - .create(); - } - - @Test public void testContainerWithVolumesNull() { - Container container = gson.fromJson( - "{ \"Volumes\": null }", Container.class); + Container container = json.fromJson("{ \"Id\": \"foo\", \"Volumes\": null }", Container.class); assertNotNull(container); - assertEquals(container.getVolumes(), null); + assertEquals(container.id(), "foo"); + assertEquals(container.volumes(), ImmutableMap.of()); } + public void port() { + // Note IP, not Ip + String text = "{\"IP\":\"0.0.0.0\",\"PrivatePort\":4567,\"PublicPort\":49155,\"Type\":\"tcp\"}"; + Port port = Port.create("0.0.0.0", 4567, 49155, "tcp"); + assertEquals(json.fromJson(text, Port.class), port); + assertEquals(json.toJson(port), text); + } + + public void networkSettings() { + String text = "{\"IPAddress\":\"XX.XX.206.98\",\"IPPrefixLen\":27,\"Gateway\":\"XX.XX.206.105\",\"Bridge\":\"public\",\"Ports\":{}}"; + NetworkSettings settings = NetworkSettings.create("XX.XX.206.98", 27, "XX.XX.206.105", "public", null, null); + assertEquals(json.fromJson(text, NetworkSettings.class), settings); + assertEquals(json.toJson(settings), text); + } } diff --git a/docker/src/test/java/org/jclouds/docker/features/RemoteApiLiveTest.java b/docker/src/test/java/org/jclouds/docker/features/RemoteApiLiveTest.java index 34fedddd6..30fd171f2 100644 --- a/docker/src/test/java/org/jclouds/docker/features/RemoteApiLiveTest.java +++ b/docker/src/test/java/org/jclouds/docker/features/RemoteApiLiveTest.java @@ -50,7 +50,7 @@ public class RemoteApiLiveTest extends BaseDockerApiLiveTest { @Test public void testVersion() { - assertEquals(api().getVersion().getVersion(), "1.0.0"); + assertEquals(api().getVersion().version(), "1.0.0"); } @Test(dependsOnMethods = "testVersion") @@ -69,37 +69,37 @@ public void testListImages() { @Test(dependsOnMethods = "testListImages") public void testCreateContainer() throws IOException, InterruptedException { - Config containerConfig = Config.builder().imageId(image.getId()) + Config containerConfig = Config.builder().image(image.id()) .cmd(ImmutableList.of("/bin/sh", "-c", "while true; do echo hello world; sleep 1; done")) .build(); container = api().createContainer("testCreateContainer", containerConfig); assertNotNull(container); - assertNotNull(container.getId()); + assertNotNull(container.id()); } @Test(dependsOnMethods = "testCreateContainer") public void testStartContainer() throws IOException, InterruptedException { - api().startContainer(container.getId()); - assertTrue(api().inspectContainer(container.getId()).getState().isRunning()); + api().startContainer(container.id()); + assertTrue(api().inspectContainer(container.id()).state().running()); } @Test(dependsOnMethods = "testStartContainer") public void testStopContainer() { - api().stopContainer(container.getId()); - assertFalse(api().inspectContainer(container.getId()).getState().isRunning()); + api().stopContainer(container.id()); + assertFalse(api().inspectContainer(container.id()).state().running()); } @Test(dependsOnMethods = "testStopContainer", expectedExceptions = NullPointerException.class) public void testRemoveContainer() { - api().removeContainer(container.getId()); - assertFalse(api().inspectContainer(container.getId()).getState().isRunning()); + api().removeContainer(container.id()); + assertFalse(api().inspectContainer(container.id()).state().running()); } @Test(dependsOnMethods = "testRemoveContainer", expectedExceptions = ResourceNotFoundException.class) public void testDeleteImage() { - InputStream deleteImageStream = api().deleteImage(image.getId()); + InputStream deleteImageStream = api().deleteImage(image.id()); consumeStream(deleteImageStream, false); - assertNull(api().inspectImage(image.getId())); + assertNull(api().inspectImage(image.id())); } public void testBuildImage() throws IOException, InterruptedException, URISyntaxException { @@ -111,7 +111,7 @@ public void testBuildImage() throws IOException, InterruptedException, URISyntax String rawImageId = Iterables.getLast(Splitter.on("Successfully built ").split(lastStreamedLine)); String imageId = rawImageId.substring(0, 11); Image image = api().inspectImage(imageId); - api().deleteImage(image.getId(), DeleteImageOptions.Builder.force(true)); + api().deleteImage(image.id(), DeleteImageOptions.Builder.force(true)); } private RemoteApi api() { diff --git a/docker/src/test/java/org/jclouds/docker/features/RemoteApiMockTest.java b/docker/src/test/java/org/jclouds/docker/features/RemoteApiMockTest.java index 760f7234b..515d98ddb 100644 --- a/docker/src/test/java/org/jclouds/docker/features/RemoteApiMockTest.java +++ b/docker/src/test/java/org/jclouds/docker/features/RemoteApiMockTest.java @@ -108,11 +108,11 @@ public void testGetContainer() throws Exception { Container container = remoteApi.inspectContainer(containerId); assertRequestHasCommonFields(server.takeRequest(), "/containers/" + containerId + "/json"); assertNotNull(container); - assertNotNull(container.getId(), containerId); - assertNotNull(container.getContainerConfig()); - assertNotNull(container.getHostConfig()); - assertEquals(container.getName(), "/tender_lumiere"); - assertEquals(container.getState().isRunning(), true); + assertNotNull(container.id(), containerId); + assertNotNull(container.config()); + assertNotNull(container.hostConfig()); + assertEquals(container.name(), "/tender_lumiere"); + assertEquals(container.state().running(), true); } finally { api.close(); server.shutdown(); @@ -126,7 +126,7 @@ public void testGetNonExistingContainer() throws Exception { RemoteApi remoteApi = api.getRemoteApi(); String containerId = "notExisting"; try { - Container container = remoteApi.inspectContainer(containerId); + remoteApi.inspectContainer(containerId); assertRequestHasCommonFields(server.takeRequest(), "/containers/" + containerId + "/json"); } finally { api.close(); @@ -145,13 +145,13 @@ public void testCreateContainer() throws Exception { .attachStderr(true) .attachStdout(true) .tty(false) - .imageId("base") + .image("base") .build(); try { Container container = remoteApi.createContainer("test", containerConfig); assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/create?name=test"); assertNotNull(container); - assertEquals(container.getId(), "c6c74153ae4b1d1633d68890a68d89c40aa5e284a1ea016cbc6ef0e634ee37b2"); + assertEquals(container.id(), "c6c74153ae4b1d1633d68890a68d89c40aa5e284a1ea016cbc6ef0e634ee37b2"); } finally { api.close(); server.shutdown();