Repository: jclouds-labs Updated Branches: refs/heads/master bb9dfbafb -> e95de6a70
Profitbricks REST - NIC API Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/e95de6a7 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/e95de6a7 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/e95de6a7 Branch: refs/heads/master Commit: e95de6a708288c2bb128a1a60a246e7eaeff0dbf Parents: bb9dfba Author: mirza-spc <[email protected]> Authored: Tue Mar 22 14:41:36 2016 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Mon Mar 28 17:07:34 2016 +0200 ---------------------------------------------------------------------- .../profitbricks/rest/ProfitBricksApi.java | 4 + .../binder/BaseProfitBricksRequestBinder.java | 4 +- .../binder/image/UpdateImageRequestBinder.java | 28 ++-- .../rest/binder/nic/CreateNicRequestBinder.java | 84 +++++++++++ .../rest/binder/nic/UpdateNicRequestBinder.java | 72 +++++++++ .../binder/server/AttachCdromRequestBinder.java | 4 +- .../server/AttachVolumeRequestBinder.java | 4 +- .../server/CreateServerRequestBinder.java | 6 +- .../server/UpdateServerRequestBinder.java | 16 +- .../snapshot/UpdateSnapshotRequestBinder.java | 30 ++-- .../volume/CreateVolumeRequestBinder.java | 4 +- .../volume/UpdateVolumeRequestBinder.java | 8 +- .../jclouds/profitbricks/rest/domain/Nic.java | 115 +++++++++++++- .../profitbricks/rest/features/NicApi.java | 126 ++++++++++++++++ .../rest/features/NicApiLiveTest.java | 151 +++++++++++++++++++ .../rest/features/NicApiMockTest.java | 151 +++++++++++++++++++ .../src/test/resources/nic/get.json | 31 ++++ .../src/test/resources/nic/list.json | 38 +++++ 18 files changed, 818 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApi.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApi.java index 90e5fc8..a0ab0c0 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApi.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/ProfitBricksApi.java @@ -21,6 +21,7 @@ import com.google.common.annotations.Beta; import java.io.Closeable; import org.apache.jclouds.profitbricks.rest.features.DataCenterApi; import org.apache.jclouds.profitbricks.rest.features.ImageApi; +import org.apache.jclouds.profitbricks.rest.features.NicApi; import org.apache.jclouds.profitbricks.rest.features.ServerApi; import org.apache.jclouds.profitbricks.rest.features.SnapshotApi; import org.apache.jclouds.profitbricks.rest.features.VolumeApi; @@ -43,5 +44,8 @@ public interface ProfitBricksApi extends Closeable { @Delegate SnapshotApi snapshotApi(); + + @Delegate + NicApi nicApi(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java index dae21b9..3c8753c 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/BaseProfitBricksRequestBinder.java @@ -33,14 +33,14 @@ public abstract class BaseProfitBricksRequestBinder<T> implements MapBinder { protected final Supplier<URI> endpointSupplier; protected final String paramName; - protected final Map<String, Object> formMap; + protected final Map<String, Object> requestBuilder; protected final Json jsonBinder; @Inject protected BaseProfitBricksRequestBinder(String paramName, Json jsonBinder, Supplier<URI> endpointSupplier) { this.paramName = checkNotNull(paramName, "Initialize 'paramName' in constructor"); this.jsonBinder = jsonBinder; - this.formMap = new HashMap<String, Object>(); + this.requestBuilder = new HashMap<String, Object>(); this.endpointSupplier = endpointSupplier; } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java index 7fa4998..dca1f4b 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/image/UpdateImageRequestBinder.java @@ -44,45 +44,45 @@ public class UpdateImageRequestBinder extends BaseProfitBricksRequestBinder<Imag imageId = payload.id(); if (payload.name() != null) - formMap.put("name", payload.name()); + requestBuilder.put("name", payload.name()); if (payload.description() != null) - formMap.put("description", payload.description()); + requestBuilder.put("description", payload.description()); if (payload.licenceType() != null) - formMap.put("licenceType", payload.licenceType()); + requestBuilder.put("licenceType", payload.licenceType()); if (payload.cpuHotPlug() != null) - formMap.put("cpuHotPlug", payload.cpuHotPlug()); + requestBuilder.put("cpuHotPlug", payload.cpuHotPlug()); if (payload.cpuHotUnplug() != null) - formMap.put("cpuHotUnplug", payload.cpuHotUnplug()); + requestBuilder.put("cpuHotUnplug", payload.cpuHotUnplug()); if (payload.ramHotPlug() != null) - formMap.put("ramHotPlug", payload.ramHotPlug()); + requestBuilder.put("ramHotPlug", payload.ramHotPlug()); if (payload.ramHotUnplug() != null) - formMap.put("ramHotUnplug", payload.ramHotUnplug()); + requestBuilder.put("ramHotUnplug", payload.ramHotUnplug()); if (payload.nicHotPlug() != null) - formMap.put("nicHotPlug", payload.nicHotPlug()); + requestBuilder.put("nicHotPlug", payload.nicHotPlug()); if (payload.nicHotUnplug() != null) - formMap.put("nicHotUnplug", payload.nicHotUnplug()); + requestBuilder.put("nicHotUnplug", payload.nicHotUnplug()); if (payload.discVirtioHotPlug() != null) - formMap.put("discVirtioHotPlug", payload.discVirtioHotPlug()); + requestBuilder.put("discVirtioHotPlug", payload.discVirtioHotPlug()); if (payload.discVirtioHotUnplug() != null) - formMap.put("discVirtioHotUnplug", payload.discVirtioHotUnplug()); + requestBuilder.put("discVirtioHotUnplug", payload.discVirtioHotUnplug()); if (payload.discScsiHotPlug() != null) - formMap.put("discScsiHotPlug", payload.discScsiHotPlug()); + requestBuilder.put("discScsiHotPlug", payload.discScsiHotPlug()); if (payload.discScsiHotUnplug() != null) - formMap.put("discScsiHotUnplug", payload.discScsiHotUnplug()); + requestBuilder.put("discScsiHotUnplug", payload.discScsiHotUnplug()); - return jsonBinder.toJson(formMap); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinder.java new file mode 100644 index 0000000..3a432a5 --- /dev/null +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/CreateNicRequestBinder.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jclouds.profitbricks.rest.binder.nic; + +import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.base.Supplier; +import com.google.inject.Inject; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder; +import org.apache.jclouds.profitbricks.rest.domain.Nic; +import org.jclouds.http.HttpRequest; +import org.jclouds.json.Json; +import org.jclouds.location.Provider; + +public class CreateNicRequestBinder extends BaseProfitBricksRequestBinder<Nic.Request.CreatePayload> { + + private String dataCenterId; + private String serverId; + + @Inject + CreateNicRequestBinder(Json jsonBinder, @Provider Supplier<URI> endpointSupplier) { + super("nic", jsonBinder, endpointSupplier); + } + + @Override + protected String createPayload(Nic.Request.CreatePayload payload) { + + checkNotNull(payload, "payload"); + checkNotNull(payload.dataCenterId(), "dataCenterId"); + checkNotNull(payload.serverId(), "serverId"); + + dataCenterId = payload.dataCenterId(); + serverId = payload.serverId(); + + Map<String, Object> properties = new HashMap<String, Object>(); + + properties.put("lan", payload.lan()); + + if (payload.name() != null) + properties.put("name", payload.name()); + + if (payload.ips() != null && !payload.ips().isEmpty()) + properties.put("ips", payload.ips()); + + if (payload.dhcp() != null) + properties.put("dhcp", payload.dhcp()); + + if (payload.firewallActive() != null) + properties.put("firewallActive", payload.firewallActive()); + + if (payload.firewallrules() != null) { + Map<String, Object> entities = new HashMap<String, Object>(); + entities.put("firewallrules", payload.firewallrules()); + properties.put("entities", entities); + } + + requestBuilder.put("properties", properties); + + return jsonBinder.toJson(requestBuilder); + } + + @Override + protected <R extends HttpRequest> R createRequest(R fromRequest, String payload) { + R request = (R) fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/servers/%s/nics", dataCenterId, serverId)).build(); + return super.createRequest(request, payload); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinder.java new file mode 100644 index 0000000..7bb92fc --- /dev/null +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/nic/UpdateNicRequestBinder.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jclouds.profitbricks.rest.binder.nic; + +import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.base.Supplier; +import com.google.inject.Inject; +import java.net.URI; +import org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder; +import org.apache.jclouds.profitbricks.rest.domain.Nic; +import org.jclouds.http.HttpRequest; +import org.jclouds.json.Json; +import org.jclouds.location.Provider; + +public class UpdateNicRequestBinder extends BaseProfitBricksRequestBinder<Nic.Request.UpdatePayload> { + + private String dataCenterId; + private String serverId; + private String nicId; + + @Inject + UpdateNicRequestBinder(Json jsonBinder, @Provider Supplier<URI> endpointSupplier) { + super("nic", jsonBinder, endpointSupplier); + } + + @Override + protected String createPayload(Nic.Request.UpdatePayload payload) { + + checkNotNull(payload, "payload"); + checkNotNull(payload.dataCenterId(), "dataCenterId"); + checkNotNull(payload.serverId(), "serverId"); + checkNotNull(payload.id(), "id"); + + dataCenterId = payload.dataCenterId(); + serverId = payload.serverId(); + nicId = payload.id(); + + requestBuilder.put("lan", payload.lan()); + + if (payload.name() != null) + requestBuilder.put("name", payload.name()); + + if (payload.ips() != null && !payload.ips().isEmpty()) + requestBuilder.put("ips", payload.ips()); + + if (payload.dhcp() != null) + requestBuilder.put("dhcp", payload.dhcp()); + + return jsonBinder.toJson(requestBuilder); + } + + @Override + protected <R extends HttpRequest> R createRequest(R fromRequest, String payload) { + R request = (R) fromRequest.toBuilder().replacePath(String.format("/rest/datacenters/%s/servers/%s/nics/%s", dataCenterId, serverId, nicId)).build(); + return super.createRequest(request, payload); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java index 8315cce..33f19d9 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachCdromRequestBinder.java @@ -48,8 +48,8 @@ public class AttachCdromRequestBinder extends BaseProfitBricksRequestBinder<Serv dataCenterId = payload.dataCenterId(); serverId = payload.serverId(); - formMap.put("id", payload.imageId()); - return jsonBinder.toJson(formMap); + requestBuilder.put("id", payload.imageId()); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java index b4178f4..ca37d15 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/AttachVolumeRequestBinder.java @@ -48,8 +48,8 @@ public class AttachVolumeRequestBinder extends BaseProfitBricksRequestBinder<Ser dataCenterId = payload.dataCenterId(); serverId = payload.serverId(); - formMap.put("id", payload.volumeId()); - return jsonBinder.toJson(formMap); + requestBuilder.put("id", payload.volumeId()); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java index d7a2a97..ae2e87a 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/CreateServerRequestBinder.java @@ -61,7 +61,7 @@ public class CreateServerRequestBinder extends BaseProfitBricksRequestBinder<Ser else if (payload.bootCdrom() != null) properties.put("bootCdrom", payload.bootCdrom()); - formMap.put("properties", properties); + requestBuilder.put("properties", properties); Server.Entities entities = payload.entities(); @@ -75,10 +75,10 @@ public class CreateServerRequestBinder extends BaseProfitBricksRequestBinder<Ser if (entities.nics() != null) entitiesParams.put("nics", entities.nics()); - formMap.put("entities", entitiesParams); + requestBuilder.put("entities", entitiesParams); } - return jsonBinder.toJson(formMap); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java index 61ebf81..a9be7d1 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/server/UpdateServerRequestBinder.java @@ -45,22 +45,22 @@ public class UpdateServerRequestBinder extends BaseProfitBricksRequestBinder<Ser dataCenterId = payload.dataCenterId(); serverId = payload.id(); - formMap.put("name", payload.name()); - formMap.put("ram", payload.ram()); - formMap.put("cores", payload.cores()); + requestBuilder.put("name", payload.name()); + requestBuilder.put("ram", payload.ram()); + requestBuilder.put("cores", payload.cores()); if (payload.availabilityZone() != null) - formMap.put("availabilityzone", payload.availabilityZone()); + requestBuilder.put("availabilityzone", payload.availabilityZone()); if (payload.licenceType() != null) - formMap.put("licencetype", payload.licenceType()); + requestBuilder.put("licencetype", payload.licenceType()); if (payload.bootVolume() != null) - formMap.put("bootVolume", payload.bootVolume()); + requestBuilder.put("bootVolume", payload.bootVolume()); else if (payload.bootCdrom() != null) - formMap.put("bootCdrom", payload.bootCdrom()); + requestBuilder.put("bootCdrom", payload.bootCdrom()); - return jsonBinder.toJson(formMap); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java index 5b9f984..1db1cb6 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/snapshot/UpdateSnapshotRequestBinder.java @@ -21,10 +21,10 @@ import org.apache.jclouds.profitbricks.rest.binder.BaseProfitBricksRequestBinder import org.apache.jclouds.profitbricks.rest.domain.Snapshot; import org.jclouds.http.HttpRequest; import org.jclouds.json.Json; -import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.base.Supplier; import java.net.URI; import org.jclouds.location.Provider; +import static com.google.common.base.Preconditions.checkNotNull; public class UpdateSnapshotRequestBinder extends BaseProfitBricksRequestBinder<Snapshot.Request.UpdatePayload> { @@ -43,45 +43,45 @@ public class UpdateSnapshotRequestBinder extends BaseProfitBricksRequestBinder<S snapshotId = payload.id(); if (payload.name() != null) - formMap.put("name", payload.name()); + requestBuilder.put("name", payload.name()); if (payload.description() != null) - formMap.put("description", payload.description()); + requestBuilder.put("description", payload.description()); if (payload.licenceType() != null) - formMap.put("licenceType", payload.licenceType()); + requestBuilder.put("licenceType", payload.licenceType()); if (payload.cpuHotPlug() != null) - formMap.put("cpuHotPlug", payload.cpuHotPlug()); + requestBuilder.put("cpuHotPlug", payload.cpuHotPlug()); if (payload.cpuHotUnplug() != null) - formMap.put("cpuHotUnplug", payload.cpuHotUnplug()); + requestBuilder.put("cpuHotUnplug", payload.cpuHotUnplug()); if (payload.ramHotPlug() != null) - formMap.put("ramHotPlug", payload.ramHotPlug()); + requestBuilder.put("ramHotPlug", payload.ramHotPlug()); if (payload.ramHotUnplug() != null) - formMap.put("ramHotUnplug", payload.ramHotUnplug()); + requestBuilder.put("ramHotUnplug", payload.ramHotUnplug()); if (payload.nicHotPlug() != null) - formMap.put("nicHotPlug", payload.nicHotPlug()); + requestBuilder.put("nicHotPlug", payload.nicHotPlug()); if (payload.nicHotUnplug() != null) - formMap.put("nicHotUnplug", payload.nicHotUnplug()); + requestBuilder.put("nicHotUnplug", payload.nicHotUnplug()); if (payload.discVirtioHotPlug() != null) - formMap.put("discVirtioHotPlug", payload.discVirtioHotPlug()); + requestBuilder.put("discVirtioHotPlug", payload.discVirtioHotPlug()); if (payload.discVirtioHotUnplug() != null) - formMap.put("discVirtioHotUnplug", payload.discVirtioHotUnplug()); + requestBuilder.put("discVirtioHotUnplug", payload.discVirtioHotUnplug()); if (payload.discScsiHotPlug() != null) - formMap.put("discScsiHotPlug", payload.discScsiHotPlug()); + requestBuilder.put("discScsiHotPlug", payload.discScsiHotPlug()); if (payload.discScsiHotUnplug() != null) - formMap.put("discScsiHotUnplug", payload.discScsiHotUnplug()); + requestBuilder.put("discScsiHotUnplug", payload.discScsiHotUnplug()); - return jsonBinder.toJson(formMap); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java index 661499e..a642c2f 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/CreateVolumeRequestBinder.java @@ -68,9 +68,9 @@ public class CreateVolumeRequestBinder extends BaseProfitBricksRequestBinder<Vol else if (payload.licenceType() != null) properties.put("licenceType", payload.licenceType()); - formMap.put("properties", properties); + requestBuilder.put("properties", properties); - return jsonBinder.toJson(formMap); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java index e300f73..6a21e6a 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/binder/volume/UpdateVolumeRequestBinder.java @@ -46,15 +46,15 @@ public class UpdateVolumeRequestBinder extends BaseProfitBricksRequestBinder<Vol volumeId = payload.id(); if (payload.name() != null) - formMap.put("name", payload.name()); + requestBuilder.put("name", payload.name()); if (payload.size() != null) - formMap.put("size", payload.size()); + requestBuilder.put("size", payload.size()); if (payload.bus() != null) - formMap.put("bus", payload.bus()); + requestBuilder.put("bus", payload.bus()); - return jsonBinder.toJson(formMap); + return jsonBinder.toJson(requestBuilder); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java index c32b32b..10b75da 100644 --- a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/domain/Nic.java @@ -27,6 +27,12 @@ import org.jclouds.javax.annotation.Nullable; public abstract class Nic { public abstract String id(); + + @Nullable + public abstract String dataCenterId(); + + @Nullable + public abstract String serverId(); public abstract String type(); @@ -41,9 +47,9 @@ public abstract class Nic { @Nullable public abstract Entities entities(); - @SerializedNames({"id", "type", "href", "metadata", "properties", "entities"}) - public static Nic create(String id, String type, String href, Metadata metadata, Properties properties, Entities entities) { - return new AutoValue_Nic(id, type, href, metadata, properties, entities); + @SerializedNames({"id", "dataCenterId", "serverId", "type", "href", "metadata", "properties", "entities"}) + public static Nic create(String id, String dataCenterId, String serverId, String type, String href, Metadata metadata, Properties properties, Entities entities) { + return new AutoValue_Nic(id, dataCenterId, serverId, type, href, metadata, properties, entities); } @AutoValue @@ -52,21 +58,24 @@ public abstract class Nic { @Nullable public abstract String name(); + @Nullable public abstract String mac(); public abstract List<String> ips(); - public abstract boolean dhcp(); + @Nullable + public abstract Boolean dhcp(); public abstract int lan(); - public abstract boolean firewallActive(); + @Nullable + public abstract Boolean firewallActive(); @Nullable public abstract Entities entities(); @SerializedNames({"name", "mac", "ips", "dhcp", "lan", "firewallActive", "entities"}) - public static Properties create(String name, String mac, List<String> ips, boolean dhcp, int lan, boolean firewallactive, Entities entities) { + public static Properties create(String name, String mac, List<String> ips, Boolean dhcp, int lan, Boolean firewallactive, Entities entities) { return new AutoValue_Nic_Properties(name, mac, ips == null ? ImmutableList.<String>of() : copyOf(ips), dhcp, lan, firewallactive, entities); } } @@ -81,5 +90,99 @@ public abstract class Nic { return new AutoValue_Nic_Entities(firewallrules); } } + + public static final class Request { + + public static CreatePayload.Builder creatingBuilder() { + return new AutoValue_Nic_Request_CreatePayload.Builder(); + } + + public static UpdatePayload.Builder updatingBuilder() { + return new AutoValue_Nic_Request_UpdatePayload.Builder(); + } + + @AutoValue + public abstract static class CreatePayload { + + @Nullable + public abstract String name(); + + @Nullable + public abstract List<String> ips(); + + @Nullable + public abstract Boolean dhcp(); + + public abstract int lan(); + + @Nullable + public abstract Boolean firewallActive(); + + @Nullable + public abstract List<FirewallRule> firewallrules(); + + public abstract String dataCenterId(); + public abstract String serverId(); + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder name(String name); + public abstract Builder ips(List<String> ips); + public abstract Builder dhcp(Boolean dhcp); + public abstract Builder lan(int lan); + public abstract Builder firewallActive(Boolean firewallActive); + public abstract Builder firewallrules(List<FirewallRule> firewallrules); + public abstract Builder dataCenterId(String dataCenterId); + public abstract Builder serverId(String serverId); + + abstract CreatePayload autoBuild(); + + public CreatePayload build() { + return autoBuild(); + } + } + } + + @AutoValue + public abstract static class UpdatePayload { + + @Nullable + public abstract String name(); + + @Nullable + public abstract List<String> ips(); + + @Nullable + public abstract Boolean dhcp(); + + @Nullable + public abstract Integer lan(); + + public abstract String dataCenterId(); + public abstract String serverId(); + public abstract String id(); + + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder name(String name); + public abstract Builder ips(List<String> ips); + public abstract Builder dhcp(Boolean dhcp); + public abstract Builder lan(Integer lan); + public abstract Builder dataCenterId(String dataCenterId); + public abstract Builder serverId(String serverId); + public abstract Builder id(String id); + + abstract UpdatePayload autoBuild(); + + public UpdatePayload build() { + return autoBuild(); + } + } + } + + } + } + http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java new file mode 100644 index 0000000..965ddad --- /dev/null +++ b/profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/features/NicApi.java @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jclouds.profitbricks.rest.features; + +import com.google.inject.Inject; +import com.google.inject.TypeLiteral; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Type; +import java.util.List; +import javax.inject.Named; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import org.apache.jclouds.profitbricks.rest.binder.nic.CreateNicRequestBinder; +import org.apache.jclouds.profitbricks.rest.binder.nic.UpdateNicRequestBinder; +import org.apache.jclouds.profitbricks.rest.domain.Nic; +import org.apache.jclouds.profitbricks.rest.domain.options.DepthOptions; +import org.apache.jclouds.profitbricks.rest.util.ParseId; +import org.jclouds.Fallbacks; +import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.http.filters.BasicAuthentication; +import org.jclouds.http.functions.ParseJson; +import org.jclouds.json.Json; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PATCH; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SelectJson; +import org.jclouds.util.Strings2; + +@Path("/datacenters/{dataCenterId}/servers/{serverId}/nics") +@RequestFilters(BasicAuthentication.class) +public interface NicApi extends Closeable { + + @Named("nic:list") + @GET + @SelectJson("items") + @Fallback(EmptyListOnNotFoundOr404.class) + List<Nic> list(@PathParam("dataCenterId") String dataCenterId, @PathParam("serverId") String serverId); + + @Named("nic:list") + @GET + @SelectJson("items") + @Fallback(EmptyListOnNotFoundOr404.class) + List<Nic> list(@PathParam("dataCenterId") String dataCenterId, @PathParam("serverId") String serverId, DepthOptions options); + + @Named("nic:get") + @GET + @Path("/{nicId}") + @ResponseParser(NicApi.NicParser.class) + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + Nic get(@PathParam("dataCenterId") String dataCenterId, @PathParam("serverId") String serverId, @PathParam("nicId") String nicId); + + @Named("nic:get") + @GET + @Path("/{nicId}") + @ResponseParser(NicApi.NicParser.class) + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + Nic get(@PathParam("dataCenterId") String dataCenterId, @PathParam("serverId") String serverId, @PathParam("nicId") String nicId, DepthOptions options); + + @Named("nic:create") + @POST + @MapBinder(CreateNicRequestBinder.class) + @ResponseParser(NicApi.NicParser.class) + Nic create(@PayloadParam("nic") Nic.Request.CreatePayload payload); + + @Named("nic:update") + @PATCH + @Path("/{nicId}") + @MapBinder(UpdateNicRequestBinder.class) + @ResponseParser(NicApi.NicParser.class) + @Produces("application/vnd.profitbricks.partial-properties+json") + Nic update(@PayloadParam("nic") Nic.Request.UpdatePayload payload); + + @Named("nic:delete") + @DELETE + @Path("/{nicId}") + @Fallback(Fallbacks.VoidOnNotFoundOr404.class) + void delete(@PathParam("dataCenterId") String dataCenterId, @PathParam("serverId") String serverId, @PathParam("nicId") String nicId); + + static final class NicParser extends ParseJson<Nic> { + + private final ParseId parseService; + + @Inject NicParser(Json json, ParseId parseId) { + super(json, TypeLiteral.get(Nic.class)); + this.parseService = parseId; + } + + @Override + public <V> V apply(InputStream stream, Type type) throws IOException { + try { + return (V) json.fromJson(this.parseService.parseId( + this.parseService.parseId(Strings2.toStringAndClose(stream), "datacenters", "dataCenterId"), + "servers", + "serverId" + ), type); + } finally { + if (stream != null) + stream.close(); + } + } + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiLiveTest.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiLiveTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiLiveTest.java new file mode 100644 index 0000000..b2f4860 --- /dev/null +++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiLiveTest.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jclouds.profitbricks.rest.features; + +import com.google.common.base.Predicate; +import java.util.List; +import org.apache.jclouds.profitbricks.rest.domain.DataCenter; +import org.apache.jclouds.profitbricks.rest.domain.State; +import org.apache.jclouds.profitbricks.rest.domain.Nic; +import org.apache.jclouds.profitbricks.rest.domain.Server; +import org.apache.jclouds.profitbricks.rest.ids.ServerRef; +import org.apache.jclouds.profitbricks.rest.internal.BaseProfitBricksLiveTest; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; + +@Test(groups = "live", testName = "NicApiLiveTest") +public class NicApiLiveTest extends BaseProfitBricksLiveTest { + + private DataCenter dataCenter; + private Server testServer; + private Nic testNic; + + @BeforeClass + public void setupTest() { + dataCenter = createDataCenter(); + assertDataCenterAvailable(dataCenter); + + testServer = api.serverApi().createServer( + Server.Request.creatingBuilder() + .dataCenterId(dataCenter.id()) + .name("jclouds-node") + .cores(1) + .ram(1024) + .build()); + + assertNodeAvailable(ServerRef.create(dataCenter.id(), testServer.id())); + } + + @AfterClass(alwaysRun = true) + public void teardownTest() { + if (dataCenter != null) + deleteDataCenter(dataCenter.id()); + } + + @Test + public void testCreateNic() { + assertNotNull(dataCenter); + + testNic = nicApi().create( + Nic.Request.creatingBuilder() + .dataCenterId(dataCenter.id()) + .serverId(testServer.id()) + .name("jclouds-nic") + .lan(1) + .build()); + + assertNotNull(testNic); + assertEquals(testNic.properties().name(), "jclouds-nic"); + assertNicAvailable(testNic); + } + + + @Test(dependsOnMethods = "testCreateNic") + public void testGetNic() { + Nic nic = nicApi().get(dataCenter.id(), testServer.id(), testNic.id()); + + assertNotNull(nic); + assertEquals(nic.id(), testNic.id()); + } + + @Test(dependsOnMethods = "testCreateNic") + public void testList() { + List<Nic> nics = nicApi().list(dataCenter.id(), testServer.id()); + + assertNotNull(nics); + assertFalse(nics.isEmpty()); + assertEquals(nics.size(), 1); + } + + @Test(dependsOnMethods = "testGetNic") + public void testUpdateNic() { + assertDataCenterAvailable(dataCenter); + + nicApi().update( + Nic.Request.updatingBuilder() + .dataCenterId(testNic.dataCenterId()) + .serverId(testServer.id()) + .id(testNic.id()) + .name("apache-nic") + .build()); + + assertNicAvailable(testNic); + + Nic nic = nicApi().get(dataCenter.id(), testServer.id(), testNic.id()); + + assertEquals(nic.properties().name(), "apache-nic"); + } + + + @Test(dependsOnMethods = "testUpdateNic", alwaysRun = true) + public void testDeleteNic() { + nicApi().delete(testNic.dataCenterId(), testServer.id(), testNic.id()); + assertNicRemoved(testNic); + } + + private void assertNicAvailable(Nic nic) { + assertPredicate(new Predicate<Nic>() { + @Override + public boolean apply(Nic testNic) { + Nic nic = nicApi().get(testNic.dataCenterId(), testNic.serverId(), testNic.id()); + + if (nic == null || nic.metadata() == null) + return false; + + return nic.metadata().state() == State.AVAILABLE; + } + }, nic); + } + + private void assertNicRemoved(Nic nic) { + assertPredicate(new Predicate<Nic>() { + @Override + public boolean apply(Nic testNic) { + return nicApi().get(testNic.dataCenterId(), testNic.serverId(), testNic.id()) == null; + } + }, nic); + } + + private NicApi nicApi() { + return api.nicApi(); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java new file mode 100644 index 0000000..1ba8c76 --- /dev/null +++ b/profitbricks-rest/src/test/java/org/apache/jclouds/profitbricks/rest/features/NicApiMockTest.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jclouds.profitbricks.rest.features; + +import com.squareup.okhttp.mockwebserver.MockResponse; +import java.util.List; +import org.apache.jclouds.profitbricks.rest.domain.Nic; +import org.apache.jclouds.profitbricks.rest.domain.options.DepthOptions; +import org.apache.jclouds.profitbricks.rest.internal.BaseProfitBricksApiMockTest; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "NicApiMockTest", singleThreaded = true) +public class NicApiMockTest extends BaseProfitBricksApiMockTest { + + @Test + public void testGetList() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/nic/list.json")) + ); + + List<Nic> list = nicApi().list("datacenter-id", "server-id"); + + assertNotNull(list); + assertEquals(list.size(), 1); + assertEquals(list.get(0).properties().name(), "Test Nic"); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/datacenters/datacenter-id/servers/server-id/nics"); + } + + @Test + public void testGetListWith404() throws InterruptedException { + server.enqueue(response404()); + List<Nic> list = nicApi().list("datacenter-id", "server-id", new DepthOptions().depth(1)); + assertTrue(list.isEmpty()); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/datacenters/datacenter-id/servers/server-id/nics?depth=1"); + } + + @Test + public void testGetNic() throws InterruptedException { + MockResponse response = new MockResponse(); + response.setBody(stringFromResource("/nic/get.json")); + response.setHeader("Content-Type", "application/vnd.profitbricks.resource+json"); + + server.enqueue(response); + + Nic nic = nicApi().get("datacenter-id", "server-id", "some-id"); + + assertNotNull(nic); + assertEquals(nic.properties().name(), "test nic"); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/datacenters/datacenter-id/servers/server-id/nics/some-id"); + } + + public void testGetNicWith404() throws InterruptedException { + server.enqueue(response404()); + + Nic nic = nicApi().get("datacenter-id", "server-id", "some-id"); + + assertEquals(nic, null); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/datacenters/datacenter-id/servers/server-id/nics/some-id"); + } + + @Test + public void testCreate() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/nic/get.json")) + ); + + Nic nic = nicApi().create( + Nic.Request.creatingBuilder() + .dataCenterId("datacenter-id") + .serverId("server-id") + .name("jclouds-nic") + .lan(1) + .build()); + + assertNotNull(nic); + assertNotNull(nic.id()); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "/rest/datacenters/datacenter-id/servers/server-id/nics", + "{\"properties\": {\"name\": \"jclouds-nic\", \"lan\": 1}}" + ); + } + + @Test + public void testUpdate() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/nic/get.json")) + ); + + api.nicApi().update( + Nic.Request.updatingBuilder() + .id("some-id") + .dataCenterId("datacenter-id") + .serverId("server-id") + .name("apache-nic") + .build()); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "PATCH", "/rest/datacenters/datacenter-id/servers/server-id/nics/some-id", "{\"name\": \"apache-nic\"}"); + } + + @Test + public void testDelete() throws InterruptedException { + server.enqueue( + new MockResponse().setBody("") + ); + + nicApi().delete("datacenter-id", "server-id", "some-id"); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/datacenters/datacenter-id/servers/server-id/nics/some-id"); + } + + @Test + public void testDeleteWith404() throws InterruptedException { + server.enqueue(response404()); + + nicApi().delete("datacenter-id", "server-id", "some-id"); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/datacenters/datacenter-id/servers/server-id/nics/some-id"); + } + + private NicApi nicApi() { + return api.nicApi(); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/test/resources/nic/get.json ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/test/resources/nic/get.json b/profitbricks-rest/src/test/resources/nic/get.json new file mode 100644 index 0000000..8b00001 --- /dev/null +++ b/profitbricks-rest/src/test/resources/nic/get.json @@ -0,0 +1,31 @@ +{ + "id": "01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d", + "type": "nic", + "href": "https://api.profitbricks.com/rest/datacenters/b0ac144e-e294-415f-ba39-6737d5a9d419/servers/364f0f1c-7384-462b-8f0c-cfc4c3f6e2b2/nics/01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d", + "metadata": { + "createdDate": "2015-02-09T22:46:38Z", + "createdBy": "[email protected]", + "etag": "b4854a82738079d2c7f43b5324bd92e3", + "lastModifiedDate": "2015-02-09T22:46:38Z", + "lastModifiedBy": "[email protected]", + "state": "AVAILABLE" + }, + "properties": { + "name": "test nic", + "mac": "02:01:94:9e:f4:a9", + "ips": [ + "208.94.39.76" + ], + "dhcp": true, + "lan": 1, + "firewallActive": false + }, + "entities": { + "firewallrules": { + "id": "01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d/firewallrules", + "type": "collection", + "href": "https://api.profitbricks.com/rest/datacenters/b0ac144e-e294-415f-ba39-6737d5a9d419/servers/364f0f1c-7384-462b-8f0c-cfc4c3f6e2b2/nics/01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d/firewallrules", + "items": [] + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e95de6a7/profitbricks-rest/src/test/resources/nic/list.json ---------------------------------------------------------------------- diff --git a/profitbricks-rest/src/test/resources/nic/list.json b/profitbricks-rest/src/test/resources/nic/list.json new file mode 100644 index 0000000..6d0098b --- /dev/null +++ b/profitbricks-rest/src/test/resources/nic/list.json @@ -0,0 +1,38 @@ +{ + "id": "364f0f1c-7384-462b-8f0c-cfc4c3f6e2b2/nics", + "type": "collection", + "href": "https://api.profitbricks.com/rest/datacenters/b0ac144e-e294-415f-ba39-6737d5a9d419/servers/364f0f1c-7384-462b-8f0c-cfc4c3f6e2b2/nics", + "items": [ + { + "id": "01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d", + "type": "nic", + "href": "https://api.profitbricks.com/rest/datacenters/b0ac144e-e294-415f-ba39-6737d5a9d419/servers/364f0f1c-7384-462b-8f0c-cfc4c3f6e2b2/nics/01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d", + "metadata": { + "createdDate": "2015-02-09T22:46:38Z", + "createdBy": "[email protected]", + "etag": "b4854a82738079d2c7f43b5324bd92e3", + "lastModifiedDate": "2015-02-09T22:46:38Z", + "lastModifiedBy": "[email protected]", + "state": "AVAILABLE" + }, + "properties": { + "name": "Test Nic", + "mac": "02:01:94:9e:f4:a9", + "ips": [ + "208.94.39.76" + ], + "dhcp": true, + "lan": 1, + "firewallActive": false + }, + "entities": { + "firewallrules": { + "id": "01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d/firewallrules", + "type": "collection", + "href": "https://api.profitbricks.com/rest/datacenters/b0ac144e-e294-415f-ba39-6737d5a9d419/servers/364f0f1c-7384-462b-8f0c-cfc4c3f6e2b2/nics/01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d/firewallrules", + "items": [] + } + } + } + ] +} \ No newline at end of file
