http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
index cb61e79..9026592 100644
--- 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
+++ 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/BaseStorageResponseHandler.java
@@ -19,11 +19,9 @@ package org.jclouds.profitbricks.http.parser.storage;
 import java.util.Date;
 import java.util.List;
 
-import org.jclouds.date.DateCodec;
-
 import com.google.inject.Inject;
 
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
 import org.jclouds.profitbricks.domain.ProvisioningState;
 import org.jclouds.profitbricks.domain.Storage;
 import org.jclouds.profitbricks.domain.Storage.BusType;
@@ -33,20 +31,20 @@ import com.google.common.collect.Lists;
 
 public abstract class BaseStorageResponseHandler<T> extends 
BaseProfitBricksResponseHandler<T> {
 
-   protected final DateCodec dateCodec;
+   protected final DateService dateService;
 
    protected Storage.Builder builder;
    protected List<String> serverIds;
 
    @Inject
-   BaseStorageResponseHandler(DateCodecFactory dateCodec) {
-      this.dateCodec = dateCodec.iso8601();
+   BaseStorageResponseHandler(DateService dateService) {
+      this.dateService = dateService;
       this.builder = Storage.builder();
       this.serverIds = Lists.newArrayList();
    }
 
    protected final Date textToIso8601Date() {
-      return dateCodec.toDate(textToStringValue());
+      return dateService.iso8601DateOrSecondsDateParse(textToStringValue());
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
index 2bc1ed6..ae667ca 100644
--- 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
+++ 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageInfoResponseHandler.java
@@ -17,7 +17,8 @@
 package org.jclouds.profitbricks.http.parser.storage;
 
 import com.google.inject.Inject;
-import org.jclouds.date.DateCodecFactory;
+
+import org.jclouds.date.DateService;
 import org.jclouds.profitbricks.domain.Storage;
 import org.xml.sax.SAXException;
 
@@ -26,8 +27,8 @@ public class StorageInfoResponseHandler extends 
BaseStorageResponseHandler<Stora
    private boolean done = false;
 
    @Inject
-   StorageInfoResponseHandler(DateCodecFactory dateCodec) {
-      super(dateCodec);
+   StorageInfoResponseHandler(DateService dateService) {
+      super(dateService);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
index 572f761..3048f66 100644
--- 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
+++ 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/http/parser/storage/StorageListResponseHandler.java
@@ -16,22 +16,22 @@
  */
 package org.jclouds.profitbricks.http.parser.storage;
 
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-
 import java.util.List;
 
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
 import org.jclouds.profitbricks.domain.Storage;
 import org.xml.sax.SAXException;
 
+import com.google.inject.Inject;
+import com.google.common.collect.Lists;
+
 public class StorageListResponseHandler extends 
BaseStorageResponseHandler<List<Storage>> {
 
    private List<Storage> storages;
 
    @Inject
-   StorageListResponseHandler(DateCodecFactory dateCodec) {
-      super(dateCodec);
+   StorageListResponseHandler(DateService dateService) {
+      super(dateService);
       this.storages = Lists.newArrayList();
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
new file mode 100644
index 0000000..338f064
--- /dev/null
+++ 
b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/util/Passwords.java
@@ -0,0 +1,64 @@
+/*
+ * 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.util;
+
+import java.util.Random;
+import java.util.regex.Pattern;
+
+import com.google.common.collect.ImmutableSet;
+
+public class Passwords {
+
+   private static final Random random = new Random();
+
+   private static final int MIN_CHAR = 8;
+   private static final int MAX_CHAR = 50;
+   private static final String PASSWORD_FORMAT = String.format(
+           "[a-zA-Z0-9][^iIloOwWyYzZ10]{%d,%d}", MIN_CHAR - 1, MAX_CHAR);
+   private static final Pattern PASSWORD_PATTERN = 
Pattern.compile(PASSWORD_FORMAT);
+
+   private static final ImmutableSet<Character> INVALID_CHARS = 
ImmutableSet.<Character>of(
+           'i', 'I', 'l', 'o', 'O', 'w', 'W', 'y', 'Y', 'z', 'Z', '1', '0');
+
+   public static boolean isValidPassword(String password) {
+      return PASSWORD_PATTERN.matcher(password).matches();
+   }
+
+   public static String generate() {
+      int count = random.nextInt(MAX_CHAR - MIN_CHAR) + MIN_CHAR;
+
+      final char[] buffer = new char[count];
+
+      final int start = 'A';
+      final int end = 'z';
+      final int gap = end - start + 1;
+
+      while (count-- != 0) {
+         char ch = (char) (random.nextInt(gap) + start);
+         if ((isBetween(ch, start, 'Z') || isBetween(ch, 'a', end))
+                 && !INVALID_CHARS.contains(ch))
+            buffer[count] = ch;
+         else
+            count++;
+      }
+      return new String(buffer);
+   }
+
+   private static boolean isBetween(char ch, int start, int end) {
+      return ch >= start && ch <= end;
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
index dda2ed6..42a1ad9 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/CreateSnapshotRequestBinderTest.java
@@ -37,11 +37,11 @@ public class CreateSnapshotRequestBinderTest {
    }
 
    private final String expectedPayload
-          = ("      <ws:createSnapshot>\n"
-          + "<request>\n"
-          + "<storageId>123-1233-1324</storageId>\n"
-          + "<description>describing the snapshot</description>\n"
-          + "<snapshotName>snapshot name</snapshotName>\n"
-          + "</request>\n"
-          + "</ws:createSnapshot>").replaceAll("\\s+", "");
+           = ("      <ws:createSnapshot>\n"
+           + "<request>\n"
+           + "<storageId>123-1233-1324</storageId>\n"
+           + "<description>describing the snapshot</description>\n"
+           + "<snapshotName>snapshot name</snapshotName>\n"
+           + "</request>\n"
+           + "</ws:createSnapshot>").replaceAll("\\s+", "");
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
index 206cd79..e1ba061 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/binder/snapshot/RollbackSnapshotRequestBinderTest.java
@@ -29,9 +29,9 @@ public class RollbackSnapshotRequestBinderTest {
       RollbackSnapshotRequestBinder binder = new 
RollbackSnapshotRequestBinder();
 
       Snapshot.Request.RollbackPayload payload = 
Snapshot.Request.rollbackBuilder()
-             .snapshotId("snapshot-id")
-             .storageId("storage-id")
-             .build();
+              .snapshotId("snapshot-id")
+              .storageId("storage-id")
+              .build();
 
       String actual = binder.createPayload(payload);
       assertNotNull(actual, "Binder returned null payload");
@@ -39,9 +39,9 @@ public class RollbackSnapshotRequestBinderTest {
    }
 
    private final String expectedPayload = "<ws:rollbackSnapshot>"
-          + "<request>"
-          + "<snapshotId>snapshot-id</snapshotId>"
-          + "<storageId>storage-id</storageId>"
-          + "</request>"
-          + "</ws:rollbackSnapshot>".replaceAll("\\s", "");
+           + "<request>"
+           + "<snapshotId>snapshot-id</snapshotId>"
+           + "<storageId>storage-id</storageId>"
+           + "</request>"
+           + "</ws:rollbackSnapshot>".replaceAll("\\s", "");
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/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
new file mode 100644
index 0000000..83540a5
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapterLiveTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
new file mode 100644
index 0000000..eff7b01
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksTemplateBuilderLiveTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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 java.util.Set;
+
+import com.google.common.collect.ImmutableSet;
+import org.jclouds.compute.internal.BaseTemplateBuilderLiveTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "live", testName = "ProfitBricksTemplateBuilderLiveTest")
+public class ProfitBricksTemplateBuilderLiveTest extends 
BaseTemplateBuilderLiveTest {
+
+   public ProfitBricksTemplateBuilderLiveTest() {
+      this.provider = "profitbricks";
+   }
+
+   @Override
+   protected Set<String> getIso3166Codes() {
+      return ImmutableSet.of();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
new file mode 100644
index 0000000..dd115cc
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManagerTest.java
@@ -0,0 +1,118 @@
+/*
+ * 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.concurrent;
+
+import static 
com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
+import static java.util.logging.Logger.getAnonymousLogger;
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.base.Throwables;
+
+@Test(groups = "unit", testName = "ProvisioningManagerTest")
+public class ProvisioningManagerTest {
+
+   @Test
+   public void testProvision() throws IOException {
+      ProvisioningManager manager = new ProvisioningManager();
+      AtomicInteger completedJobs = new AtomicInteger(0);
+
+      try {
+         for (int i = 0; i < 5; i++) {
+            manager.provision(new MockJob(200, "slow", completedJobs));
+            manager.provision(new MockJob(0, "fast", completedJobs));
+            manager.provision(new MockJob(100, "normal", completedJobs));
+         }
+      } finally {
+         manager.close();
+      }
+
+      assertEquals(completedJobs.get(), 15);
+   }
+
+   @Test
+   public void testProvisionInterrupted() {
+      ProvisioningManager manager = new ProvisioningManager();
+      AtomicInteger completedJobs = new AtomicInteger(0);
+
+      manager.provision(new ShutdownExecutorJob(manager, completedJobs));
+      manager.provision(new MockJob(0, "rejected", completedJobs));
+
+      assertEquals(completedJobs.get(), 1);
+   }
+
+   private static class MockJob extends ProvisioningJob {
+
+      private final long delay;
+      private final AtomicInteger completedJobs;
+
+      public MockJob(long delay, String group, AtomicInteger completedJobs) {
+         super(sleepPredicate(delay), group, Suppliers.ofInstance((Object) 0));
+         this.delay = delay;
+         this.completedJobs = completedJobs;
+      }
+
+      @Override
+      public Integer call() throws Exception {
+         getAnonymousLogger().info("ProvisioningManagerTest: Starting " + 
this);
+         super.call();
+         getAnonymousLogger().info("ProvisioningManagerTest: Completed " + 
this);
+         return completedJobs.incrementAndGet();
+      }
+
+      @Override
+      public String toString() {
+         return "MockJob [id=" + hashCode() + ", group=" + getGroup() + ", 
delay=" + delay + "]";
+      }
+   }
+
+   private static class ShutdownExecutorJob extends ProvisioningJob {
+
+      public ShutdownExecutorJob(final ProvisioningManager manager, final 
AtomicInteger completedJobs) {
+         super(Predicates.<String>alwaysTrue(), "shutdown", new 
Supplier<Object>() {
+            @Override
+            public Integer get() {
+               try {
+                  manager.close();
+                  return completedJobs.incrementAndGet();
+               } catch (IOException ex) {
+                  throw Throwables.propagate(ex);
+               }
+            }
+         });
+      }
+   }
+
+   private static Predicate<String> sleepPredicate(final long delay) {
+      return new Predicate<String>() {
+         @Override
+         public boolean apply(String input) {
+            sleepUninterruptibly(delay, TimeUnit.MILLISECONDS);
+            return true;
+         }
+      };
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
new file mode 100644
index 0000000..7dcf69c
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/DataCenterToLocationTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.function;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.ProfitBricksProviderMetadata;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+@Test(groups = "unit", testName = "DataCenterToLocationTest")
+public class DataCenterToLocationTest {
+
+   private DataCenterToLocation fnLocation;
+   private LocationToLocation fnRegion;
+
+   @BeforeTest
+   public void setup() {
+      ProfitBricksProviderMetadata metadata = new 
ProfitBricksProviderMetadata();
+      JustProvider justProvider = new JustProvider(metadata.getId(), 
Suppliers.<URI>ofInstance(
+              URI.create(metadata.getEndpoint())), ImmutableSet.<String>of());
+      this.fnRegion = new LocationToLocation(justProvider);
+      this.fnLocation = new DataCenterToLocation(fnRegion);
+   }
+
+   @Test
+   public void testDataCenterToLocation() {
+      DataCenter dataCenter = DataCenter.builder()
+              .id("12345678-abcd-efgh-ijkl-987654321000")
+              .version(10)
+              .name("JClouds-DC")
+              .state(ProvisioningState.AVAILABLE)
+              .location(org.jclouds.profitbricks.domain.Location.DE_FRA)
+              .build();
+
+      Location actual = fnLocation.apply(dataCenter);
+
+      Location expected = new LocationBuilder()
+              .id(dataCenter.id())
+              .description(dataCenter.name())
+              .scope(LocationScope.ZONE)
+              .metadata(ImmutableMap.<String, Object>of(
+                              "version", dataCenter.version(),
+                              "state", dataCenter.state()))
+              
.parent(fnRegion.apply(org.jclouds.profitbricks.domain.Location.DE_FRA))
+              .build();
+
+      assertEquals(actual, expected);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
new file mode 100644
index 0000000..3967cf5
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/LocationToLocationTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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.function;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.ProfitBricksProviderMetadata;
+import org.jclouds.profitbricks.domain.Location;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
+@Test(groups = "unit", testName = "LocationToLocationTest")
+public class LocationToLocationTest {
+
+   private LocationToLocation fnRegion;
+   private JustProvider justProvider;
+
+   @BeforeTest
+   public void setup() {
+      ProfitBricksProviderMetadata metadata = new 
ProfitBricksProviderMetadata();
+      this.justProvider = new JustProvider(metadata.getId(), 
Suppliers.<URI>ofInstance(
+              URI.create(metadata.getEndpoint())), ImmutableSet.<String>of());
+      this.fnRegion = new LocationToLocation(justProvider);
+   }
+
+   @Test
+   public void testLocationToLocation() {
+      Location[] locations = Location.values();
+      for (Location loc : locations) {
+         org.jclouds.domain.Location actual = fnRegion.apply(loc);
+         org.jclouds.domain.Location expected = new LocationBuilder()
+                 
.id(loc.getId()).description(loc.getDescription()).scope(LocationScope.REGION)
+                 .parent(Iterables.getOnlyElement(justProvider.get())).build();
+
+         assertEquals(actual, expected);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
new file mode 100644
index 0000000..d114efb
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ProvisionableToImageTest.java
@@ -0,0 +1,260 @@
+/*
+ * 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.function;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+import java.util.Date;
+
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.location.suppliers.all.JustProvider;
+import org.jclouds.profitbricks.ProfitBricksProviderMetadata;
+import org.jclouds.profitbricks.domain.Location;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.Snapshot;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableSet;
+
+@Test(groups = "unit", testName = "ProvisionableToImageTest")
+public class ProvisionableToImageTest {
+
+   private ProvisionableToImage fnImage;
+   private LocationToLocation fnRegion;
+
+   @BeforeTest
+   public void setup() {
+      ProfitBricksProviderMetadata metadata = new 
ProfitBricksProviderMetadata();
+      JustProvider justProvider = new JustProvider(metadata.getId(), 
Suppliers.<URI>ofInstance(
+              URI.create(metadata.getEndpoint())), ImmutableSet.<String>of());
+      this.fnRegion = new LocationToLocation(justProvider);
+      this.fnImage = new ProvisionableToImage(fnRegion);
+   }
+
+   @Test
+   public void testImageToImage() {
+      org.jclouds.profitbricks.domain.Image image
+              = org.jclouds.profitbricks.domain.Image.builder()
+              .isBootable(true)
+              .isCpuHotPlug(true)
+              .isCpuHotUnPlug(false)
+              .isDiscVirtioHotPlug(true)
+              .isDiscVirtioHotUnPlug(true)
+              .id("5ad99c9e-9166-11e4-9d74-52540066fee9")
+              .name("Ubuntu-14.04-LTS-server-2015-01-01")
+              .size(2048f)
+              .type(org.jclouds.profitbricks.domain.Image.Type.HDD)
+              .location(Location.US_LAS)
+              .isNicHotPlug(true)
+              .isNicHotUnPlug(true)
+              .osType(OsType.LINUX)
+              .isPublic(true)
+              .isRamHotPlug(true)
+              .isRamHotUnPlug(false)
+              .isWriteable(true)
+              .build();
+
+      Image actual = fnImage.apply(image);
+
+      Image expected = new ImageBuilder()
+              .ids(image.id())
+              .name(image.name())
+              .location(fnRegion.apply(Location.US_LAS))
+              .status(Image.Status.AVAILABLE)
+              .operatingSystem(OperatingSystem.builder()
+                      .description("UBUNTU")
+                      .family(OsFamily.UBUNTU)
+                      .version("14.04")
+                      .is64Bit(false)
+                      .build())
+              .build();
+
+      assertEquals(actual, expected);
+   }
+
+   @Test
+   public void testImageDescriptionParsing() {
+      org.jclouds.profitbricks.domain.Image image1
+              = org.jclouds.profitbricks.domain.Image.builder()
+              .id("f4742db0-9160-11e4-9d74-52540066fee9")
+              .name("Fedora-19-server-2015-01-01")
+              .size(2048f)
+              .type(org.jclouds.profitbricks.domain.Image.Type.HDD)
+              .location(Location.DE_FRA)
+              .osType(OsType.LINUX)
+              .build();
+
+      Image actual1 = fnImage.apply(image1);
+
+      Image expected1 = new ImageBuilder()
+              .ids(image1.id())
+              .name(image1.name())
+              .location(fnRegion.apply(image1.location()))
+              .status(Image.Status.AVAILABLE)
+              .operatingSystem(OperatingSystem.builder()
+                      .description("FEDORA")
+                      .family(OsFamily.FEDORA)
+                      .version("7")
+                      .is64Bit(true)
+                      .build())
+              .build();
+
+      assertEquals(actual1, expected1);
+
+      org.jclouds.profitbricks.domain.Image image2
+              = org.jclouds.profitbricks.domain.Image.builder()
+              .id("457bf707-d5d1-11e3-8b4f-52540066fee9")
+              .name("clearos-community-6.5.0-x86_64.iso")
+              .size(2048f)
+              .type(org.jclouds.profitbricks.domain.Image.Type.CDROM)
+              .location(Location.DE_FKB)
+              .osType(OsType.LINUX)
+              .build();
+
+      Image actual2 = fnImage.apply(image2);
+
+      Image expected2 = new ImageBuilder()
+              .ids(image2.id())
+              .name(image2.name())
+              .location(fnRegion.apply(image2.location()))
+              .status(Image.Status.AVAILABLE)
+              .operatingSystem(OperatingSystem.builder()
+                      .description("UNRECOGNIZED")
+                      .family(OsFamily.UNRECOGNIZED)
+                      .version("6.5.0")
+                      .is64Bit(true)
+                      .build())
+              .build();
+
+      assertEquals(actual2, expected2);
+
+      org.jclouds.profitbricks.domain.Image image3
+              = org.jclouds.profitbricks.domain.Image.builder()
+              .id("e54af701-53b8-11e3-8f17-52540066fee9")
+              .name("windows-2008-r2-server-setup.iso")
+              .size(2048f)
+              .type(org.jclouds.profitbricks.domain.Image.Type.CDROM)
+              .location(Location.US_LASDEV)
+              .osType(OsType.WINDOWS)
+              .build();
+
+      Image actual3 = fnImage.apply(image3);
+
+      Image expected3 = new ImageBuilder()
+              .ids(image3.id())
+              .name(image3.name())
+              .location(fnRegion.apply(image3.location()))
+              .status(Image.Status.AVAILABLE)
+              .operatingSystem(OperatingSystem.builder()
+                      .description("WINDOWS")
+                      .family(OsFamily.WINDOWS)
+                      .version("2008")
+                      .is64Bit(false)
+                      .build())
+              .build();
+
+      assertEquals(actual3, expected3);
+
+   }
+
+   @Test
+   public void testSnapshotToImage() {
+      Snapshot snapshot1 = Snapshot.builder()
+              .isBootable(true)
+              .isCpuHotPlug(true)
+              .isCpuHotUnPlug(false)
+              .isDiscVirtioHotPlug(true)
+              .isDiscVirtioHotUnPlug(true)
+              .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+              .name("placeholder-snapshot-04/13/2015")
+              .description("Created from \"placeholder\" in Data Center 
\"sbx-computeservice\"")
+              .size(2048f)
+              .location(Location.US_LAS)
+              .isNicHotPlug(true)
+              .isNicHotUnPlug(true)
+              .osType(OsType.LINUX)
+              .isRamHotPlug(true)
+              .isRamHotUnPlug(false)
+              .creationTime(new Date(2015, 4, 13))
+              .lastModificationTime(new Date())
+              .state(ProvisioningState.AVAILABLE)
+              .build();
+
+      Image actual1 = fnImage.apply(snapshot1);
+
+      Image expected1 = new ImageBuilder()
+              .ids(snapshot1.id())
+              .name(snapshot1.name())
+              .location(fnRegion.apply(Location.US_LAS))
+              .status(Image.Status.AVAILABLE)
+              .operatingSystem(OperatingSystem.builder()
+                      .description(snapshot1.description())
+                      .family(OsFamily.LINUX)
+                      .is64Bit(true)
+                      .build())
+              .build();
+
+      assertEquals(actual1, expected1);
+
+      Snapshot snapshot2 = Snapshot.builder()
+              .isBootable(true)
+              .isCpuHotPlug(true)
+              .isCpuHotUnPlug(false)
+              .isDiscVirtioHotPlug(true)
+              .isDiscVirtioHotUnPlug(true)
+              .id("d80bf9c0-ce6e-4283-9ea4-2906635f6137")
+              .name("jclouds-ubuntu14.10-template")
+              .description("Created from \"jclouds-ubuntu14.10 Storage\" in 
Data Center \"jclouds-computeservice\"")
+              .size(10240f)
+              .location(Location.DE_FKB)
+              .isNicHotPlug(true)
+              .isNicHotUnPlug(true)
+              .osType(OsType.LINUX)
+              .isRamHotPlug(true)
+              .isRamHotUnPlug(false)
+              .creationTime(new Date(2015, 4, 13))
+              .lastModificationTime(new Date())
+              .state(ProvisioningState.INPROCESS)
+              .build();
+
+      Image actual2 = fnImage.apply(snapshot2);
+
+      Image expected2 = new ImageBuilder()
+              .ids(snapshot2.id())
+              .name(snapshot2.name())
+              .location(fnRegion.apply(Location.DE_FKB))
+              .status(Image.Status.PENDING)
+              .operatingSystem(OperatingSystem.builder()
+                      .description("ubuntu")
+                      .family(OsFamily.UBUNTU)
+                      .is64Bit(true)
+                      .version("00.00")
+                      .build())
+              .build();
+
+      assertEquals(actual2, expected2);
+      assertEquals(actual2.getOperatingSystem(), 
expected2.getOperatingSystem());
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
new file mode 100644
index 0000000..5fba62b
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadataTest.java
@@ -0,0 +1,184 @@
+/*
+ * 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.function;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Set;
+
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.VolumeBuilder;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LocationBuilder;
+import org.jclouds.domain.LocationScope;
+import org.jclouds.profitbricks.ProfitBricksApiMetadata;
+import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.DataCenter;
+import org.jclouds.profitbricks.domain.Nic;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.ProvisioningState;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.domain.Storage;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.name.Names;
+
+@Test(groups = "unit", testName = "ServerToNodeMetadataTest")
+public class ServerToNodeMetadataTest {
+
+   private ServerToNodeMetadata fnNodeMetadata;
+
+   @BeforeTest
+   public void setup() {
+      Supplier<Set<? extends Location>> locationsSupply = new Supplier<Set<? 
extends Location>>() {
+
+         @Override
+         public Set<? extends Location> get() {
+            return ImmutableSet.of(
+                    new LocationBuilder()
+                    .id("12345678-abcd-efgh-ijkl-987654321000")
+                    .description("JClouds-DC")
+                    .scope(LocationScope.REGION)
+                    .metadata(ImmutableMap.<String, Object>of(
+                                    "version", "10",
+                                    "state", "AVAILABLE"))
+                    .parent(new LocationBuilder()
+                            .id("de/fra")
+                            .description("Germany, Frankfurt (M)")
+                            .scope(LocationScope.PROVIDER)
+                            .build())
+                    .build());
+         }
+      };
+
+      GroupNamingConvention.Factory namingConvention = 
Guice.createInjector(new AbstractModule() {
+         @Override
+         protected void configure() {
+            Names.bindProperties(binder(), new 
ProfitBricksApiMetadata().getDefaultProperties());
+         }
+      }).getInstance(GroupNamingConvention.Factory.class);
+
+      this.fnNodeMetadata = new ServerToNodeMetadata(new StorageToVolume(), 
locationsSupply, namingConvention);
+   }
+
+   @Test
+   public void testServerToNodeMetadata() {
+      Server server = Server.builder()
+              .dataCenter(DataCenter.builder()
+                      .id("12345678-abcd-efgh-ijkl-987654321000").version(10)
+                      .build())
+              .id("qwertyui-qwer-qwer-qwer-qwertyyuiiop")
+              .name("mock-facebook-node")
+              .cores(4)
+              .ram(4096)
+              .hasInternetAccess(true)
+              .state(ProvisioningState.AVAILABLE)
+              .status(Server.Status.RUNNING)
+              .osType(OsType.LINUX)
+              .availabilityZone(AvailabilityZone.AUTO)
+              .isCpuHotPlug(true)
+              .isRamHotPlug(true)
+              .isNicHotPlug(true)
+              .isNicHotUnPlug(true)
+              .isDiscVirtioHotPlug(true)
+              .isDiscVirtioHotUnPlug(true)
+              .storages(ImmutableList.<Storage>of(
+                              Storage.builder()
+                              .bootDevice(true)
+                              .busType(Storage.BusType.VIRTIO)
+                              .deviceNumber(1)
+                              .size(40f)
+                              .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+                              .name("facebook-storage")
+                              .build()
+                      )
+              )
+              .nics(ImmutableList.<Nic>of(
+                              Nic.builder()
+                              .id("qwqwqwqw-wewe-erer-rtrt-tytytytytyty")
+                              .lanId(1)
+                              
.dataCenterId("12345678-abcd-efgh-ijkl-987654321000")
+                              .internetAccess(true)
+                              .serverId("qwertyui-qwer-qwer-qwer-qwertyyuiiop")
+                              .macAddress("02:01:09:cd:f0:b0")
+                              .ip("173.252.120.6")
+                              .build()
+                      )
+              )
+              .build();
+
+      NodeMetadata expected = fnNodeMetadata.apply(server);
+      assertNotNull(expected);
+
+      NodeMetadata actual = new NodeMetadataBuilder()
+              .group("mock")
+              .ids(server.id())
+              .name(server.name())
+              .backendStatus("AVAILABLE")
+              .status(NodeMetadata.Status.RUNNING)
+              .hardware(new HardwareBuilder()
+                      .ids("cpu=4,ram=4096,disk=40")
+                      .name("cpu=4,ram=4096,disk=40")
+                      .ram(server.ram())
+                      .processor(new Processor(server.cores(), 1d))
+                      .hypervisor("kvm")
+                      .volume(new VolumeBuilder()
+                              .bootDevice(true)
+                              .size(40f)
+                              .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+                              .durable(true)
+                              .type(Volume.Type.LOCAL)
+                              .build())
+                      .build())
+              .operatingSystem(new OperatingSystem.Builder()
+                      .description(OsFamily.LINUX.value())
+                      .family(OsFamily.LINUX)
+                      .build())
+              .location(new LocationBuilder()
+                      .id("12345678-abcd-efgh-ijkl-987654321000")
+                      .description("JClouds-DC")
+                      .scope(LocationScope.REGION)
+                      .metadata(ImmutableMap.<String, Object>of(
+                                      "version", "10",
+                                      "state", "AVAILABLE"))
+                      .parent(new LocationBuilder()
+                              .id("de/fra")
+                              .description("Germany, Frankfurt (M)")
+                              .scope(LocationScope.PROVIDER)
+                              .build())
+                      .build())
+              .publicAddresses(ImmutableList.<String>of("173.252.120.6"))
+              .build();
+
+      assertEquals(actual, expected);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
new file mode 100644
index 0000000..8a782e7
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/function/StorageToVolumeTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.function;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.compute.domain.Volume;
+import org.jclouds.compute.domain.VolumeBuilder;
+import org.jclouds.profitbricks.domain.Storage;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit", testName = "StorageToVolumeTest")
+public class StorageToVolumeTest {
+
+   private StorageToVolume fnVolume;
+
+   @BeforeTest
+   public void setup() {
+      this.fnVolume = new StorageToVolume();
+   }
+
+   @Test
+   public void testStorageToVolume() {
+      Storage storage = Storage.builder()
+              .id("qswdefrg-qaws-qaws-defe-rgrgdsvcxbrh")
+              .size(40)
+              .name("hdd-1")
+              .busType(Storage.BusType.VIRTIO)
+              .bootDevice(true)
+              .deviceNumber(1)
+              .build();
+
+      Volume actual = fnVolume.apply(storage);
+
+      Volume expected = new VolumeBuilder()
+              .id(storage.id())
+              .size(40f)
+              .bootDevice(true)
+              .device("1")
+              .type(Volume.Type.LOCAL)
+              .durable(true)
+              .build();
+
+      assertEquals(actual, expected);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/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
index 857a8ff..690412a 100644
--- 
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
@@ -136,10 +136,10 @@ public class ProvisioningStatusPollingPredicateTest 
extends BaseProfitBricksMock
          server.shutdown();
       }
    }
-   
+
    @Test
-   public void testSnapshotPredicate() throws Exception{
-        MockWebServer server = mockWebServer();
+   public void testSnapshotPredicate() throws Exception {
+      MockWebServer server = mockWebServer();
 
       byte[] payloadInProcess = 
payloadFromResource("/snapshot/snapshot-state-inprocess.xml");
       byte[] payloadAvailable = payloadFromResource("/snapshot/snapshot.xml");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/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 20cf5f8..8e84746 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,16 +16,15 @@
  */
 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.Drive;
 import org.jclouds.profitbricks.domain.Image;
 import org.jclouds.profitbricks.domain.Server;
-
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-
 import org.testng.annotations.Test;
 
 import com.google.common.collect.Iterables;
@@ -67,7 +66,7 @@ public class DrivesApiLiveTest extends 
BaseProfitBricksLiveTest {
       assertNotNull(requestId);
    }
 
-   @Test (dependsOnMethods = "addRomDriveToServerTest")
+   @Test(dependsOnMethods = "addRomDriveToServerTest")
    public void removeRomDriveFromServerTest() {
       String requestId = api.drivesApi().removeRomDriveFromServer(imageId, 
serverId);
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/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 cd38494..ddf94d4 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,7 +16,6 @@
  */
 package org.jclouds.profitbricks.features;
 
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 
 import java.util.List;
@@ -41,6 +40,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
 
 @Test(groups = "live", testName = "FirewallApiLiveTest", singleThreaded = true)
 public class FirewallApiLiveTest extends BaseProfitBricksLiveTest {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
index 227cfc7..e7c2eda 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiLiveTest.java
@@ -47,7 +47,7 @@ public class IpBlockApiLiveTest extends 
BaseProfitBricksLiveTest {
 
    @Test
    public void testReservePublicIpBlock() {
-      newIpBlock = api.ipBlockApi().reservePublicIpBlock("2", 
Location.US_LAS.value());
+      newIpBlock = api.ipBlockApi().reservePublicIpBlock("2", 
Location.US_LAS.getId());
 
       assertNotNull(newIpBlock);
       assertNotNull(newIpBlock.ips());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
index b0d3356..e948e76 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/IpBlockApiMockTest.java
@@ -122,9 +122,9 @@ public class IpBlockApiMockTest extends 
BaseProfitBricksMockTest {
       String blockSize = "2";
       Location location = Location.US_LAS;
 
-      String content = "<ws:reservePublicIpBlock><request><blockSize>" + 
blockSize + "</blockSize><location>" + location.value() + 
"</location></request></ws:reservePublicIpBlock>";
+      String content = "<ws:reservePublicIpBlock><request><blockSize>" + 
blockSize + "</blockSize><location>" + location.getId() + 
"</location></request></ws:reservePublicIpBlock>";
       try {
-         IpBlock ipBlock = api.reservePublicIpBlock(blockSize, 
location.value());
+         IpBlock ipBlock = api.reservePublicIpBlock(blockSize, 
location.getId());
          assertRequestHasCommonProperties(server.takeRequest(), content);
          assertNotNull(ipBlock);
       } finally {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
index a79f9ae..d5e64cf 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiLiveTest.java
@@ -128,7 +128,7 @@ public class LoadbalancerApiLiveTest extends 
BaseProfitBricksLiveTest {
 
    @AfterClass(alwaysRun = true)
    public void testDeleteLoadBalancer() {
-      boolean result = 
api.loadBalancerApi().deleteLoadbalancer(loadBalancerID);
+      boolean result = 
api.loadBalancerApi().deleteLoadBalancer(loadBalancerID);
 
       Assert.assertTrue(result);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
index f91083a..1271244 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/LoadbalancerApiMockTest.java
@@ -273,7 +273,7 @@ public class LoadbalancerApiMockTest extends 
BaseProfitBricksMockTest {
       String content = "<ws:deleteLoadBalancer><loadBalancerId>" + 
loadBalancerId + "</loadBalancerId></ws:deleteLoadBalancer>";
 
       try {
-         boolean done = api.deleteLoadbalancer(loadBalancerId);
+         boolean done = api.deleteLoadBalancer(loadBalancerId);
 
          assertRequestHasCommonProperties(server.takeRequest(), content);
          assertTrue(done);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
index 957555b..6c50f2a 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiLiveTest.java
@@ -89,20 +89,20 @@ public class SnapshotApiLiveTest extends 
BaseProfitBricksLiveTest {
       String newName = "new name";
 
       api.snapshotApi().updateSnapshot(Snapshot.Request.updatingBuilder()
-             .snapshotId(snapshotId)
-             .description("new description")
-             .name(newName)
-             .bootable(true)
-             .osType(OsType.LINUX)
-             .cpuHotplug(true)
-             .cpuHotunplug(true)
-             .discVirtioHotplug(true)
-             .discVirtioHotunplug(true)
-             .nicHotplug(true)
-             .nicHotunplug(true)
-             .ramHotplug(true)
-             .ramHotunplug(true)
-             .build());
+              .snapshotId(snapshotId)
+              .description("new description")
+              .name(newName)
+              .bootable(true)
+              .osType(OsType.LINUX)
+              .isCpuHotPlug(true)
+              .isCpuHotUnPlug(true)
+              .isDiscVirtioHotPlug(true)
+              .isDiscVirtioHotUnPlug(true)
+              .isNicHotPlug(true)
+              .isNicHotUnPlug(true)
+              .isRamHotPlug(true)
+              .isRamHotUnPlug(true)
+              .build());
 
       Snapshot snapshot = api.snapshotApi().getSnapshot(snapshotId);
 
@@ -126,7 +126,7 @@ public class SnapshotApiLiveTest extends 
BaseProfitBricksLiveTest {
 
    private void initializeWaitPredicate() {
       this.snapshotWaitingPredicate = Predicates2.retry(
-             new ProvisioningStatusPollingPredicate(api, 
ProvisioningStatusAware.SNAPSHOT, ProvisioningState.AVAILABLE),
-             2l * 60l, 2l, TimeUnit.SECONDS);
+              new ProvisioningStatusPollingPredicate(api, 
ProvisioningStatusAware.SNAPSHOT, ProvisioningState.AVAILABLE),
+              2l * 60l, 2l, TimeUnit.SECONDS);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
index 80342b0..528f893 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/SnapshotApiMockTest.java
@@ -47,13 +47,13 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
       SnapshotApi api = pbApi.snapshotApi();
 
       try {
-        List<Snapshot> snapshots = api.getAllSnapshots();
-        assertRequestHasCommonProperties(server.takeRequest(), 
"<ws:getAllSnapshots/>");
-        assertNotNull(snapshots);
-        assertEquals(snapshots.size(), 2);
+         List<Snapshot> snapshots = api.getAllSnapshots();
+         assertRequestHasCommonProperties(server.takeRequest(), 
"<ws:getAllSnapshots/>");
+         assertNotNull(snapshots);
+         assertEquals(snapshots.size(), 2);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -66,12 +66,12 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
       SnapshotApi api = pbApi.snapshotApi();
 
       try {
-        List<Snapshot> snapshots = api.getAllSnapshots();
-        assertRequestHasCommonProperties(server.takeRequest());
-        assertTrue(snapshots.isEmpty());
+         List<Snapshot> snapshots = api.getAllSnapshots();
+         assertRequestHasCommonProperties(server.takeRequest());
+         assertTrue(snapshots.isEmpty());
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -88,13 +88,13 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
       String content = "<ws:getSnapshot><snapshotId>" + id + 
"</snapshotId></ws:getSnapshot>";
 
       try {
-        Snapshot snapshot = api.getSnapshot(id);
-        assertRequestHasCommonProperties(server.takeRequest(), content);
-        assertNotNull(snapshot);
-        assertEquals(snapshot.id(), id);
+         Snapshot snapshot = api.getSnapshot(id);
+         assertRequestHasCommonProperties(server.takeRequest(), content);
+         assertNotNull(snapshot);
+         assertEquals(snapshot.id(), id);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -108,12 +108,12 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
 
       String id = "random-non-existing-id";
       try {
-        Snapshot snapshot = api.getSnapshot(id);
-        assertRequestHasCommonProperties(server.takeRequest());
-        assertNull(snapshot);
+         Snapshot snapshot = api.getSnapshot(id);
+         assertRequestHasCommonProperties(server.takeRequest());
+         assertNull(snapshot);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -128,27 +128,27 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
       String storageId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
 
       String content = "<ws:createSnapshot>"
-             + "<request>"
-             + "<storageId>" + storageId + "</storageId>"
-             + "<description>description</description>"
-             + "<snapshotName>snapshot-name</snapshotName>"
-             + "</request>"
-             + "</ws:createSnapshot>";
+              + "<request>"
+              + "<storageId>" + storageId + "</storageId>"
+              + "<description>description</description>"
+              + "<snapshotName>snapshot-name</snapshotName>"
+              + "</request>"
+              + "</ws:createSnapshot>";
 
       try {
-        Snapshot snapshot = api.createSnapshot(
-                Snapshot.Request.creatingBuilder()
-                .storageId(storageId)
-                .description("description")
-                .name("snapshot-name")
-                .build());
-        assertRequestHasCommonProperties(server.takeRequest(), content);
-        assertNotNull(snapshot.id());
-        assertEquals(snapshot.id(), "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
+         Snapshot snapshot = api.createSnapshot(
+                 Snapshot.Request.creatingBuilder()
+                 .storageId(storageId)
+                 .description("description")
+                 .name("snapshot-name")
+                 .build());
+         assertRequestHasCommonProperties(server.takeRequest(), content);
+         assertNotNull(snapshot.id());
+         assertEquals(snapshot.id(), "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
 
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -163,35 +163,43 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
       String snapshotId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
 
       String content = "<ws:updateSnapshot>"
-             + "<request>"
-             + "<snapshotId>" + snapshotId + "</snapshotId>"
-             + "<description>description</description>"
-             + "<snapshotName>snapshot-name</snapshotName>"
-             + "<bootable>false</bootable>"
-             + "<osType>LINUX</osType>"
-             + "<cpuHotPlug>false</cpuHotPlug>"
-             + "<cpuHotUnPlug>false</cpuHotUnPlug>"
-             + "<ramHotPlug>false</ramHotPlug>"
-             + "<ramHotUnPlug>false</ramHotUnPlug>"
-             + "<nicHotPlug>false</nicHotPlug>"
-             + "<nicHotUnPlug>false</nicHotUnPlug>"
-             + "<discVirtioHotPlug>false</discVirtioHotPlug>"
-             + "<discVirtioHotUnPlug>false</discVirtioHotUnPlug>"
-             + "</request>"
-             + "</ws:updateSnapshot>";
+              + "<request>"
+              + "<snapshotId>" + snapshotId + "</snapshotId>"
+              + "<description>description</description>"
+              + "<snapshotName>snapshot-name</snapshotName>"
+              + "<bootable>false</bootable>"
+              + "<osType>LINUX</osType>"
+              + "<cpuHotPlug>false</cpuHotPlug>"
+              + "<cpuHotUnPlug>false</cpuHotUnPlug>"
+              + "<ramHotPlug>false</ramHotPlug>"
+              + "<ramHotUnPlug>false</ramHotUnPlug>"
+              + "<nicHotPlug>false</nicHotPlug>"
+              + "<nicHotUnPlug>false</nicHotUnPlug>"
+              + "<discVirtioHotPlug>false</discVirtioHotPlug>"
+              + "<discVirtioHotUnPlug>false</discVirtioHotUnPlug>"
+              + "</request>"
+              + "</ws:updateSnapshot>";
 
       try {
-        String requestId = 
api.updateSnapshot(Snapshot.Request.updatingBuilder()
-                .snapshotId(snapshotId)
-                .name("snapshot-name")
-                .description("description")
-                .osType(OsType.LINUX)
-                .build());
-        assertRequestHasCommonProperties(server.takeRequest(), content);
-        assertNotNull(requestId);
+         String requestId = 
api.updateSnapshot(Snapshot.Request.updatingBuilder()
+                 .snapshotId(snapshotId)
+                 .name("snapshot-name")
+                 .description("description")
+                 .osType(OsType.LINUX)
+                 .isCpuHotPlug(false)
+                 .isCpuHotUnPlug(false)
+                 .isDiscVirtioHotPlug(false)
+                 .isDiscVirtioHotUnPlug(false)
+                 .isNicHotPlug(false)
+                 .isNicHotUnPlug(false)
+                 .isRamHotPlug(false)
+                 .isRamHotUnPlug(false)
+                 .build());
+         assertRequestHasCommonProperties(server.takeRequest(), content);
+         assertNotNull(requestId);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -207,12 +215,12 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
       String content = "<ws:deleteSnapshot><snapshotId>" + snapshotId + 
"</snapshotId></ws:deleteSnapshot>";
 
       try {
-        boolean result = api.deleteSnapshot(snapshotId);
-        assertRequestHasCommonProperties(server.takeRequest(), content);
-        assertTrue(result);
+         boolean result = api.deleteSnapshot(snapshotId);
+         assertRequestHasCommonProperties(server.takeRequest(), content);
+         assertTrue(result);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -226,12 +234,12 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
 
       String id = "random-non-existing-id";
       try {
-        boolean result = api.deleteSnapshot(id);
-        assertRequestHasCommonProperties(server.takeRequest());
-        Assert.assertFalse(result);
+         boolean result = api.deleteSnapshot(id);
+         assertRequestHasCommonProperties(server.takeRequest());
+         Assert.assertFalse(result);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 
@@ -248,15 +256,15 @@ public class SnapshotApiMockTest extends 
BaseProfitBricksMockTest {
 
       String content = "<ws:rollbackSnapshot><request><snapshotId>" + 
snapshotId + "</snapshotId><storageId>" + storageId + 
"</storageId></request></ws:rollbackSnapshot>";
       try {
-        String result = api.rollbackSnapshot(Snapshot.Request.rollbackBuilder()
-                .snapshotId(snapshotId)
-                .storageId(storageId)
-                .build());
-        assertRequestHasCommonProperties(server.takeRequest(), content);
-        assertNotNull(result);
+         String result = 
api.rollbackSnapshot(Snapshot.Request.rollbackBuilder()
+                 .snapshotId(snapshotId)
+                 .storageId(storageId)
+                 .build());
+         assertRequestHasCommonProperties(server.takeRequest(), content);
+         assertNotNull(result);
       } finally {
-        pbApi.close();
-        server.shutdown();
+         pbApi.close();
+         server.shutdown();
       }
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
index e2ee87e..16b2504 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/datacenter/DataCenterInfoResponseHandlerTest.java
@@ -19,8 +19,7 @@ package org.jclouds.profitbricks.http.parser.datacenter;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+import org.jclouds.date.DateService;
 import org.jclouds.http.functions.ParseSax;
 import org.jclouds.profitbricks.domain.AvailabilityZone;
 import org.jclouds.profitbricks.domain.DataCenter;
@@ -44,8 +43,8 @@ public class DataCenterInfoResponseHandlerTest extends 
BaseResponseHandlerTest<D
       return 
factory.create(injector.getInstance(DataCenterInfoResponseHandler.class));
    }
 
-   protected DateCodecFactory createDateParser() {
-      return injector.getInstance(DateCodecFactory.class);
+   protected DateService createDateParser() {
+      return injector.getInstance(DateService.class);
    }
 
    @Test
@@ -55,7 +54,7 @@ public class DataCenterInfoResponseHandlerTest extends 
BaseResponseHandlerTest<D
       DataCenter actual = 
parser.parse(payloadFromResource("/datacenter/datacenter.xml"));
       assertNotNull(actual, "Parsed content returned null");
 
-      DateCodec dateParser = createDateParser().iso8601();
+      DateService dateParser = createDateParser();
 
       DataCenter expected = DataCenter.builder()
               .id("12345678-abcd-efgh-ijkl-987654321000")
@@ -65,6 +64,11 @@ public class DataCenterInfoResponseHandlerTest extends 
BaseResponseHandlerTest<D
               .location(Location.US_LAS)
               .servers(ImmutableList.<Server>of(
                               Server.builder()
+                              .dataCenter(DataCenter.builder()
+                                      
.id("12345678-abcd-efgh-ijkl-987654321000")
+                                      .version(10)
+                                      .build()
+                              )
                               .id("qqqqqqqq-wwww-eeee-rrrr-tttttttttttt")
                               .name("jnode1")
                               .cores(4)
@@ -72,8 +76,8 @@ public class DataCenterInfoResponseHandlerTest extends 
BaseResponseHandlerTest<D
                               .hasInternetAccess(true)
                               .state(ProvisioningState.AVAILABLE)
                               .status(Server.Status.RUNNING)
-                              
.creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
-                              
.lastModificationTime(dateParser.toDate("2014-12-12T03:08:35.629Z"))
+                              
.creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+                              
.lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:08:35.629Z"))
                               .osType(OsType.LINUX)
                               .availabilityZone(AvailabilityZone.AUTO)
                               .isCpuHotPlug(true)
@@ -125,8 +129,8 @@ public class DataCenterInfoResponseHandlerTest extends 
BaseResponseHandlerTest<D
                               .size(40)
                               .name("jnode1-disk1")
                               .state(ProvisioningState.AVAILABLE)
-                              
.creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
-                              
.lastModificationTime(dateParser.toDate("2014-12-12T03:14:48.316Z"))
+                              
.creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+                              
.lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-12T03:14:48.316Z"))
                               .serverIds(ImmutableList.of(
                                               
"qqqqqqqq-wwww-eeee-rrrr-tttttttttttt"
                                       ))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
index 7d0cb88..e954fb0 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
@@ -91,7 +91,7 @@ public class ImageListResponseHandlerTest extends 
BaseResponseHandlerTest<List<I
               .name("Debian-jessie-prerelease-server-2015-01-01")
               .size(2048f)
               .type(Image.Type.HDD)
-              .location(Location.US_LAS_DEV)
+              .location(Location.US_LASDEV)
               .isNicHotPlug(true)
               .isNicHotUnPlug(true)
               .osType(OsType.LINUX)
@@ -110,7 +110,7 @@ public class ImageListResponseHandlerTest extends 
BaseResponseHandlerTest<List<I
               .name("Fedora-19-server-2015-01-01")
               .size(2048f)
               .type(Image.Type.HDD)
-              .location(Location.US_LAS_DEV)
+              .location(Location.US_LASDEV)
               .isNicHotPlug(true)
               .isNicHotUnPlug(true)
               .osType(OsType.LINUX)
@@ -129,7 +129,7 @@ public class ImageListResponseHandlerTest extends 
BaseResponseHandlerTest<List<I
               .name("Ubuntu-12.04-LTS-server-2015-01-01")
               .size(2048f)
               .type(Image.Type.HDD)
-              .location(Location.US_LAS_DEV)
+              .location(Location.US_LASDEV)
               .isNicHotPlug(true)
               .isNicHotUnPlug(true)
               .osType(OsType.LINUX)

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed247e7d/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
index cec0999..eedfa50 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/loadbalancer/LoadBalancerListResponseHandlerTest.java
@@ -17,9 +17,9 @@
 package org.jclouds.profitbricks.http.parser.loadbalancer;
 
 import com.google.common.collect.ImmutableList;
+
 import java.util.List;
-import org.jclouds.date.DateCodec;
-import org.jclouds.date.DateCodecFactory;
+
 import org.jclouds.http.functions.ParseSax;
 import org.jclouds.profitbricks.domain.Firewall;
 import org.jclouds.profitbricks.domain.LoadBalancer;
@@ -27,8 +27,12 @@ import 
org.jclouds.profitbricks.domain.LoadBalancer.Algorithm;
 import org.jclouds.profitbricks.domain.ProvisioningState;
 import org.jclouds.profitbricks.domain.Server;
 import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.date.DateService;
+import org.jclouds.profitbricks.domain.DataCenter;
 import org.testng.annotations.Test;
 
 @Test(groups = "unit", testName = "LoadBalancerListResponseHandlerTest")
@@ -39,8 +43,8 @@ public class LoadBalancerListResponseHandlerTest extends 
BaseResponseHandlerTest
       return 
factory.create(injector.getInstance(LoadBalancerListResponseHandler.class));
    }
 
-   protected DateCodecFactory createDateParser() {
-      return injector.getInstance(DateCodecFactory.class);
+   protected DateService createDateParser() {
+      return injector.getInstance(DateService.class);
    }
 
    @Test
@@ -50,23 +54,68 @@ public class LoadBalancerListResponseHandlerTest extends 
BaseResponseHandlerTest
       List<LoadBalancer> actual = 
parser.parse(payloadFromResource("/loadbalancer/loadbalancers.xml"));
       assertNotNull(actual, "Parsed content returned null");
 
-      DateCodec dateParser = createDateParser().iso8601();
+      DateService dateParser = createDateParser();
 
-      List<LoadBalancer> expected = 
ImmutableList.<LoadBalancer>of(LoadBalancer.builder().id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").loadBalancerAlgorithm(Algorithm.ROUND_ROBIN).name("load-1234567890-name")
-              
.dataCenterId("datacenter-id").dataCenterVersion("datacenter-version").internetAccess(true).ip("192.168.0.1").lanId("lan-id").state(ProvisioningState.AVAILABLE).creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z")).lastModificationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
+      List<LoadBalancer> expected = ImmutableList.<LoadBalancer>of(
+              LoadBalancer.builder()
+              .id("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")
+              .algorithm(Algorithm.ROUND_ROBIN)
+              .name("load-1234567890-name")
+              .dataCenter(DataCenter.builder()
+                      .id("datacenter-id")
+                      .version(4)
+                      .build())
+              .internetAccess(true)
+              .ip("192.168.0.1")
+              .lanId("lan-id")
+              .state(ProvisioningState.AVAILABLE)
+              
.creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+              
.lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
               .firewalls(ImmutableList.<Firewall>of(
-                              
Firewall.builder().id("firewall-id").nicId("nic-id").active(false).state(ProvisioningState.AVAILABLE).build()
+                              Firewall.builder()
+                              .id("firewall-id")
+                              .nicId("nic-id")
+                              .active(false)
+                              .state(ProvisioningState.AVAILABLE)
+                              .build()
                       ))
               .balancedServers(ImmutableList.<Server>of(
-                              
Server.builder().activate(true).balancedNicId("balanced-nic-id").id("server-id").name("server-name").build()
+                              Server.builder()
+                              .loadBalanced(true)
+                              .balancedNicId("balanced-nic-id")
+                              .id("server-id")
+                              .name("server-name")
+                              .build()
                       )).build(),
-              
LoadBalancer.builder().id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy").loadBalancerAlgorithm(Algorithm.ROUND_ROBIN).name("load-balancer-name")
-              
.dataCenterId("datacenter-id").dataCenterVersion("datacenter-version").internetAccess(false).ip("192.168.0.1").lanId("lan-id").state(ProvisioningState.AVAILABLE).creationTime(dateParser.toDate("2014-12-04T07:09:23.138Z")).lastModificationTime(dateParser.toDate("2014-12-04T07:09:23.138Z"))
+              LoadBalancer.builder()
+              .id("qqqqqqqq-wwww-rrrr-tttt-yyyyyyyyyyyy")
+              .algorithm(Algorithm.ROUND_ROBIN)
+              .name("load-balancer-name")
+              .dataCenter(DataCenter.builder()
+                      .id("datacenter-id")
+                      .version(4)
+                      .build())
+              .internetAccess(false)
+              .ip("192.168.0.1")
+              .lanId("lan-id")
+              .state(ProvisioningState.AVAILABLE)
+              
.creationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
+              
.lastModificationTime(dateParser.iso8601DateOrSecondsDateParse("2014-12-04T07:09:23.138Z"))
               .firewalls(ImmutableList.<Firewall>of(
-                              
Firewall.builder().id("firewall-id").nicId("nic-id").active(false).state(ProvisioningState.AVAILABLE).build()
+                              Firewall.builder()
+                              .id("firewall-id")
+                              .nicId("nic-id")
+                              .active(false)
+                              .state(ProvisioningState.AVAILABLE)
+                              .build()
                       ))
               .balancedServers(ImmutableList.<Server>of(
-                              
Server.builder().activate(false).balancedNicId("balanced-nic-id").id("server-id").name("server-name").build()
+                              Server.builder()
+                              .loadBalanced(false)
+                              .balancedNicId("balanced-nic-id")
+                              .id("server-id")
+                              .name("server-name")
+                              .build()
                       ))
               .build()
       );

Reply via email to