You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by de...@apache.org on 2016/02/19 16:33:41 UTC
[31/35] jclouds git commit: JCLOUDS-947: Properly configure live
tests in ProfitBricks
JCLOUDS-947: Properly configure live tests in ProfitBricks
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/52c6c2b7
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/52c6c2b7
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/52c6c2b7
Branch: refs/heads/master
Commit: 52c6c2b7b5acf48fcddbfe7c043b133f0fc71c00
Parents: 5e82bbf
Author: Reijhanniel Jearl Campos <de...@gmail.com>
Authored: Sat Nov 14 08:23:58 2015 +0800
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Nov 18 22:35:05 2015 +0100
----------------------------------------------------------------------
.../DeregisterLoadBalancerRequestBinder.java | 4 +-
.../RegisterLoadBalancerRequestBinder.java | 6 +-
...ProfitBricksComputeServiceContextModule.java | 93 +++++++++-
.../internal/ProvisioningStatusAware.java | 27 ---
.../ProvisioningStatusPollingPredicate.java | 70 --------
.../config/ProfitBricksComputeProperties.java | 1 +
.../jclouds/profitbricks/domain/Location.java | 5 +
.../profitbricks/features/IpBlockApi.java | 5 +-
.../profitbricks/features/LoadBalancerApi.java | 15 +-
.../jclouds/profitbricks/features/NicApi.java | 16 +-
.../LoadBalancerIdOnlyResponseHandler.java | 51 ++++++
.../parser/nic/NicIdOnlyResponseHandler.java | 51 ++++++
.../profitbricks/BaseProfitBricksLiveTest.java | 161 +++++++++++++++--
...DeregisterLoadBalancerRequestBinderTest.java | 17 +-
.../RegisterLoadBalancerRequestBinderTest.java | 18 +-
...ofitBricksComputeServiceAdapterLiveTest.java | 74 --------
.../ProfitBricksComputeServiceLiveTest.java | 142 +++++++++++++++
.../compute/config/StatusPredicateTest.java | 145 ++++++++++++++++
.../ProvisioningStatusPollingPredicateTest.java | 173 -------------------
.../features/DataCenterApiLiveTest.java | 16 +-
.../features/DrivesApiLiveTest.java | 64 +++----
.../features/FirewallApiLiveTest.java | 110 ++++++------
.../profitbricks/features/ImageApiLiveTest.java | 30 ++--
.../features/IpBlockApiLiveTest.java | 63 ++++---
.../features/IpBlockApiMockTest.java | 4 +-
.../features/LoadBalancerApiLiveTest.java | 127 ++++++++------
.../features/LoadBalancerApiMockTest.java | 31 ++--
.../profitbricks/features/NicApiLiveTest.java | 104 +++++------
.../profitbricks/features/NicApiMockTest.java | 27 +--
.../features/ServerApiLiveTest.java | 71 +++-----
.../features/SnapshotApiLiveTest.java | 133 +++++++-------
.../features/StorageApiLiveTest.java | 65 +++----
.../LoadBalancerIdOnlyResponseHandlerTest.java | 41 +++++
.../nic/NicIdOnlyResponseHandlerTest.java | 40 +++++
.../loadbalancer/loadbalancer-create.xml | 28 ++-
.../loadbalancer/loadbalancer-deregister.xml | 26 ++-
.../loadbalancer/loadbalancer-register.xml | 32 ++--
.../loadbalancer/loadbalancer-update.xml | 27 ++-
.../src/test/resources/logback-test.xml | 74 ++++++++
.../src/test/resources/nic/nic-delete.xml | 21 ++-
.../test/resources/nic/nic-internetaccess.xml | 23 +--
.../src/test/resources/nic/nic-update.xml | 27 ++-
42 files changed, 1344 insertions(+), 914 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
index ba237c4..086fa3d 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinder.java
@@ -31,12 +31,10 @@ public class DeregisterLoadBalancerRequestBinder extends BaseProfitBricksRequest
@Override
protected String createPayload(LoadBalancer.Request.DeregisterPayload payload) {
- requestBuilder.append("<ws:deregisterServersOnLoadBalancer>")
- .append("<request>");
+ requestBuilder.append("<ws:deregisterServersOnLoadBalancer>");
for (String s : payload.serverIds())
requestBuilder.append(format("<serverIds>%s</serverIds>", s));
requestBuilder.append(format("<loadBalancerId>%s</loadBalancerId>", payload.id()))
- .append("</request>")
.append("</ws:deregisterServersOnLoadBalancer>");
return requestBuilder.toString();
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
index 21f1d84..3741dad 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinder.java
@@ -32,14 +32,12 @@ public class RegisterLoadBalancerRequestBinder extends BaseProfitBricksRequestBi
@Override
protected String createPayload(LoadBalancer.Request.RegisterPayload payload) {
requestBuilder
- .append("<ws:registerServersOnLoadBalancer>").append("<request>")
+ .append("<ws:registerServersOnLoadBalancer>")
.append(format("<loadBalancerId>%s</loadBalancerId>", payload.id()));
for (String s : payload.serverIds())
requestBuilder.append(format("<serverIds>%s</serverIds>", s));
- requestBuilder
- .append("</request>")
- .append("</ws:registerServersOnLoadBalancer>");
+ requestBuilder.append("</ws:registerServersOnLoadBalancer>");
return requestBuilder.toString().replaceAll("\\s+", "");
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
index 2b45d18..b3fe313 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
@@ -16,10 +16,15 @@
*/
package org.jclouds.profitbricks.compute.config;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PERIOD;
import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_MAX_PERIOD;
import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_SNAPSHOT;
import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_TIMEOUT;
+import static org.jclouds.util.Predicates2.retry;
import java.util.concurrent.TimeUnit;
@@ -49,11 +54,8 @@ import org.jclouds.profitbricks.compute.function.LocationToLocation;
import org.jclouds.profitbricks.compute.function.ProvisionableToImage;
import org.jclouds.profitbricks.compute.function.ServerToNodeMetadata;
import org.jclouds.profitbricks.compute.function.StorageToVolume;
-import org.jclouds.profitbricks.compute.internal.ProvisioningStatusAware;
-import org.jclouds.profitbricks.compute.internal.ProvisioningStatusPollingPredicate;
import org.jclouds.profitbricks.domain.ProvisioningState;
import org.jclouds.profitbricks.domain.Provisionable;
-import org.jclouds.util.Predicates2;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -101,10 +103,26 @@ public class ProfitBricksComputeServiceContextModule extends
@Provides
@Singleton
@Named(POLL_PREDICATE_DATACENTER)
- Predicate<String> provideWaitDataCenterUntilAvailablePredicate(
+ Predicate<String> provideDataCenterAvailablePredicate(
final ProfitBricksApi api, ComputeConstants constants) {
- return Predicates2.retry(new ProvisioningStatusPollingPredicate(
- api, ProvisioningStatusAware.DATACENTER, ProvisioningState.AVAILABLE),
+ return retry(new DataCenterProvisioningStatePredicate(
+ api, ProvisioningState.AVAILABLE),
+ constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
+ }
+
+ @Provides
+ @Named(TIMEOUT_NODE_RUNNING)
+ Predicate<String> provideServerRunningPredicate(final ProfitBricksApi api, ComputeConstants constants) {
+ return retry(new ServerStatusPredicate(
+ api, Server.Status.RUNNING),
+ constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
+ }
+
+ @Provides
+ @Named(TIMEOUT_NODE_SUSPENDED)
+ Predicate<String> provideServerSuspendedPredicate(final ProfitBricksApi api, ComputeConstants constants) {
+ return retry(new ServerStatusPredicate(
+ api, Server.Status.SHUTOFF),
constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
}
@@ -117,6 +135,69 @@ public class ProfitBricksComputeServiceContextModule extends
return provisioningManager;
}
+ @Provides
+ @Singleton
+ @Named(POLL_PREDICATE_SNAPSHOT)
+ Predicate<String> provideSnapshotAvailablePredicate(final ProfitBricksApi api, ComputeConstants constants) {
+ return retry(new SnapshotProvisioningStatePredicate(
+ api, ProvisioningState.AVAILABLE),
+ constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
+ }
+
+ static class DataCenterProvisioningStatePredicate implements Predicate<String> {
+
+ private final ProfitBricksApi api;
+ private final ProvisioningState expectedState;
+
+ public DataCenterProvisioningStatePredicate(ProfitBricksApi api, ProvisioningState expectedState) {
+ this.api = checkNotNull(api, "api must not be null");
+ this.expectedState = checkNotNull(expectedState, "expectedState must not be null");
+ }
+
+ @Override
+ public boolean apply(String input) {
+ checkNotNull(input, "datacenter id");
+ return api.dataCenterApi().getDataCenterState(input) == expectedState;
+ }
+
+ }
+
+ static class ServerStatusPredicate implements Predicate<String> {
+
+ private final ProfitBricksApi api;
+ private final Server.Status expectedStatus;
+
+ public ServerStatusPredicate(ProfitBricksApi api, Server.Status expectedStatus) {
+ this.api = checkNotNull(api, "api must not be null");
+ this.expectedStatus = checkNotNull(expectedStatus, "expectedStatus must not be null");
+ }
+
+ @Override
+ public boolean apply(String input) {
+ checkNotNull(input, "server id");
+ return api.serverApi().getServer(input).status() == expectedStatus;
+ }
+
+ }
+
+ static class SnapshotProvisioningStatePredicate implements Predicate<String> {
+
+ private final ProfitBricksApi api;
+ private final ProvisioningState expectedState;
+
+ public SnapshotProvisioningStatePredicate(ProfitBricksApi api, ProvisioningState expectedState) {
+ this.api = checkNotNull(api, "api must not be null");
+ this.expectedState = checkNotNull(expectedState, "expectedState must not be null");
+ }
+
+ @Override
+ public boolean apply(String input) {
+ checkNotNull(input, "snapshot id");
+ return api.snapshotApi().getSnapshot(input).state() == expectedState;
+ }
+
+ }
+
@Singleton
public static class ComputeConstants {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java
deleted file mode 100644
index bd00a3d..0000000
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.profitbricks.compute.internal;
-
-/**
- * An enumeration of ProfitBricks domain classes containing a property 'ProvisioningState'.
- *
- * @see ProvisioningStatusPollingPredicate
- */
-public enum ProvisioningStatusAware {
-
- DATACENTER, SERVER, STORAGE, NIC, SNAPSHOT;
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
deleted file mode 100644
index 41c3e93..0000000
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.profitbricks.compute.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.domain.ProvisioningState;
-
-import com.google.common.base.Predicate;
-import org.jclouds.rest.ResourceNotFoundException;
-
-/**
- * A custom predicate for waiting until a virtual resource satisfies the given expected status
- * <p>
- * Performing api requests on a datacenter that is not {@link ProvisioningState#AVAILABLE} is not allowed. On some
- * cases, the API user gets blocked from further requests, and will then need to contact tech support for api lock
- * release.
- */
-public class ProvisioningStatusPollingPredicate implements Predicate<String> {
-
- private final ProfitBricksApi api;
- private final ProvisioningStatusAware domain;
- private final ProvisioningState expect;
-
- public ProvisioningStatusPollingPredicate(ProfitBricksApi api, ProvisioningStatusAware domain, ProvisioningState expect) {
- this.api = checkNotNull(api, "API null");
- this.expect = checkNotNull(expect, "Expected state null");
- this.domain = checkNotNull(domain, "Domain null");
- }
-
- @Override
- public boolean apply(String input) {
- checkNotNull(input, "Virtual item id can't be null.");
- try {
- switch (domain) {
- case DATACENTER:
- return expect == api.dataCenterApi().getDataCenterState(input);
- case SERVER:
- return expect == api.serverApi().getServer(input).state();
- case STORAGE:
- return expect == api.storageApi().getStorage(input).state();
- case NIC:
- return expect == api.nicApi().getNic(input).state();
- case SNAPSHOT:
- return expect == api.snapshotApi().getSnapshot(input).state();
- default:
- throw new IllegalArgumentException("Unknown domain '" + domain + "'");
- }
- } catch (ResourceNotFoundException ex) {
- // After provisioning, a node might still not be "fetchable" via API
- return false;
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
index 19b0e53..8f5840d 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
@@ -19,6 +19,7 @@ package org.jclouds.profitbricks.config;
public class ProfitBricksComputeProperties {
public static final String POLL_PREDICATE_DATACENTER = "jclouds.profitbricks.predicate.datacenter";
+ public static final String POLL_PREDICATE_SNAPSHOT = "jclouds.profitbricks.predicate.snapshot";
public static final String POLL_TIMEOUT = "jclouds.profitbricks.poll.timeout";
public static final String POLL_PERIOD = "jclouds.profitbricks.operation.poll.initial-period";
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
index 6102a42..834fa86 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java
@@ -52,4 +52,9 @@ public enum Location {
return location;
return UNRECOGNIZED;
}
+
+ @Override
+ public String toString() {
+ return id;
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/IpBlockApi.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/IpBlockApi.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/IpBlockApi.java
index a81293e..ca9841d 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/IpBlockApi.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/IpBlockApi.java
@@ -17,14 +17,17 @@
package org.jclouds.profitbricks.features;
import java.util.List;
+
import javax.inject.Named;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+
import org.jclouds.Fallbacks;
import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.profitbricks.domain.IpBlock;
+import org.jclouds.profitbricks.domain.Location;
import org.jclouds.profitbricks.http.filters.ProfitBricksSoapMessageEnvelope;
import org.jclouds.profitbricks.http.parser.RequestIdOnlyResponseHandler;
import org.jclouds.profitbricks.http.parser.ipblock.IpBlockListResponseHandler;
@@ -58,7 +61,7 @@ public interface IpBlockApi {
@Named("publicipblock:reserve")
@Payload("<ws:reservePublicIpBlock><request><blockSize>{blockSize}</blockSize><location>{location}</location></request></ws:reservePublicIpBlock>")
@XMLResponseParser(IpBlockResponseHandler.class)
- IpBlock reservePublicIpBlock(@PayloadParam("blockSize") String blockSize, @PayloadParam("location") String location);
+ IpBlock reservePublicIpBlock(@PayloadParam("blockSize") int blockSize, @PayloadParam("location") Location location);
@POST
@Named("publicipblock:addip")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
index 3d37183..6cf8e23 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/LoadBalancerApi.java
@@ -21,7 +21,9 @@ import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+
import java.util.List;
+
import org.jclouds.Fallbacks;
import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.profitbricks.binder.loadbalancer.CreateLoadBalancerRequestBinder;
@@ -31,6 +33,7 @@ import org.jclouds.profitbricks.binder.loadbalancer.UpdateLoadBalancerRequestBin
import org.jclouds.profitbricks.domain.LoadBalancer;
import org.jclouds.profitbricks.http.filters.ProfitBricksSoapMessageEnvelope;
import org.jclouds.profitbricks.http.parser.RequestIdOnlyResponseHandler;
+import org.jclouds.profitbricks.http.parser.loadbalancer.LoadBalancerIdOnlyResponseHandler;
import org.jclouds.profitbricks.http.parser.loadbalancer.LoadBalancerListResponseHandler;
import org.jclouds.profitbricks.http.parser.loadbalancer.LoadBalancerResponseHandler;
import org.jclouds.rest.annotations.Fallback;
@@ -62,7 +65,7 @@ public interface LoadBalancerApi {
@POST
@Named("loadbalancer:create")
@MapBinder(CreateLoadBalancerRequestBinder.class)
- @XMLResponseParser(RequestIdOnlyResponseHandler.class)
+ @XMLResponseParser(LoadBalancerIdOnlyResponseHandler.class)
String createLoadBalancer(@PayloadParam("loadbalancer") LoadBalancer.Request.CreatePayload payload);
@POST
@@ -72,10 +75,10 @@ public interface LoadBalancerApi {
LoadBalancer registerLoadBalancer(@PayloadParam("loadbalancer") LoadBalancer.Request.RegisterPayload payload);
@POST
- @Named("loadbalancer:Deregister")
+ @Named("loadbalancer:deregister")
@MapBinder(DeregisterLoadBalancerRequestBinder.class)
- @XMLResponseParser(LoadBalancerResponseHandler.class)
- LoadBalancer deregisterLoadBalancer(@PayloadParam("loadbalancer") LoadBalancer.Request.DeregisterPayload payload);
+ @XMLResponseParser(RequestIdOnlyResponseHandler.class)
+ String deregisterLoadBalancer(@PayloadParam("loadbalancer") LoadBalancer.Request.DeregisterPayload payload);
@POST
@Named("loadbalancer:delete")
@@ -85,6 +88,6 @@ public interface LoadBalancerApi {
@POST
@Named("loadbalancer:update")
@MapBinder(UpdateLoadBalancerRequestBinder.class)
- @XMLResponseParser(LoadBalancerResponseHandler.class)
- LoadBalancer updateLoadBalancer(@PayloadParam("loadbalancer") LoadBalancer.Request.UpdatePayload payload);
+ @XMLResponseParser(RequestIdOnlyResponseHandler.class)
+ String updateLoadBalancer(@PayloadParam("loadbalancer") LoadBalancer.Request.UpdatePayload payload);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/NicApi.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/NicApi.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/NicApi.java
index 57e425f..c945935 100644
--- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/NicApi.java
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/NicApi.java
@@ -37,8 +37,12 @@ import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.POST;
+
import java.util.List;
+import org.jclouds.profitbricks.http.parser.RequestIdOnlyResponseHandler;
+import org.jclouds.profitbricks.http.parser.nic.NicIdOnlyResponseHandler;
+
@RequestFilters({BasicAuthentication.class, ProfitBricksSoapMessageEnvelope.class})
@Consumes(MediaType.TEXT_XML)
@Produces(MediaType.TEXT_XML)
@@ -54,8 +58,8 @@ public interface NicApi {
@POST
@Named("nic:create")
@MapBinder(CreateNicRequestBinder.class)
- @XMLResponseParser(NicResponseHandler.class)
- Nic createNic(@PayloadParam("nic") Nic.Request.CreatePayload payload);
+ @XMLResponseParser(NicIdOnlyResponseHandler.class)
+ String createNic(@PayloadParam("nic") Nic.Request.CreatePayload payload);
@POST
@Named("nic:get")
@@ -67,14 +71,14 @@ public interface NicApi {
@POST
@Named("nic:update")
@MapBinder(UpdateNicRequestBinder.class)
- @XMLResponseParser(NicResponseHandler.class)
- Nic updateNic(@PayloadParam("nic") Nic.Request.UpdatePayload payload);
+ @XMLResponseParser(RequestIdOnlyResponseHandler.class)
+ String updateNic(@PayloadParam("nic") Nic.Request.UpdatePayload payload);
@POST
@Named("nic:setInternetAccess")
@MapBinder(SetInternetAccessBinder.class)
- @XMLResponseParser(NicResponseHandler.class)
- Nic setInternetAccess(@PayloadParam("nic") Nic.Request.SetInternetAccessPayload payload);
+ @XMLResponseParser(RequestIdOnlyResponseHandler.class)
+ String setInternetAccess(@PayloadParam("nic") Nic.Request.SetInternetAccessPayload payload);
@POST
@Named("nic:delete")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerIdOnlyResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerIdOnlyResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerIdOnlyResponseHandler.java
new file mode 100644
index 0000000..a239336
--- /dev/null
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerIdOnlyResponseHandler.java
@@ -0,0 +1,51 @@
+/*
+ * 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.profitbricks.http.parser.loadbalancer;
+
+import org.jclouds.profitbricks.http.parser.BaseProfitBricksResponseHandler;
+import org.xml.sax.SAXException;
+
+/**
+ * Handler for parsing SOAP response where <i>loadBalancerId</i> is the only <i>usable</i> value.
+ *
+ * Other properties available (which are ignored): requestId, dataCenterId, dataCenterVersion
+ */
+public class LoadBalancerIdOnlyResponseHandler extends BaseProfitBricksResponseHandler<String> {
+
+ private String loadBalancerId;
+
+ LoadBalancerIdOnlyResponseHandler() {
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ setPropertyOnEndTag(qName);
+ clearTextBuffer();
+ }
+
+ @Override
+ protected void setPropertyOnEndTag(String qName) {
+ if ("loadBalancerId".equals(qName))
+ loadBalancerId = textToStringValue();
+ }
+
+ @Override
+ public String getResult() {
+ return loadBalancerId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicIdOnlyResponseHandler.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicIdOnlyResponseHandler.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicIdOnlyResponseHandler.java
new file mode 100644
index 0000000..8f8ba03
--- /dev/null
+++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/nic/NicIdOnlyResponseHandler.java
@@ -0,0 +1,51 @@
+/*
+ * 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.profitbricks.http.parser.nic;
+
+import org.jclouds.profitbricks.http.parser.BaseProfitBricksResponseHandler;
+import org.xml.sax.SAXException;
+
+/**
+ * Handler for parsing SOAP response where <i>nicId</i> is the only <i>usable</i> value.
+ *
+ * Other properties available (which are ignored): requestId, dataCenterId, dataCenterVersion
+ */
+public class NicIdOnlyResponseHandler extends BaseProfitBricksResponseHandler<String> {
+
+ private String nicId;
+
+ NicIdOnlyResponseHandler() {
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ setPropertyOnEndTag(qName);
+ clearTextBuffer();
+ }
+
+ @Override
+ protected void setPropertyOnEndTag(String qName) {
+ if ("nicId".equals(qName))
+ nicId = textToStringValue();
+ }
+
+ @Override
+ public String getResult() {
+ return nicId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/BaseProfitBricksLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/BaseProfitBricksLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/BaseProfitBricksLiveTest.java
index e310b6e..524149a 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/BaseProfitBricksLiveTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/BaseProfitBricksLiveTest.java
@@ -16,30 +16,171 @@
*/
package org.jclouds.profitbricks;
-import java.util.concurrent.TimeUnit;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_SNAPSHOT;
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Properties;
import org.jclouds.apis.BaseApiLiveTest;
-import org.jclouds.profitbricks.compute.internal.ProvisioningStatusAware;
-import org.jclouds.profitbricks.compute.internal.ProvisioningStatusPollingPredicate;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.Location;
+import org.jclouds.profitbricks.domain.Server;
import org.jclouds.profitbricks.domain.ProvisioningState;
-import org.jclouds.util.Predicates2;
+import org.jclouds.profitbricks.features.DataCenterApi;
+import org.jclouds.profitbricks.features.ServerApi;
import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.FluentIterable;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
+
+import org.jclouds.profitbricks.domain.Nic;
+import org.jclouds.profitbricks.features.NicApi;
public abstract class BaseProfitBricksLiveTest extends BaseApiLiveTest<ProfitBricksApi> {
- protected Predicate<String> dcWaitingPredicate;
+ public static final Location testLocation = Location.US_LAS;
+
+ private Predicate<String> dataCenterAvailable;
+ private Predicate<String> snapshotAvailable;
+ private Predicate<String> serverRunning;
+ private Predicate<String> serverSuspended;
public BaseProfitBricksLiveTest() {
provider = "profitbricks";
}
@Override
- protected void initialize() {
- super.initialize();
- this.dcWaitingPredicate = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(api, ProvisioningStatusAware.DATACENTER, ProvisioningState.AVAILABLE),
- 2l * 60l, 2l, TimeUnit.SECONDS);
+ protected ProfitBricksApi create(Properties props, Iterable<Module> modules) {
+ Injector injector = newBuilder().modules(modules).overrides(props).buildInjector();
+ dataCenterAvailable = injector.getInstance(Key.get(new TypeLiteral<Predicate<String>>() {
+ }, Names.named(POLL_PREDICATE_DATACENTER)));
+ snapshotAvailable = injector.getInstance(Key.get(new TypeLiteral<Predicate<String>>() {
+ }, Names.named(POLL_PREDICATE_SNAPSHOT)));
+ serverRunning = injector.getInstance(Key.get(new TypeLiteral<Predicate<String>>() {
+ }, Names.named(TIMEOUT_NODE_RUNNING)));
+ serverSuspended = injector.getInstance(Key.get(new TypeLiteral<Predicate<String>>() {
+ }, Names.named(TIMEOUT_NODE_SUSPENDED)));
+
+ return injector.getInstance(ProfitBricksApi.class);
+ }
+
+ protected void assertDataCenterAvailable(DataCenter dataCenter) {
+ assertDataCenterAvailable(dataCenter.id());
+ }
+
+ protected void assertDataCenterAvailable(String dataCenterId) {
+ assertTrue(dataCenterAvailable.apply(dataCenterId),
+ String.format("Datacenter %s wasn't available in the configured timeout", dataCenterId));
+ }
+
+ protected void assertSnapshotAvailable(String snapshotId){
+ assertTrue(snapshotAvailable.apply(snapshotId),
+ String.format("Snapshot %s wasn't available in the configured timeout", snapshotId));
+ }
+
+ protected void assertNodeRunning(String serverId) {
+ assertTrue(serverRunning.apply(serverId), String.format("Server %s did not start in the configured timeout", serverId));
+ }
+
+ protected void assertNodeSuspended(String serverId) {
+ assertTrue(serverSuspended.apply(serverId), String.format("Server %s did not stop in the configured timeout", serverId));
+ }
+
+ protected DataCenter findOrCreateDataCenter(final String name) {
+ DataCenterApi dataCenterApi = api.dataCenterApi();
+
+ return FluentIterable.from(dataCenterApi.getAllDataCenters()).firstMatch(new Predicate<DataCenter>() {
+
+ @Override
+ public boolean apply(DataCenter input) {
+ boolean match = Objects.equals(input.name(), name);
+ if (match && input.location() == testLocation)
+ assertDataCenterAvailable(input);
+
+ return match;
+ }
+ }).or(new Supplier<DataCenter>() {
+
+ @Override
+ public DataCenter get() {
+ DataCenter dataCenter = api.dataCenterApi().createDataCenter(
+ DataCenter.Request.creatingPayload(name, testLocation));
+ assertDataCenterAvailable(dataCenter);
+
+ return api.dataCenterApi().getDataCenter(dataCenter.id());
+ }
+ });
+ }
+
+ protected Server findOrCreateServer(final DataCenter dataCenter) {
+ return FluentIterable.from(dataCenter.servers()).firstMatch(new Predicate<Server>() {
+
+ @Override
+ public boolean apply(Server input) {
+ return input.state() == ProvisioningState.AVAILABLE;
+ }
+ }).or(new Supplier<Server>() {
+
+ @Override
+ public Server get() {
+ ServerApi serverApi = api.serverApi();
+ String name = String.format("server-%d", dataCenter.servers().size());
+ String createdServerId = serverApi.createServer(
+ Server.Request.creatingBuilder()
+ .dataCenterId(dataCenter.id())
+ .name(name)
+ .cores(1)
+ .ram(256)
+ .build());
+ assertDataCenterAvailable(dataCenter);
+ assertNodeRunning(createdServerId);
+
+ return serverApi.getServer(createdServerId);
+ }
+ });
+ }
+
+ protected Nic findOrCreateNic(final DataCenter dataCenter) {
+ final NicApi nicApi = api.nicApi();
+ final List<Nic> nics = nicApi.getAllNics();
+
+ return FluentIterable.from(nics).firstMatch(new Predicate<Nic>() {
+
+ @Override
+ public boolean apply(Nic input) {
+ return Objects.equals(input.dataCenterId(), dataCenter.id())
+ && input.state() == ProvisioningState.AVAILABLE;
+ }
+ }).or(new Supplier<Nic>() {
+
+ @Override
+ public Nic get() {
+ Server server = findOrCreateServer(dataCenter);
+ String name = String.format("%s-nic-%d", server.name(), nics.size());
+ String nicId = nicApi.createNic(Nic.Request.creatingBuilder()
+ .name(name)
+ .lanId(1)
+ .serverId(server.id())
+ .build());
+ assertDataCenterAvailable(dataCenter);
+
+ return nicApi.getNic(nicId);
+ }
+ });
}
+ protected void destroyDataCenter(final DataCenter dataCenter) {
+ boolean success = api.dataCenterApi().deleteDataCenter(dataCenter.id());
+ assertTrue(success, "DataCenter wasn't deleted");
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
index b1fa5c3..c690fb3 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/DeregisterLoadBalancerRequestBinderTest.java
@@ -16,11 +16,12 @@
*/
package org.jclouds.profitbricks.binder.loadbalancer;
-import com.google.common.collect.Lists;
-import java.util.List;
-import org.jclouds.profitbricks.domain.LoadBalancer;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+
+import com.google.common.collect.ImmutableList;
+
+import org.jclouds.profitbricks.domain.LoadBalancer;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "DeregisterLoadBalancerRequestBinderTest")
@@ -29,13 +30,9 @@ public class DeregisterLoadBalancerRequestBinderTest {
@Test
public void testDeregisterPayload() {
DeregisterLoadBalancerRequestBinder binder = new DeregisterLoadBalancerRequestBinder();
- List<String> serverIds = Lists.newArrayList();
- serverIds.add("1");
- serverIds.add("2");
-
- LoadBalancer.Request.DeregisterPayload payload = LoadBalancer.Request.createDeregisteringPayload("load-balancer-id", serverIds);
- String actual = binder.createPayload(payload);
+ String actual = binder.createPayload(LoadBalancer.Request.createDeregisteringPayload(
+ "load-balancer-id", ImmutableList.of("1", "2")));
assertNotNull(actual, "Binder returned null payload");
assertEquals(expectedPayload, actual);
@@ -43,10 +40,8 @@ public class DeregisterLoadBalancerRequestBinderTest {
private final String expectedPayload
= (" <ws:deregisterServersOnLoadBalancer>\n"
- + " <request>"
+ " <serverIds>1</serverIds>\n"
+ " <serverIds>2</serverIds>\n"
+ " <loadBalancerId>load-balancer-id</loadBalancerId>\n"
- + " </request>"
+ " </ws:deregisterServersOnLoadBalancer>").replaceAll("\\s+", "");
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
index db42403..8f2e5a9 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/loadbalancer/RegisterLoadBalancerRequestBinderTest.java
@@ -16,11 +16,12 @@
*/
package org.jclouds.profitbricks.binder.loadbalancer;
-import com.google.common.collect.Lists;
-import java.util.List;
-import org.jclouds.profitbricks.domain.LoadBalancer;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.profitbricks.domain.LoadBalancer;
+
+import com.google.common.collect.ImmutableList;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "RegisterLoadBalancerRequestBinderTest")
@@ -29,13 +30,8 @@ public class RegisterLoadBalancerRequestBinderTest {
@Test
public void testRegisterPayload() {
RegisterLoadBalancerRequestBinder binder = new RegisterLoadBalancerRequestBinder();
- List<String> serverIds = Lists.newArrayList();
- serverIds.add("1");
- serverIds.add("2");
-
- LoadBalancer.Request.RegisterPayload payload = LoadBalancer.Request.createRegisteringPaylod("load-balancer-id", serverIds);
-
- String actual = binder.createPayload(payload);
+ String actual = binder.createPayload(LoadBalancer.Request.createRegisteringPaylod(
+ "load-balancer-id", ImmutableList.of("1", "2")));
assertNotNull(actual, "Binder returned null payload");
assertEquals(expectedPayload, actual);
@@ -43,10 +39,8 @@ public class RegisterLoadBalancerRequestBinderTest {
private final String expectedPayload
= (" <ws:registerServersOnLoadBalancer>\n"
- + " <request>"
+ " <loadBalancerId>load-balancer-id</loadBalancerId>\n"
+ " <serverIds>1</serverIds>\n"
+ " <serverIds>2</serverIds>\n"
- + " </request>"
+ " </ws:registerServersOnLoadBalancer>").replaceAll("\\s+", "");
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
deleted file mode 100644
index 83540a5..0000000
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.profitbricks.compute;
-
-import org.jclouds.compute.domain.NodeMetadata;
-import org.testng.annotations.Test;
-
-import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
-import org.jclouds.sshj.config.SshjSshClientModule;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Module;
-import org.jclouds.compute.domain.ExecResponse;
-import org.jclouds.logging.config.LoggingModule;
-import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
-
-@Test(groups = "live", singleThreaded = true, testName = "ProfitBricksComputeServiceAdapterLiveTest")
-public class ProfitBricksComputeServiceAdapterLiveTest extends BaseComputeServiceLiveTest {
-
- public ProfitBricksComputeServiceAdapterLiveTest() {
- provider = "profitbricks";
- }
-
- @Override
- protected Module getSshModule() {
- return new SshjSshClientModule();
- }
-
- @Override
- protected LoggingModule getLoggingModule() {
- return new SLF4JLoggingModule();
- }
-
- @Override
- public void testOptionToNotBlock() throws Exception {
- // ProfitBricks implementation intentionally blocks until the node is 'AVAILABLE'
- }
-
- @Override
- protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) {
- // ProfitBricks doesn't support tags
- }
-
- @Override
- protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
- // ProfitBricks doesn't support user metadata
- }
-
- @Override
- protected void checkResponseEqualsHostname(ExecResponse execResponse, NodeMetadata node1) {
- // ProfitBricks doesn't support hostname
- }
-
- @Override
- protected void checkOsMatchesTemplate(NodeMetadata node) {
- // Not enough description from API to match template
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java
new file mode 100644
index 0000000..2599f71
--- /dev/null
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java
@@ -0,0 +1,142 @@
+/*
+ * 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.profitbricks.compute;
+
+import static org.jclouds.profitbricks.BaseProfitBricksLiveTest.testLocation;
+import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
+
+import java.util.Objects;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.FluentIterable;
+
+import org.jclouds.compute.domain.NodeMetadata;
+import org.testng.annotations.Test;
+
+import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
+import org.jclouds.sshj.config.SshjSshClientModule;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
+
+import org.jclouds.compute.domain.ExecResponse;
+import org.jclouds.logging.config.LoggingModule;
+import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
+import org.jclouds.profitbricks.ProfitBricksApi;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.features.DataCenterApi;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeGroups;
+
+@Test(groups = "live", singleThreaded = true, testName = "ProfitBricksComputeServiceLiveTest")
+public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTest {
+
+ private static final String TEST_DC_NAME = "computeServiceLiveTest" + System.currentTimeMillis();
+
+ private DataCenter dataCenter;
+
+ public ProfitBricksComputeServiceLiveTest() {
+ provider = "profitbricks";
+ }
+
+ @BeforeGroups(groups = {"integration", "live"})
+ @Override
+ public void setupContext() {
+ super.setupContext();
+
+ final DataCenterApi api = getDataCenterApi();
+ final Predicate<String> predicate = getDataCenterPredicate();
+ dataCenter = FluentIterable.from(api.getAllDataCenters()).firstMatch(new Predicate<DataCenter>() {
+
+ @Override
+ public boolean apply(DataCenter input) {
+ boolean match = Objects.equals(input.name(), TEST_DC_NAME);
+ if (match && input.location() == testLocation)
+ return predicate.apply(input.id());
+ return match;
+ }
+ }).or(new Supplier<DataCenter>() {
+
+ @Override
+ public DataCenter get() {
+ DataCenter dataCenter = api.createDataCenter(
+ DataCenter.Request.creatingPayload(TEST_DC_NAME, testLocation));
+ predicate.apply(dataCenter.id());
+
+ return api.getDataCenter(dataCenter.id());
+ }
+ });
+ }
+
+ @AfterClass(groups = {"integration", "live"}, alwaysRun = true)
+ @Override
+ protected void tearDownContext() {
+ super.tearDownContext();
+ if (dataCenter != null)
+ getDataCenterApi().deleteDataCenter(dataCenter.id());
+ }
+
+ private Predicate<String> getDataCenterPredicate() {
+ return client.getContext().utils().injector().getInstance(Key.get(new TypeLiteral<Predicate<String>>() {
+ }, Names.named(POLL_PREDICATE_DATACENTER)));
+ }
+
+ private DataCenterApi getDataCenterApi() {
+ return client.getContext().unwrapApi(ProfitBricksApi.class).dataCenterApi();
+ }
+
+ @Override
+ protected Module getSshModule() {
+ return new SshjSshClientModule();
+ }
+
+ @Override
+ protected LoggingModule getLoggingModule() {
+ return new SLF4JLoggingModule();
+ }
+
+ @Override
+ public void testOptionToNotBlock() throws Exception {
+ // ProfitBricks implementation intentionally blocks until the node is 'AVAILABLE'
+ }
+
+ @Override
+ protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) {
+ // ProfitBricks doesn't support tags
+ }
+
+ @Override
+ protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
+ // ProfitBricks doesn't support user metadata
+ }
+
+ @Override
+ protected void checkResponseEqualsHostname(ExecResponse execResponse, NodeMetadata node1) {
+ // ProfitBricks doesn't support hostname
+ }
+
+ @Override
+ protected void checkOsMatchesTemplate(NodeMetadata node) {
+ // Not enough description from API to match template
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/config/StatusPredicateTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/config/StatusPredicateTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/config/StatusPredicateTest.java
new file mode 100644
index 0000000..9c2b228
--- /dev/null
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/config/StatusPredicateTest.java
@@ -0,0 +1,145 @@
+/*
+ * 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.profitbricks.compute.config;
+
+import static org.jclouds.profitbricks.internal.BaseProfitBricksMockTest.mockWebServer;
+import static org.testng.Assert.assertEquals;
+
+import java.util.concurrent.TimeUnit;
+
+import org.jclouds.profitbricks.ProfitBricksApi;
+import org.jclouds.profitbricks.compute.config.ProfitBricksComputeServiceContextModule.DataCenterProvisioningStatePredicate;
+import org.jclouds.profitbricks.compute.config.ProfitBricksComputeServiceContextModule.ServerStatusPredicate;
+import org.jclouds.profitbricks.compute.config.ProfitBricksComputeServiceContextModule.SnapshotProvisioningStatePredicate;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.domain.Snapshot;
+import org.jclouds.profitbricks.internal.BaseProfitBricksMockTest;
+import org.jclouds.util.Predicates2;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+
+
+/**
+ * Test class for {@link DataCenterProvisioningStatePredicate} and {@link ServerStatusPredicate}
+ */
+@Test(groups = "unit", testName = "ProvisioningStatusPollingPredicateTest")
+public class StatusPredicateTest extends BaseProfitBricksMockTest {
+
+ @Test
+ public void testDataCenterPredicate() throws Exception {
+ MockWebServer server = mockWebServer();
+
+ byte[] payloadInProcess = payloadFromResource("/datacenter/datacenter-state-inprocess.xml");
+ byte[] payloadAvailable = payloadFromResource("/datacenter/datacenter-state.xml");
+
+ // wait 3 times
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadAvailable));
+
+ server.enqueue(new MockResponse().setBody(payloadAvailable));
+
+ ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+
+ Predicate<String> waitUntilAvailable = Predicates2.retry(
+ new DataCenterProvisioningStatePredicate(pbApi, ProvisioningState.AVAILABLE),
+ 30l, 1l, TimeUnit.SECONDS);
+
+ String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+ try {
+ waitUntilAvailable.apply(id);
+ ProvisioningState finalState = pbApi.dataCenterApi().getDataCenterState(id);
+ assertRequestHasCommonProperties(server.takeRequest());
+ assertEquals(finalState, ProvisioningState.AVAILABLE);
+ } finally {
+ pbApi.close();
+ server.shutdown();
+ }
+ }
+
+ @Test
+ public void testServerPredicate() throws Exception {
+ MockWebServer server = mockWebServer();
+
+ byte[] payloadInProcess = payloadFromResource("/server/server-state-inprocess.xml");
+ byte[] payloadAvailable = payloadFromResource("/server/server.xml");
+
+ // wait 3 times
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadAvailable));
+
+ server.enqueue(new MockResponse().setBody(payloadAvailable));
+
+ ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+
+ Predicate<String> waitUntilAvailable = Predicates2.retry(
+ new ServerStatusPredicate(pbApi, Server.Status.RUNNING),
+ 30l, 1l, TimeUnit.SECONDS);
+
+ String id = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+ try {
+ waitUntilAvailable.apply(id);
+ Server remoteServer = pbApi.serverApi().getServer(id);
+ assertEquals(remoteServer.status(), Server.Status.RUNNING);
+ assertRequestHasCommonProperties(server.takeRequest());
+ } finally {
+ pbApi.close();
+ server.shutdown();
+ }
+ }
+
+ @Test
+ public void testSnapshotPredicate() throws Exception {
+ MockWebServer server = mockWebServer();
+
+ byte[] payloadInProcess = payloadFromResource("/snapshot/snapshot-state-inprocess.xml");
+ byte[] payloadAvailable = payloadFromResource("/snapshot/snapshot.xml");
+
+ // wait 3 times
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadInProcess));
+ server.enqueue(new MockResponse().setBody(payloadAvailable));
+
+ server.enqueue(new MockResponse().setBody(payloadAvailable));
+
+ ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+
+ Predicate<String> waitUntilAvailable = Predicates2.retry(
+ new SnapshotProvisioningStatePredicate(pbApi, ProvisioningState.AVAILABLE),
+ 30l, 1l, TimeUnit.SECONDS);
+
+ String id = "qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh";
+ try {
+ waitUntilAvailable.apply(id);
+ Snapshot snapshot = pbApi.snapshotApi().getSnapshot(id);
+ assertEquals(snapshot.state(), ProvisioningState.AVAILABLE);
+ assertRequestHasCommonProperties(server.takeRequest());
+ } finally {
+ pbApi.close();
+ server.shutdown();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
deleted file mode 100644
index 690412a..0000000
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicateTest.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * 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.profitbricks.compute.internal;
-
-import static org.jclouds.profitbricks.internal.BaseProfitBricksMockTest.mockWebServer;
-import static org.testng.Assert.assertEquals;
-
-import java.util.concurrent.TimeUnit;
-
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.domain.ProvisioningState;
-import org.jclouds.profitbricks.internal.BaseProfitBricksMockTest;
-import org.jclouds.util.Predicates2;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicate;
-import com.squareup.okhttp.mockwebserver.MockResponse;
-import com.squareup.okhttp.mockwebserver.MockWebServer;
-
-/**
- * Tests for the {@link ProvisioningStatusPollingPredicate} class.
- * <p>
- */
-@Test(groups = "unit", testName = "ProvisioningStatusPollingPredicateTest")
-public class ProvisioningStatusPollingPredicateTest extends BaseProfitBricksMockTest {
-
- @Test
- public void testDataCenterPredicate() throws Exception {
- MockWebServer server = mockWebServer();
-
- byte[] payloadInProcess = payloadFromResource("/datacenter/datacenter-state-inprocess.xml");
- byte[] payloadAvailable = payloadFromResource("/datacenter/datacenter-state.xml");
-
- // wait 3 times
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
-
- Predicate<String> waitUntilAvailable = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(pbApi, ProvisioningStatusAware.DATACENTER, ProvisioningState.AVAILABLE),
- 30l, 1l, TimeUnit.SECONDS);
-
- String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
- try {
- waitUntilAvailable.apply(id);
- ProvisioningState finalState = pbApi.dataCenterApi().getDataCenterState(id);
- assertRequestHasCommonProperties(server.takeRequest());
- assertEquals(finalState, ProvisioningState.AVAILABLE);
- } finally {
- pbApi.close();
- server.shutdown();
- }
- }
-
- @Test
- public void testServerPredicate() throws Exception {
- MockWebServer server = mockWebServer();
-
- byte[] payloadInProcess = payloadFromResource("/server/server-state-inprocess.xml");
- byte[] payloadAvailable = payloadFromResource("/server/server.xml");
-
- // wait 3 times
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
-
- Predicate<String> waitUntilAvailable = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(pbApi, ProvisioningStatusAware.SERVER, ProvisioningState.AVAILABLE),
- 30l, 1l, TimeUnit.SECONDS);
-
- String id = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
- try {
- waitUntilAvailable.apply(id);
- ProvisioningState finalState = pbApi.serverApi().getServer(id).state();
- assertRequestHasCommonProperties(server.takeRequest());
- assertEquals(finalState, ProvisioningState.AVAILABLE);
- } finally {
- pbApi.close();
- server.shutdown();
- }
- }
-
- @Test
- public void testStoragePredicate() throws Exception {
- MockWebServer server = mockWebServer();
-
- byte[] payloadInProcess = payloadFromResource("/storage/storage-state-inprocess.xml");
- byte[] payloadAvailable = payloadFromResource("/storage/storage.xml");
-
- // wait 3 times
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
-
- Predicate<String> waitUntilAvailable = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(pbApi, ProvisioningStatusAware.STORAGE, ProvisioningState.AVAILABLE),
- 30l, 1l, TimeUnit.SECONDS);
-
- String id = "qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh";
- try {
- waitUntilAvailable.apply(id);
- ProvisioningState finalState = pbApi.storageApi().getStorage(id).state();
- assertRequestHasCommonProperties(server.takeRequest());
- assertEquals(finalState, ProvisioningState.AVAILABLE);
- } finally {
- pbApi.close();
- server.shutdown();
- }
- }
-
- @Test
- public void testSnapshotPredicate() throws Exception {
- MockWebServer server = mockWebServer();
-
- byte[] payloadInProcess = payloadFromResource("/snapshot/snapshot-state-inprocess.xml");
- byte[] payloadAvailable = payloadFromResource("/snapshot/snapshot.xml");
-
- // wait 3 times
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadInProcess));
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- server.enqueue(new MockResponse().setBody(payloadAvailable));
-
- ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
-
- Predicate<String> waitUntilAvailable = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(pbApi, ProvisioningStatusAware.SNAPSHOT, ProvisioningState.AVAILABLE),
- 30l, 1l, TimeUnit.SECONDS);
-
- String id = "qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh";
- try {
- waitUntilAvailable.apply(id);
- ProvisioningState finalState = pbApi.snapshotApi().getSnapshot(id).state();
- assertRequestHasCommonProperties(server.takeRequest());
- assertEquals(finalState, ProvisioningState.AVAILABLE);
- } finally {
- pbApi.close();
- server.shutdown();
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiLiveTest.java
index 6bcf053..33a086c 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiLiveTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiLiveTest.java
@@ -20,6 +20,7 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
import java.util.List;
@@ -28,12 +29,10 @@ import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.Location;
import org.jclouds.profitbricks.domain.ProvisioningState;
-import static org.testng.Assert.assertTrue;
-
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
-@Test(groups = "live", testName = "DataCenterApiLiveTest", singleThreaded = true)
+@Test(groups = "live", testName = "DataCenterApiLiveTest")
public class DataCenterApiLiveTest extends BaseProfitBricksLiveTest {
private String dcId;
@@ -45,7 +44,7 @@ public class DataCenterApiLiveTest extends BaseProfitBricksLiveTest {
);
assertNotNull(dc);
- dcWaitingPredicate.apply(dc.id());
+ assertDataCenterAvailable(dc);
dcId = dc.id();
}
@@ -87,7 +86,7 @@ public class DataCenterApiLiveTest extends BaseProfitBricksLiveTest {
);
assertNotNull(dataCenter);
- dcWaitingPredicate.apply(dcId);
+ assertDataCenterAvailable(dataCenter);
DataCenter fetchedDc = api.dataCenterApi().getDataCenter(dcId);
@@ -118,10 +117,7 @@ public class DataCenterApiLiveTest extends BaseProfitBricksLiveTest {
@AfterClass(alwaysRun = true)
public void testDeleteDataCenter() {
- if (dcId != null) {
- boolean result = api.dataCenterApi().deleteDataCenter(dcId);
-
- assertTrue(result, "Created test data center was not deleted.");
- }
+ boolean result = api.dataCenterApi().deleteDataCenter(dcId);
+ assertTrue(result, "Created test data center was not deleted.");
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
index 2f3c767..ff4dbb4 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DrivesApiLiveTest.java
@@ -16,51 +16,48 @@
*/
package org.jclouds.profitbricks.features;
-import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
-import java.util.List;
-
import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
+import org.jclouds.profitbricks.domain.DataCenter;
import org.jclouds.profitbricks.domain.Drive;
import org.jclouds.profitbricks.domain.Image;
import org.jclouds.profitbricks.domain.Server;
import org.testng.annotations.Test;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
-@Test(groups = "live", testName = "DrivesApiLiveTest", singleThreaded = true)
+@Test(groups = "live", testName = "DrivesApiLiveTest")
public class DrivesApiLiveTest extends BaseProfitBricksLiveTest {
- public String serverId;
- public String imageId;
-
- @Override
- protected void initialize() {
- super.initialize();
-
- List<Server> servers = api.serverApi().getAllServers();
- assertFalse(servers.isEmpty(), "At least one server is required to run drives test.");
-
- Server server = Iterables.getFirst(servers, null);
- assertNotNull(server);
-
- this.serverId = server.id();
-
- List<Image> images = api.imageApi().getAllImages();
- assertFalse(images.isEmpty(), "At least one image is required to run drives test.");
-
- Image image = Iterables.getFirst(images, null);
- assertNotNull(image);
-
- this.imageId = image.id();
+ private DataCenter dataCenter;
+ private Server server;
+ private Image image;
+
+ @BeforeClass
+ public void setupTest() {
+ dataCenter = findOrCreateDataCenter("drivesApiLiveTest" + System.currentTimeMillis());
+ server = findOrCreateServer(dataCenter);
+ image = Iterables.tryFind(api.imageApi().getAllImages(), new Predicate<Image>() {
+
+ @Override
+ public boolean apply(Image input) {
+ return input.location() == dataCenter.location()
+ && input.type() == Image.Type.CDROM;
+ }
+ }).get();
}
@Test
public void addRomDriveToServerTest() {
- String requestId = api.drivesApi().addRomDriveToServer(Drive.Request.AddRomDriveToServerPayload.builder()
- .serverId(serverId)
- .imageId("05cadf29-6c12-11e4-beeb-52540066fee9")
+ assertDataCenterAvailable(dataCenter);
+ String requestId = api.drivesApi().addRomDriveToServer(
+ Drive.Request.AddRomDriveToServerPayload.builder()
+ .serverId(server.id())
+ .imageId(image.id())
.deviceNumber("0")
.build());
assertNotNull(requestId);
@@ -68,8 +65,13 @@ public class DrivesApiLiveTest extends BaseProfitBricksLiveTest {
@Test(dependsOnMethods = "addRomDriveToServerTest")
public void removeRomDriveFromServerTest() {
- String requestId = api.drivesApi().removeRomDriveFromServer(imageId, serverId);
-
+ assertDataCenterAvailable(dataCenter);
+ String requestId = api.drivesApi().removeRomDriveFromServer(image.id(), server.id());
assertNotNull(requestId);
}
+
+ @AfterClass(alwaysRun = true)
+ public void cleanUp() {
+ destroyDataCenter(dataCenter);
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
index 772667a..c5b63f2 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/FirewallApiLiveTest.java
@@ -16,79 +16,58 @@
*/
package org.jclouds.profitbricks.features;
-import com.google.common.collect.Iterables;
-
-import java.util.List;
-
-import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
-import org.jclouds.profitbricks.domain.Firewall;
-import org.jclouds.profitbricks.domain.Nic;
-
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
-import java.util.concurrent.TimeUnit;
+import java.util.List;
-import org.jclouds.profitbricks.compute.internal.ProvisioningStatusAware;
-import org.jclouds.profitbricks.compute.internal.ProvisioningStatusPollingPredicate;
+import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.Firewall;
+import org.jclouds.profitbricks.domain.Nic;
import org.jclouds.profitbricks.domain.Firewall.Protocol;
-import org.jclouds.profitbricks.domain.ProvisioningState;
-import org.jclouds.util.Predicates2;
import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
-@Test(groups = "live", testName = "FirewallApiLiveTest", singleThreaded = true)
+
+@Test(groups = "live", testName = "FirewallApiLiveTest")
public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {
- private Predicate<String> waitUntilAvailable;
+ private DataCenter dataCenter;
private Nic nic;
private Firewall createdFirewall;
- private Firewall.Rule createdFirewallRule;
-
- @Override
- protected void initialize() {
- super.initialize();
- List<Nic> nics = api.nicApi().getAllNics();
- assertFalse(nics.isEmpty(), "Must atleast have 1 NIC available for firewall testing.");
-
- this.nic = Iterables.tryFind(nics, new Predicate<Nic>() {
-
- @Override
- public boolean apply(Nic input) {
- return input.state() == ProvisioningState.AVAILABLE;
- }
- }).orNull();
-
- assertNotNull(nic, "No available NIC for firewall testing was found.");
- this.waitUntilAvailable = Predicates2.retry(
- new ProvisioningStatusPollingPredicate(api, ProvisioningStatusAware.NIC, ProvisioningState.AVAILABLE),
- 2l * 60l, 2l, TimeUnit.SECONDS);
+ @BeforeClass
+ public void setupTest() {
+ dataCenter = findOrCreateDataCenter("firewallApiLiveTest" + System.currentTimeMillis());
+ nic = findOrCreateNic(dataCenter);
}
@Test
public void testAddFirewallRuleToNic() {
+ assertDataCenterAvailable(dataCenter);
Firewall firewall = api.firewallApi().addFirewallRuleToNic(
- Firewall.Request.createAddRulePayload(nic.id(), ImmutableList.of(
+ Firewall.Request.createAddRulePayload(
+ nic.id(), ImmutableList.of(
Firewall.Rule.builder()
.name("test-rule-tcp")
.protocol(Protocol.TCP)
.build()
- ))
+ )
+ )
);
assertNotNull(firewall);
- assertNotNull(firewall.rules());
+ assertFalse(firewall.rules().isEmpty());
+ assertDataCenterAvailable(dataCenter);
- waitUntilAvailable.apply(nic.id());
createdFirewall = firewall;
- createdFirewallRule = Iterables.getOnlyElement(firewall.rules());
}
@Test(dependsOnMethods = "testAddFirewallRuleToNic")
@@ -109,37 +88,52 @@ public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {
@Test(dependsOnMethods = "testAddFirewallRuleToNic")
public void testActivateFirewall() {
- boolean result = api.firewallApi().activateFirewall(ImmutableList.of(createdFirewall.id()));
-
- waitUntilAvailable.apply(nic.id());
-
+ assertDataCenterAvailable(dataCenter);
+ boolean result = api.firewallApi().activateFirewall(
+ ImmutableList.of(createdFirewall.id()));
+ assertDataCenterAvailable(dataCenter);
assertTrue(result);
+
+ Firewall firewall = api.firewallApi().getFirewall(createdFirewall.id());
+ assertTrue(firewall.active(), "Firewall wasn't activated");
}
@Test(dependsOnMethods = "testActivateFirewall")
void testDeactivateFirewall() {
- boolean result = api.firewallApi().deactivateFirewall(ImmutableList.of(createdFirewall.id()));
-
- waitUntilAvailable.apply(nic.id());
-
+ assertDataCenterAvailable(dataCenter);
+ boolean result = api.firewallApi().deactivateFirewall(
+ ImmutableList.of(createdFirewall.id()));
+ assertDataCenterAvailable(dataCenter);
assertTrue(result);
+
+ Firewall firewall = api.firewallApi().getFirewall(createdFirewall.id());
+ assertFalse(firewall.active(), "Firewall wasn't deactivated");
}
- @Test(dependsOnMethods = "testActivateFirewall")
+ @Test(dependsOnMethods = "testDeactivateFirewall")
void testRemoveFirewallRule() {
- boolean result = api.firewallApi().removeFirewallRules(ImmutableList.of(createdFirewallRule.id()));
+ assertDataCenterAvailable(dataCenter);
+ for (Firewall.Rule rule : createdFirewall.rules()) {
+ boolean result = api.firewallApi().removeFirewallRules(
+ ImmutableList.of(rule.id()));
- waitUntilAvailable.apply(nic.id());
+ assertTrue(result);
+ assertDataCenterAvailable(dataCenter);
- assertTrue(result);
+ }
+ Firewall firewall = api.firewallApi().getFirewall(createdFirewall.id());
+ assertTrue(firewall.rules().isEmpty(), "Not all rules removed");
}
- @AfterClass(alwaysRun = true)
+ @Test(dependsOnMethods = "testRemoveFirewallRule")
public void testDeleteFirewall() {
- if (createdFirewall != null) {
- boolean result = api.firewallApi().deleteFirewall(ImmutableList.of(createdFirewall.id()));
+ assertDataCenterAvailable(dataCenter);
+ boolean result = api.firewallApi().deleteFirewall(ImmutableList.of(createdFirewall.id()));
+ assertTrue(result, "Created firewall was not deleted.");
+ }
- assertTrue(result, "Created firewall was not deleted.");
- }
+ @AfterClass(alwaysRun = true)
+ public void cleanUp() {
+ destroyDataCenter(dataCenter);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/52c6c2b7/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiLiveTest.java
index 2299a0c..b71cd8d 100644
--- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiLiveTest.java
+++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiLiveTest.java
@@ -16,20 +16,24 @@
*/
package org.jclouds.profitbricks.features;
-import com.google.common.collect.Iterables;
-import java.util.List;
-import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
-import org.jclouds.profitbricks.domain.Image;
import static org.testng.Assert.assertEquals;
+
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
+
+import java.util.List;
+
+import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
+import org.jclouds.profitbricks.domain.Image;
import org.testng.annotations.Test;
-@Test(groups = "live", testName = "ImageApiLiveTest", singleThreaded = true)
+import com.google.common.collect.Iterables;
+
+@Test(groups = "live", testName = "ImageApiLiveTest")
public class ImageApiLiveTest extends BaseProfitBricksLiveTest {
- private String imageId;
+ private Image image;
@Test
public void testGetAllImages() {
@@ -37,22 +41,22 @@ public class ImageApiLiveTest extends BaseProfitBricksLiveTest {
assertNotNull(images);
assertFalse(images.isEmpty(), "No images found.");
- imageId = Iterables.getFirst(images, null).id();
+
+ image = Iterables.getFirst(images, null);
+ assertNotNull(image);
}
@Test(dependsOnMethods = "testGetAllImages")
public void testGetImage() {
- Image image = api.imageApi().getImage(imageId);
+ Image fetchedImage = api.imageApi().getImage(image.id());
- assertNotNull(image);
- assertEquals(image.id(), imageId);
+ assertNotNull(fetchedImage);
+ assertEquals(fetchedImage, image);
}
@Test
public void testGetNonExistingImage() {
String id = "random-non-existing-id";
- Image image = api.imageApi().getImage(id);
-
- assertNull(image, "Should've just returned null");
+ assertNull(api.imageApi().getImage(id), "Should've just returned null");
}
}