http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/ServerBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/ServerBuilderTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/ServerBuilderTest.java
new file mode 100644
index 0000000..f5f7a20
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/domain/ServerBuilderTest.java
@@ -0,0 +1,164 @@
+/*
+ * 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.domain;
+
+import java.util.Date;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ServerBuilderTest" )
+public class ServerBuilderTest {
+
+   private final Boolean _isCpuHotPlug = true;
+   private final Boolean _isRamHotPlug = false;
+   private final Boolean _isNicHotPlug = true;
+   private final Boolean _isNicHotUnPlug = false;
+   private final Boolean _isDiscVirtioHotPlug = true;
+   private final Boolean _isDiscVirtioHotUnPlug = false;
+   private final int _cores = 8;
+   private final int _ram = 8 * 1024;
+   private final String _id = "some-random-server-id";
+   private final String _name = "jclouds-node";
+   private final Boolean _hasInternetAccess = true;
+   private final ProvisioningState _state = ProvisioningState.INACTIVE;
+   private final Server.Status _status = Server.Status.SHUTOFF;
+   private final OsType _osType = OsType.LINUX;
+   private final AvailabilityZone _availabilityZone = AvailabilityZone.ZONE_1;
+   private final Date _creationTime = new Date();
+   private final Date _lastModificationTime = new Date();
+
+   private final Integer _lanId = 5;
+   private final String _dataCenterId = "some-random-datacenter-id";
+   private final String _bootFromStorageId = "some-random-storage-id";
+   private final String _bootFromImageId = "some-random-image-id";
+
+   private final String _serverId = "some-random-server-id";
+
+   @Test
+   public void testAutoValueServerPropertiesSettingCorrectly() {
+      Server actual = Server.builder()
+              .availabilityZone( _availabilityZone )
+              .creationTime( _creationTime )
+              .cores( _cores )
+              .hasInternetAccess( _hasInternetAccess )
+              .id( _id )
+              .name( _name )
+              .isCpuHotPlug( _isCpuHotPlug )
+              .isDiscVirtioHotPlug( _isDiscVirtioHotPlug )
+              .isDiscVirtioHotUnPlug( _isDiscVirtioHotUnPlug )
+              .isNicHotPlug( _isNicHotPlug )
+              .isNicHotUnPlug( _isNicHotUnPlug )
+              .isRamHotPlug( _isRamHotPlug )
+              .lastModificationTime( _lastModificationTime )
+              .ram( _ram )
+              .osType( _osType )
+              .state( _state )
+              .status( _status )
+              .build();
+
+      assertEquals( actual.availabilityZone(), _availabilityZone );
+      assertEquals( actual.cores(), _cores );
+      assertEquals( actual.creationTime(), _creationTime );
+      assertEquals( actual.hasInternetAccess(), _hasInternetAccess );
+      assertEquals( actual.id(), _id );
+      assertEquals( actual.name(), _name );
+      assertEquals( actual.isCpuHotPlug(), _isCpuHotPlug );
+      assertEquals( actual.isDiscVirtioHotPlug(), _isDiscVirtioHotPlug );
+      assertEquals( actual.isDiscVirtioHotUnPlug(), _isDiscVirtioHotUnPlug );
+      assertEquals( actual.isNicHotPlug(), _isNicHotPlug );
+      assertEquals( actual.isNicHotUnPlug(), _isNicHotUnPlug );
+      assertEquals( actual.isRamHotPlug(), _isRamHotPlug );
+      assertEquals( actual.lastModificationTime(), _lastModificationTime );
+      assertEquals( actual.ram(), _ram );
+      assertEquals( actual.osType(), _osType );
+      assertEquals( actual.state(), _state );
+   }
+
+   @Test
+   public void 
testAutoValueServerRequestCreatePayloadPropertiesSettingCorrectly() {
+      Server.Request.CreatePayload actual = Server.Request.creatingBuilder()
+              .availabilityZone( _availabilityZone )
+              .bootFromImageId( _bootFromImageId )
+              .bootFromStorageId( _bootFromStorageId )
+              .cores( _cores )
+              .dataCenterId( _dataCenterId )
+              .hasInternetAccess( _hasInternetAccess )
+              .name( _name )
+              .isCpuHotPlug( _isCpuHotPlug )
+              .isDiscVirtioHotPlug( _isDiscVirtioHotPlug )
+              .isDiscVirtioHotUnPlug( _isDiscVirtioHotUnPlug )
+              .isNicHotPlug( _isNicHotPlug )
+              .isNicHotUnPlug( _isNicHotUnPlug )
+              .isRamHotPlug( _isRamHotPlug )
+              .lanId( _lanId )
+              .ram( _ram )
+              .osType( _osType )
+              .build();
+
+      assertEquals( actual.availabilityZone(), _availabilityZone );
+      assertEquals( actual.bootFromImageId(), _bootFromImageId );
+      assertEquals( actual.bootFromStorageId(), _bootFromStorageId );
+      assertEquals( actual.cores(), _cores );
+      assertEquals( actual.dataCenterId(), _dataCenterId );
+      assertEquals( actual.hasInternetAccess(), _hasInternetAccess );
+      assertEquals( actual.name(), _name );
+      assertEquals( actual.isCpuHotPlug(), _isCpuHotPlug );
+      assertEquals( actual.isDiscVirtioHotPlug(), _isDiscVirtioHotPlug );
+      assertEquals( actual.isDiscVirtioHotUnPlug(), _isDiscVirtioHotUnPlug );
+      assertEquals( actual.isNicHotPlug(), _isNicHotPlug );
+      assertEquals( actual.isNicHotUnPlug(), _isNicHotUnPlug );
+      assertEquals( actual.isRamHotPlug(), _isRamHotPlug );
+      assertEquals( actual.lanId(), _lanId );
+      assertEquals( actual.ram(), _ram );
+      assertEquals( actual.osType(), _osType );
+   }
+
+   @Test
+   public void 
testAutoValueServerRequestUpdatePayloadPropertiesSettingCorrectly() {
+      Server.Request.UpdatePayload actual = Server.Request.updatingBuilder()
+              .availabilityZone( _availabilityZone )
+              .bootFromImageId( _bootFromImageId )
+              .bootFromStorageId( _bootFromStorageId )
+              .cores( _cores )
+              .name( _name )
+              .id( _id )
+              .isCpuHotPlug( _isCpuHotPlug )
+              .isDiscVirtioHotPlug( _isDiscVirtioHotPlug )
+              .isDiscVirtioHotUnPlug( _isDiscVirtioHotUnPlug )
+              .isNicHotPlug( _isNicHotPlug )
+              .isNicHotUnPlug( _isNicHotUnPlug )
+              .isRamHotPlug( _isRamHotPlug )
+              .ram( _ram )
+              .osType( _osType )
+              .build();
+
+      assertEquals( actual.availabilityZone(), _availabilityZone );
+      assertEquals( actual.bootFromImageId(), _bootFromImageId );
+      assertEquals( actual.bootFromStorageId(), _bootFromStorageId );
+      assertEquals( actual.cores(), _cores );
+      assertEquals( actual.name(), _name );
+      assertEquals( actual.id(), _id );
+      assertEquals( actual.isCpuHotPlug(), _isCpuHotPlug );
+      assertEquals( actual.isDiscVirtioHotPlug(), _isDiscVirtioHotPlug );
+      assertEquals( actual.isDiscVirtioHotUnPlug(), _isDiscVirtioHotUnPlug );
+      assertEquals( actual.isNicHotPlug(), _isNicHotPlug );
+      assertEquals( actual.isNicHotUnPlug(), _isNicHotUnPlug );
+      assertEquals( actual.isRamHotPlug(), _isRamHotPlug );
+      assertEquals( actual.ram(), _ram );
+      assertEquals( actual.osType(), _osType );
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiMockTest.java
index a9c093e..5c05e4d 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiMockTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/DataCenterApiMockTest.java
@@ -51,7 +51,7 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
 
       try {
          List<DataCenter> dataCenters = api.getAllDataCenters();
-         assertRequestHasCommonProperties(server.takeRequest());
+         assertRequestHasCommonProperties(server.takeRequest(), 
"<ws:getAllDataCenters/>");
          assertNotNull(dataCenters);
          assertEquals(dataCenters.size(), 2);
       } finally {
@@ -87,9 +87,10 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
       DataCenterApi api = pbApi.dataCenterApi();
 
       String id = "12345678-abcd-efgh-ijkl-987654321000";
+      String content = "<ws:getDataCenter><dataCenterId>" + id + 
"</dataCenterId></ws:getDataCenter>";
       try {
          DataCenter dataCenter = api.getDataCenter(id);
-         assertRequestHasCommonProperties(server.takeRequest());
+         assertRequestHasCommonProperties(server.takeRequest(), content );
          assertNotNull(dataCenter);
          assertEquals(dataCenter.id(), id);
       } finally {
@@ -101,7 +102,7 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
    @Test
    public void testGetNonExistingDataCenter() throws Exception {
       MockWebServer server = mockWebServer();
-      server.enqueue(new 
MockResponse().setResponseCode(500).setBody(payloadFromResource("/fault-404.xml")));
+      server.enqueue(new MockResponse().setResponseCode(404));
 
       ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
       DataCenterApi api = pbApi.dataCenterApi();
@@ -126,9 +127,10 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
       DataCenterApi api = pbApi.dataCenterApi();
 
       String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+      String content = "<ws:getDataCenterState><dataCenterId>" + id + 
"</dataCenterId></ws:getDataCenterState>";
       try {
          ProvisioningState state = api.getDataCenterState(id);
-         assertRequestHasCommonProperties(server.takeRequest());
+         assertRequestHasCommonProperties(server.takeRequest(), content );
          assertNotNull(state);
          assertEquals(state, ProvisioningState.AVAILABLE);
       } finally {
@@ -145,11 +147,15 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
       ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
       DataCenterApi api = pbApi.dataCenterApi();
 
+      String content = "<ws:createDataCenter><request>"
+              + "<dataCenterName>JClouds-DC</dataCenterName>"
+              + "<location>de/fra</location>"
+              + "</request></ws:createDataCenter>";
       try {
          DataCenter dataCenter = api.createDataCenter(
                  DataCenter.Request.CreatePayload.create("JClouds-DC", 
Location.DE_FRA)
          );
-         assertRequestHasCommonProperties(server.takeRequest());
+         assertRequestHasCommonProperties(server.takeRequest(), content );
          assertNotNull(dataCenter);
          assertEquals(dataCenter.id(), "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
          assertEquals(dataCenter.version(), 1);
@@ -179,13 +185,19 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
 
       ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
       DataCenterApi api = pbApi.dataCenterApi();
-
+      
       String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+      String newName = "Apache";
+      
+      String content = "<ws:updateDataCenter><request>"
+              + "<dataCenterId>" + id + "</dataCenterId>"
+              + "<dataCenterName>" + newName + "</dataCenterName>"
+              + "</request></ws:updateDataCenter>";
       try {
          DataCenter dataCenter = api.updateDataCenter(
-                 DataCenter.Request.UpdatePayload.create(id, "Apache")
+                 DataCenter.Request.UpdatePayload.create(id, newName)
          );
-         assertRequestHasCommonProperties(server.takeRequest());
+         assertRequestHasCommonProperties(server.takeRequest(), content);
          assertNotNull(dataCenter);
          assertEquals(dataCenter.id(), id);
          assertEquals(dataCenter.version(), 2);
@@ -204,10 +216,12 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
       DataCenterApi api = pbApi.dataCenterApi();
 
       String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+      
+      String content = "<ws:clearDataCenter><dataCenterId>" + id + 
"</dataCenterId></ws:clearDataCenter>";
       try {
          DataCenter dataCenter = api.clearDataCenter(id);
 
-         assertRequestHasCommonProperties(server.takeRequest());
+         assertRequestHasCommonProperties(server.takeRequest(), content);
          assertNotNull(dataCenter);
          assertEquals(dataCenter.id(), id);
          assertEquals(dataCenter.version(), 3);
@@ -225,9 +239,12 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
       ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
       DataCenterApi api = pbApi.dataCenterApi();
 
+      String id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+      
+      String content = "<ws:deleteDataCenter><dataCenterId>" + id + 
"</dataCenterId></ws:deleteDataCenter>";
       try {
-         boolean result = 
api.deleteDataCenter("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
-         assertRequestHasCommonProperties(server.takeRequest());
+         boolean result = api.deleteDataCenter(id);
+         assertRequestHasCommonProperties(server.takeRequest(), content);
          assertTrue(result);
       } finally {
          pbApi.close();
@@ -238,7 +255,7 @@ public class DataCenterApiMockTest extends 
BaseProfitBricksMockTest {
    @Test
    public void testDeleteNonExistingDataCenter() throws Exception {
       MockWebServer server = mockWebServer();
-      server.enqueue(new 
MockResponse().setResponseCode(500).setBody(payloadFromResource("/fault-404.xml")));
+      server.enqueue(new MockResponse().setResponseCode( 404 ));
 
       ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
       DataCenterApi api = pbApi.dataCenterApi();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/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
new file mode 100644
index 0000000..2299a0c
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiLiveTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.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 org.testng.annotations.Test;
+
+@Test(groups = "live", testName = "ImageApiLiveTest", singleThreaded = true)
+public class ImageApiLiveTest extends BaseProfitBricksLiveTest {
+
+   private String imageId;
+
+   @Test
+   public void testGetAllImages() {
+      List<Image> images = api.imageApi().getAllImages();
+
+      assertNotNull(images);
+      assertFalse(images.isEmpty(), "No images found.");
+      imageId = Iterables.getFirst(images, null).id();
+   }
+
+   @Test(dependsOnMethods = "testGetAllImages")
+   public void testGetImage() {
+      Image image = api.imageApi().getImage(imageId);
+
+      assertNotNull(image);
+      assertEquals(image.id(), imageId);
+   }
+
+   @Test
+   public void testGetNonExistingImage() {
+      String id = "random-non-existing-id";
+      Image image = api.imageApi().getImage(id);
+
+      assertNull(image, "Should've just returned null");
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiMockTest.java
new file mode 100644
index 0000000..f1229ae
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ImageApiMockTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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.features;
+
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import java.util.List;
+import org.jclouds.profitbricks.ProfitBricksApi;
+import org.jclouds.profitbricks.domain.Image;
+import org.jclouds.profitbricks.internal.BaseProfitBricksMockTest;
+import static 
org.jclouds.profitbricks.internal.BaseProfitBricksMockTest.mockWebServer;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import org.testng.annotations.Test;
+
+/**
+ * Mock tests for the {@link org.jclouds.profitbricks.features.ImageApi} class
+ */
+@Test(groups = "unit", testName = "ImageApiMockTest")
+public class ImageApiMockTest extends BaseProfitBricksMockTest {
+
+   @Test
+   public void testGetAllImages() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue(new 
MockResponse().setBody(payloadFromResource("/image/images.xml")));
+
+      ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+      ImageApi api = pbApi.imageApi();
+
+      try {
+         List<Image> images = api.getAllImages();
+         assertRequestHasCommonProperties(server.takeRequest(), 
"<ws:getAllImages/>");
+         assertNotNull(images);
+         assertTrue(images.size() == 7);
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testGetAllImagesReturning404() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue(new MockResponse().setResponseCode(404));
+
+      ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+      ImageApi api = pbApi.imageApi();
+
+      try {
+         List<Image> images = api.getAllImages();
+         assertRequestHasCommonProperties(server.takeRequest());
+         assertTrue(images.isEmpty());
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testGetImage() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue(new 
MockResponse().setBody(payloadFromResource("/image/image.xml")));
+
+      ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+      ImageApi api = pbApi.imageApi();
+
+      String id = "5ad99c9e-9166-11e4-9d74-52540066fee9";
+      
+      String content = "<ws:getImage><imageId>" + id + 
"</imageId></ws:getImage>";
+      try {
+         Image image = api.getImage(id);
+         assertRequestHasCommonProperties(server.takeRequest(), content);
+         assertNotNull(image);
+         assertEquals(image.id(), id);
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+
+   }
+
+   @Test
+   public void testGetNonExistingImage() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue(new MockResponse().setResponseCode(404));
+
+      ProfitBricksApi pbApi = api(server.getUrl(rootUrl));
+      ImageApi api = pbApi.imageApi();
+
+      String id = "random-non-existing-id";
+      try {
+         Image image = api.getImage(id);
+         assertRequestHasCommonProperties(server.takeRequest());
+         assertNull(image);
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiLiveTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiLiveTest.java
new file mode 100644
index 0000000..3237e9c
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiLiveTest.java
@@ -0,0 +1,139 @@
+/*
+ * 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.features;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import org.jclouds.profitbricks.BaseProfitBricksLiveTest;
+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.ProvisioningState;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.util.Predicates2;
+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 org.testng.annotations.AfterClass;
+import org.testng.annotations.Test;
+
+@Test( groups = "live", testName = "ServerApiLiveTest", singleThreaded = true )
+public class ServerApiLiveTest extends BaseProfitBricksLiveTest {
+
+   private Predicate<String> waitUntilAvailable;
+   private DataCenter dataCenter;
+   private String createdServerId;
+
+   @Override
+   protected void initialize() {
+      super.initialize();
+      List<DataCenter> dataCenters = api.dataCenterApi().getAllDataCenters();
+      assertFalse( dataCenters.isEmpty(), "Must atleast have 1 datacenter 
available for server testing." );
+
+      this.dataCenter = Iterables.getFirst( dataCenters, null );
+
+      this.waitUntilAvailable = Predicates2.retry(
+              new ProvisioningStatusPollingPredicate( api, 
ProvisioningStatusAware.SERVER, ProvisioningState.AVAILABLE ),
+              2l * 60l, 2l, TimeUnit.SECONDS );
+   }
+
+   @Test
+   public void testCreateServer() {
+      String serverId = api.serverApi().createServer(
+              Server.Request.CreatePayload.create( dataCenter.id(), 
"jclouds-node", 1, 1024 ) );
+
+      assertNotNull( serverId );
+      this.createdServerId = serverId;
+   }
+
+   @Test( dependsOnMethods = "testCreateServer" )
+   public void testGetServer() {
+      Server server = api.serverApi().getServer( createdServerId );
+
+      assertNotNull( server );
+      assertEquals( server.id(), createdServerId );
+   }
+
+   @Test( dependsOnMethods = "testCreateServer" )
+   public void testGetAllServers() {
+      List<Server> servers = api.serverApi().getAllServers();
+
+      assertNotNull( servers );
+      assertFalse( servers.isEmpty() );
+   }
+
+   @Test( dependsOnMethods = "testCreateServer" )
+   public void testWaitUntilAvailable() {
+      boolean available = waitUntilAvailable.apply( createdServerId );
+
+      assertTrue( available );
+   }
+
+   @Test( dependsOnMethods = "testWaitUntilAvailable" )
+   public void testUpdateServer() {
+      String requestId = api.serverApi().updateServer(
+              Server.Request.updatingBuilder()
+              .id( createdServerId )
+              .name( "apache-node" )
+              .cores( 2 )
+              .ram( 2 * 1024 )
+              .build() );
+
+      assertNotNull( requestId );
+      waitUntilAvailable.apply( createdServerId );
+
+      Server server = api.serverApi().getServer( createdServerId );
+      assertEquals( server.state(), ProvisioningState.AVAILABLE );
+   }
+
+   @Test( dependsOnMethods = "testUpdateServer" )
+   public void testStopServer() {
+      String requestId = api.serverApi().stopServer( createdServerId );
+      assertNotNull( requestId );
+
+      Predicate<String> waitUntilInactive = Predicates2.retry( new 
ProvisioningStatusPollingPredicate(
+              api, ProvisioningStatusAware.SERVER, ProvisioningState.INACTIVE 
), 2l * 60l, 2l, TimeUnit.SECONDS );
+
+      waitUntilInactive.apply( createdServerId );
+      Server server = api.serverApi().getServer( createdServerId );
+      assertEquals( server.status(), Server.Status.SHUTOFF );
+   }
+
+   @Test( dependsOnMethods = "testStopServer" )
+   public void testStartServer() {
+      String requestId = api.serverApi().startServer( createdServerId );
+      assertNotNull( requestId );
+
+      waitUntilAvailable.apply( createdServerId );
+
+      Server server = api.serverApi().getServer( createdServerId );
+      assertEquals( server.status(), Server.Status.RUNNING );
+   }
+
+   @AfterClass( alwaysRun = true )
+   public void testDeleteServer() {
+      if ( createdServerId != null ) {
+         boolean result = api.serverApi().deleteServer( createdServerId );
+
+         assertTrue( result, "Created test server was not deleted." );
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiMockTest.java
new file mode 100644
index 0000000..d9fd478
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/features/ServerApiMockTest.java
@@ -0,0 +1,338 @@
+/*
+ * 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.features;
+
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import java.util.List;
+import org.jclouds.profitbricks.ProfitBricksApi;
+import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.domain.Server;
+import org.jclouds.profitbricks.internal.BaseProfitBricksMockTest;
+import static 
org.jclouds.profitbricks.internal.BaseProfitBricksMockTest.mockWebServer;
+import org.jclouds.rest.ResourceNotFoundException;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+import org.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ServerApiMockTest" )
+public class ServerApiMockTest extends BaseProfitBricksMockTest {
+
+   @Test
+   public void testGetAllServers() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/servers.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      try {
+         List<Server> servers = api.getAllServers();
+         assertRequestHasCommonProperties( server.takeRequest(), 
"<ws:getAllServers/>" );
+         assertNotNull( servers );
+         assertTrue( servers.size() == 2 );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testGetAllServersReturning404() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setResponseCode( 404 ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      try {
+         List<Server> servers = api.getAllServers();
+         assertRequestHasCommonProperties( server.takeRequest() );
+         assertTrue( servers.isEmpty() );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testGetServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String id = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+
+      String content = "<ws:getServer><serverId>" + id + 
"</serverId></ws:getServer>";
+      try {
+         Server svr = api.getServer( id );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertNotNull( svr );
+         assertEquals( svr.id(), id );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testGetNonExistingServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setResponseCode( 404 ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String id = "random-non-existing-id";
+      try {
+         Server srvr = api.getServer( id );
+         assertRequestHasCommonProperties( server.takeRequest() );
+         assertNull( srvr );
+
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testStartServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server-start.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String id = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+
+      String content = "<ws:startServer><serverId>" + id + 
"</serverId></ws:startServer>";
+      try {
+         String requestId = api.startServer( id );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertEquals( requestId, "123456" );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testStartNonExistingServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setResponseCode( 500 ).setBody( 
payloadFromResource( "/fault-404.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String id = "random-non-existing-id";
+      try {
+         String requestId = api.startServer( id );
+         assertRequestHasCommonProperties( server.takeRequest() );
+         fail( "Should've failed." );
+      } catch ( ResourceNotFoundException ex ) {
+         // expected exception
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testStopServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server-stop.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String id = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+
+      String content = "<ws:stopServer><serverId>" + id + 
"</serverId></ws:stopServer>";
+      try {
+         String requestId = api.stopServer( id );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertEquals( requestId, "123456" );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testResetServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server-reset.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String id = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+
+      String content = "<ws:resetServer><serverId>" + id + 
"</serverId></ws:resetServer>";
+      try {
+         String requestId = api.resetServer( id );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertEquals( requestId, "123456" );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testCreateServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server-create.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String dataCenterId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+      String name = "jclouds-node";
+      String imageId = "some-random-image-id";
+
+      String content = "<ws:createServer>"
+              + "<request>"
+              + "<dataCenterId>" + dataCenterId + "</dataCenterId>"
+              + "<cores>4</cores>"
+              + "<ram>4096</ram>"
+              + "<serverName>" + name + "</serverName>"
+              //              + "<bootFromStorageId></bootFromStorageId>"
+              + "<bootFromImageId>" + imageId + "</bootFromImageId>"
+              + "<internetAccess>true</internetAccess>"
+              + "<lanId>2</lanId>"
+              + "<osType>LINUX</osType>"
+              + "<availabilityZone>ZONE_1</availabilityZone>"
+              + "<cpuHotPlug>true</cpuHotPlug>"
+              + "<ramHotPlug>false</ramHotPlug>"
+              + "<nicHotPlug>true</nicHotPlug>"
+              + "<nicHotUnPlug>false</nicHotUnPlug>"
+              + "<discVirtioHotPlug>true</discVirtioHotPlug>"
+              + "<discVirtioHotUnPlug>false</discVirtioHotUnPlug>"
+              + "</request>"
+              + "</ws:createServer>";
+
+      try {
+         String serverId = api.createServer( Server.Request.creatingBuilder()
+                 .dataCenterId( dataCenterId )
+                 .name( name )
+                 .cores( 4 )
+                 .ram( 4 * 1024 )
+                 .bootFromImageId( imageId )
+                 .hasInternetAccess( Boolean.TRUE )
+                 .lanId( 2 )
+                 .osType( OsType.LINUX )
+                 .availabilityZone( AvailabilityZone.ZONE_1 )
+                 .isCpuHotPlug( Boolean.TRUE )
+                 .isRamHotPlug( Boolean.FALSE )
+                 .isNicHotPlug( Boolean.TRUE )
+                 .isNicHotUnPlug( Boolean.FALSE )
+                 .isDiscVirtioHotPlug( Boolean.TRUE )
+                 .isDiscVirtioHotUnPlug( Boolean.FALSE )
+                 .build() );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertNotNull( serverId );
+         assertEquals( serverId, "qwertyui-qwer-qwer-qwer-qwertyyuiiop" );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testUpdateServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server-update.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String serverId = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+      String newName = "apache-node";
+      String storageId = "some-random-storage-id";
+
+      String content = "<ws:updateServer>"
+              + "<request>"
+              + "<serverId>" + serverId + "</serverId>"
+              + "<cores>8</cores>"
+              + "<ram>8192</ram>"
+              + "<serverName>" + newName + "</serverName>"
+              + "<bootFromStorageId>" + storageId + "</bootFromStorageId>"
+//              + "<bootFromImageId>?</bootFromImageId>"
+              + "<osType>OTHER</osType>"
+              + "<availabilityZone>AUTO</availabilityZone>"
+              + "<cpuHotPlug>false</cpuHotPlug>"
+              + "<ramHotPlug>true</ramHotPlug>"
+              + "<nicHotPlug>false</nicHotPlug>"
+              + "<nicHotUnPlug>true</nicHotUnPlug>"
+              + "<discVirtioHotPlug>false</discVirtioHotPlug>"
+              + "<discVirtioHotUnPlug>true</discVirtioHotUnPlug>"
+              + "</request>"
+              + "</ws:updateServer>";
+      try {
+         String requestId = api.updateServer( Server.Request.updatingBuilder()
+                 .id( serverId )
+                 .name( newName )
+                 .cores( 8 )
+                 .ram( 8 * 1024 )
+                 .bootFromStorageId( storageId )
+                 .osType( OsType.OTHER )
+                 .availabilityZone( AvailabilityZone.AUTO )
+                 .isCpuHotPlug( false )
+                 .isRamHotPlug( true )
+                 .isNicHotPlug( false )
+                 .isNicHotUnPlug( true )
+                 .isDiscVirtioHotPlug( false )
+                 .isDiscVirtioHotUnPlug( true )
+                 .build() );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertNotNull( requestId );
+         assertEquals( requestId, "102458" );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+   }
+
+   @Test
+   public void testDeleteServer() throws Exception {
+      MockWebServer server = mockWebServer();
+      server.enqueue( new MockResponse().setBody( payloadFromResource( 
"/server/server-delete.xml" ) ) );
+
+      ProfitBricksApi pbApi = api( server.getUrl( rootUrl ) );
+      ServerApi api = pbApi.serverApi();
+
+      String serverId = "qwertyui-qwer-qwer-qwer-qwertyyuiiop";
+      
+      String content = "<ws:deleteServer><serverId>" + serverId + 
"</serverId></ws:deleteServer>";
+      try {
+         boolean result = api.deleteServer( serverId );
+         assertRequestHasCommonProperties( server.takeRequest(), content );
+         assertTrue( result );
+      } finally {
+         pbApi.close();
+         server.shutdown();
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/RequestIdOnlyResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/RequestIdOnlyResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/RequestIdOnlyResponseHandlerTest.java
new file mode 100644
index 0000000..d32b656
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/RequestIdOnlyResponseHandlerTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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;
+
+import org.jclouds.http.functions.ParseSax;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "RequestIdOnlyResponseHandlerTest" )
+public class RequestIdOnlyResponseHandlerTest extends 
BaseResponseHandlerTest<String> {
+
+   @Override
+   protected ParseSax<String> createParser() {
+      return factory.create( injector.getInstance( 
RequestIdOnlyResponseHandler.class ) );
+   }
+
+   @Test
+   public void testParseResponseFromStartServer() {
+      ParseSax<String> parser = createParser();
+
+      String requestId = parser.parse( payloadFromResource( 
"/server/server-start.xml" ) );
+
+      assertEquals( requestId, "123456" );
+   }
+
+   @Test
+   public void testParseResponseFromStopServer() {
+      ParseSax<String> parser = createParser();
+
+      String requestId = parser.parse( payloadFromResource( 
"/server/server-stop.xml" ) );
+
+      assertEquals( requestId, "123456" );
+   }
+
+   @Test
+   public void testParseResponseFromResetServer() {
+      ParseSax<String> parser = createParser();
+
+      String requestId = parser.parse( payloadFromResource( 
"/server/server-reset.xml" ) );
+
+      assertEquals( requestId, "123456" );
+   }
+
+   @Test
+   public void testParseResponseFromUpdateServer() {
+      ParseSax<String> parser = createParser();
+
+      String requestId = parser.parse( payloadFromResource( 
"/server/server-update.xml" ) );
+
+      assertEquals( requestId, "102458" );
+   }
+
+   @Test
+   public void testParseResponseFromDeleteServer() {
+      ParseSax<String> parser = createParser();
+
+      String requestId = parser.parse( payloadFromResource( 
"/server/server-delete.xml" ) );
+
+      assertEquals( requestId, "102459" );
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/ServiceFaultResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/ServiceFaultResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/ServiceFaultResponseHandlerTest.java
index 66259ab..cb84841 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/ServiceFaultResponseHandlerTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/ServiceFaultResponseHandlerTest.java
@@ -40,8 +40,8 @@ public class ServiceFaultResponseHandlerTest extends 
BaseResponseHandlerTest<Ser
       ServiceFault expected = ServiceFault.builder()
              .faultCode(ServiceFault.FaultCode.RESOURCE_NOT_FOUND)
              .httpCode(404)
-             .message("The requested resource could not be found. Please refer 
to Request Id : 11122416. [VDC-6-404] The requested data center does not exist 
or already deleted by the users. ResourceId random-non-existing-id")
-             .requestId(11122416)
+             .message("The requested resource could not be found. Please refer 
to Request Id : 16370720. [VDC-6-404] The requested resource does not exist or 
already deleted by the users. ResourceId random-non-existing-id")
+             .requestId(16370720)
              .build();
 
       assertEquals(expected, actual);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/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 f4222fb..0a3a570 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,7 +19,6 @@ package org.jclouds.profitbricks.http.parser.datacenter;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
-import javax.xml.parsers.ParserConfigurationException;
 
 import org.jclouds.http.functions.ParseSax;
 import org.jclouds.profitbricks.domain.DataCenter;
@@ -37,7 +36,7 @@ public class DataCenterInfoResponseHandlerTest extends 
BaseResponseHandlerTest<D
    }
 
    @Test
-   public void testParseResponseFromGetDataCenter() throws 
ParserConfigurationException {
+   public void testParseResponseFromGetDataCenter() {
       ParseSax<DataCenter> parser = createParser();
       DataCenter actual = 
parser.parse(payloadFromResource("/datacenter/datacenter.xml"));
       assertNotNull(actual, "Parsed content returned null");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageInfoResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageInfoResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageInfoResponseHandlerTest.java
new file mode 100644
index 0000000..d09f362
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageInfoResponseHandlerTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.image;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.profitbricks.domain.Image;
+import org.jclouds.profitbricks.domain.Location;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import org.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ImageInfoResponseHandlerTest" )
+public class ImageInfoResponseHandlerTest extends 
BaseResponseHandlerTest<Image> {
+
+   @Override
+   protected ParseSax<Image> createParser() {
+      return factory.create( injector.getInstance( 
ImageInfoResponseHandler.class ) );
+   }
+
+   @Test
+   public void testParseResponseFromGetImage() {
+      ParseSax<Image> parser = createParser();
+      Image actual = parser.parse( payloadFromResource( "/image/image.xml" ) );
+      assertNotNull( actual, "Parsed content returned null" );
+
+      Image expected = 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( Image.Type.HDD )
+              .location( Location.US_LAS )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build();
+
+      assertEquals( expected, actual );
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/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
new file mode 100644
index 0000000..0aa8f58
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/image/ImageListResponseHandlerTest.java
@@ -0,0 +1,183 @@
+/*
+ * 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.image;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.profitbricks.domain.Image;
+import org.jclouds.profitbricks.domain.Location;
+import org.jclouds.profitbricks.domain.OsType;
+import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import org.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ImageListResponseHandlerTest" )
+public class ImageListResponseHandlerTest extends 
BaseResponseHandlerTest<List<Image>> {
+
+   @Override
+   protected ParseSax<List<Image>> createParser() {
+      return factory.create( injector.getInstance( 
ImageListResponseHandler.class ) );
+   }
+
+   @Test
+   public void testParseResponseFromGetAllImages() {
+      ParseSax<List<Image>> parser = createParser();
+
+      List<Image> actual = parser.parse( payloadFromResource( 
"/image/images.xml" ) );
+      assertNotNull( actual, "Parsed content returned null" );
+
+      List<Image> expected = ImmutableList.<Image>of(
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "e4f73936-9161-11e4-9d74-52540066fee9" )
+              .name( "Ubuntu-12.04-LTS-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.DE_FRA )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build(),
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "a984a5d3-9163-11e4-9d74-52540066fee9" )
+              .name( "Ubuntu-14.04-LTS-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.DE_FRA )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build(),
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "5f3cac96-915f-11e4-9d74-52540066fee9" )
+              .name( "Debian-jessie-prerelease-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.UNRECOGNIZED )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build(),
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "f4742db0-9160-11e4-9d74-52540066fee9" )
+              .name( "Fedora-19-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.UNRECOGNIZED )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build(),
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "86902c18-9164-11e4-9d74-52540066fee9" )
+              .name( "Ubuntu-12.04-LTS-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.UNRECOGNIZED )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build(),
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "3b48e3ff-9163-11e4-9d74-52540066fee9" )
+              .name( "Ubuntu-14.04-LTS-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.DE_FKB )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build(),
+              Image.builder()
+              .isBootable( true )
+              .isCpuHotPlug( true )
+              .isCpuHotUnPlug( false )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .id( "6ce17716-9164-11e4-9d74-52540066fee9" )
+              .name( "Ubuntu-12.04-LTS-server-2015-01-01" )
+              .size( 2048f )
+              .type( Image.Type.HDD )
+              .location( Location.US_LAS )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .osType( OsType.LINUX )
+              .isPublic( true )
+              .isRamHotPlug( true )
+              .isRamHotUnPlug( false )
+              .isWriteable( true )
+              .build()
+      );
+
+      assertEquals( expected, actual );
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerIdOnlyResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerIdOnlyResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerIdOnlyResponseHandlerTest.java
new file mode 100644
index 0000000..700b1e5
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerIdOnlyResponseHandlerTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.server;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.profitbricks.http.parser.BaseResponseHandlerTest;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ServerIdOnlyResponseHandlerTest" )
+public class ServerIdOnlyResponseHandlerTest extends 
BaseResponseHandlerTest<String> {
+
+   @Override
+   protected ParseSax<String> createParser() {
+      return factory.create( injector.getInstance( 
ServerIdOnlyResponseHandler.class ) );
+   }
+
+   @Test
+   public void testParseResponseFromCreateServer() {
+      ParseSax<String> parser = createParser();
+
+      String serverId = parser.parse( payloadFromResource( 
"/server/server-create.xml" ) );
+
+      assertEquals( "qwertyui-qwer-qwer-qwer-qwertyyuiiop", serverId );
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
new file mode 100644
index 0000000..734e169
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerInfoResponseHandlerTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.server;
+
+import java.text.ParseException;
+import org.jclouds.date.DateCodec;
+import org.jclouds.date.DateCodecFactory;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.profitbricks.domain.AvailabilityZone;
+import org.jclouds.profitbricks.domain.OsType;
+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.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ServerInfoResponseHandlerTest" )
+public class ServerInfoResponseHandlerTest extends 
BaseResponseHandlerTest<Server> {
+
+   @Override
+   protected ParseSax<Server> createParser() {
+      return factory.create( injector.getInstance( 
ServerInfoResponseHandler.class ) );
+   }
+
+   protected DateCodecFactory createDateParser() {
+      return injector.getInstance( DateCodecFactory.class );
+   }
+
+   @Test
+   public void testParseResponseFromGetServer() throws ParseException {
+      ParseSax<Server> parser = createParser();
+
+      Server actual = parser.parse( payloadFromResource( "/server/server.xml" 
) );
+      assertNotNull( actual, "Parsed content returned null" );
+
+      DateCodec dateParser = createDateParser().iso8601();
+
+      Server expected = Server.builder()
+              .id( "qwertyui-qwer-qwer-qwer-qwertyyuiiop" )
+              .name( "facebook-node" )
+              .cores( 4 )
+              .ram( 4096 )
+              .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" ) )
+              .osType( OsType.LINUX )
+              .availabilityZone( AvailabilityZone.AUTO )
+              .isCpuHotPlug( true )
+              .isRamHotPlug( true )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .build();
+
+      assertEquals( actual, expected );
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
new file mode 100644
index 0000000..c9c01c6
--- /dev/null
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/http/parser/server/ServerListResponseHandlerTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.server;
+
+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.AvailabilityZone;
+import org.jclouds.profitbricks.domain.OsType;
+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.testng.annotations.Test;
+
+@Test( groups = "unit", testName = "ServerListResponseHandlerTest" )
+public class ServerListResponseHandlerTest extends 
BaseResponseHandlerTest<List<Server>> {
+
+   @Override
+   protected ParseSax<List<Server>> createParser() {
+      return factory.create( injector.getInstance( 
ServerListResponseHandler.class ) );
+   }
+
+   protected DateCodecFactory createDateParser() {
+      return injector.getInstance( DateCodecFactory.class );
+   }
+
+   @Test
+   public void testParseResponseFromGetAllServers() {
+      ParseSax<List<Server>> parser = createParser();
+
+      List<Server> actual = parser.parse( payloadFromResource( 
"/server/servers.xml" ) );
+      assertNotNull( actual, "Parsed content returned null" );
+
+      DateCodec dateParser = createDateParser().iso8601();
+
+      List<Server> expected = ImmutableList.<Server>of(
+              Server.builder()
+              .id( "qwertyui-qwer-qwer-qwer-qwertyyuiiop" )
+              .name( "facebook-node" )
+              .cores( 4 )
+              .ram( 4096 )
+              .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" ) )
+              .osType( OsType.LINUX )
+              .availabilityZone( AvailabilityZone.AUTO )
+              .isCpuHotPlug( true )
+              .isRamHotPlug( true )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .build(),
+              Server.builder()
+              .id( "asdfghjk-asdf-asdf-asdf-asdfghjklkjl" )
+              .name( "google-node" )
+              .cores( 1 )
+              .ram( 1024 )
+              .hasInternetAccess( false )
+              .state( ProvisioningState.AVAILABLE )
+              .status( Server.Status.RUNNING )
+              .creationTime( dateParser.toDate( "2014-11-12T07:01:00.441Z" ) )
+              .lastModificationTime( dateParser.toDate( 
"2014-11-12T07:01:00.441Z" ) )
+              .osType( OsType.LINUX )
+              .availabilityZone( AvailabilityZone.AUTO )
+              .isCpuHotPlug( true )
+              .isRamHotPlug( true )
+              .isNicHotPlug( true )
+              .isNicHotUnPlug( true )
+              .isDiscVirtioHotPlug( true )
+              .isDiscVirtioHotUnPlug( true )
+              .build()
+      );
+
+      assertEquals( actual, expected );
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/java/org/jclouds/profitbricks/internal/BaseProfitBricksMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/internal/BaseProfitBricksMockTest.java
 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/internal/BaseProfitBricksMockTest.java
index 665f1bd..3e5d19a 100644
--- 
a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/internal/BaseProfitBricksMockTest.java
+++ 
b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/internal/BaseProfitBricksMockTest.java
@@ -46,6 +46,13 @@ public class BaseProfitBricksMockTest {
    protected static final String authHeader = 
BasicAuthentication.basic("username", "password");
    protected static final String provider = "profitbricks";
    protected static final String rootUrl = "/1.3";
+   
+   private static final String SOAP_PREFIX
+          = "<soapenv:Envelope 
xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"; 
xmlns:ws=\"http://ws.api.profitbricks.com/\";>"
+          + "<soapenv:Header/>"
+          + "<soapenv:Body>";
+
+   private static final String SOAP_SUFFIX = 
"</soapenv:Body></soapenv:Envelope>";
 
    private final Set<Module> modules = ImmutableSet.<Module>of();
 
@@ -70,7 +77,7 @@ public class BaseProfitBricksMockTest {
       server.play();
       return server;
    }
-
+   
    public byte[] payloadFromResource(String resource) {
       try {
          return 
toStringAndClose(getClass().getResourceAsStream(resource)).getBytes(Charsets.UTF_8);
@@ -78,6 +85,10 @@ public class BaseProfitBricksMockTest {
          throw Throwables.propagate(e);
       }
    }
+   
+   protected static String payloadSoapWithBody(String body){
+      return SOAP_PREFIX.concat( body ).concat( SOAP_SUFFIX );
+   }
 
    protected static void assertRequestHasCommonProperties(final 
RecordedRequest request) {
       assertEquals(request.getMethod(), "POST");
@@ -85,4 +96,9 @@ public class BaseProfitBricksMockTest {
       assertEquals(request.getHeader(HttpHeaders.AUTHORIZATION), authHeader);
       assertEquals(request.getHeader(HttpHeaders.ACCEPT), MediaType.TEXT_XML);
    }
+   
+   protected static void assertRequestHasCommonProperties(final 
RecordedRequest request, String content ){
+      assertEquals( new String( request.getBody() ), payloadSoapWithBody( 
content ) );
+      assertRequestHasCommonProperties( request );
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml 
b/providers/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
new file mode 100644
index 0000000..486706d
--- /dev/null
+++ 
b/providers/profitbricks/src/test/resources/datacenter/datacenter-not-found.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+   <S:Body>
+      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope";>
+         <faultcode>S:Server</faultcode>
+         <faultstring>The requested resource could not be found. Please refer 
to Request Id : 11122416. [VDC-6-404] The requested data center does not exist 
or already deleted by the users. ResourceId 
random-non-existing-id</faultstring>
+         <detail>
+            <ns2:ProfitbricksServiceFault 
xmlns:ns2="http://ws.api.profitbricks.com/";>
+               <faultCode>RESOURCE_NOT_FOUND</faultCode>
+               <httpCode>404</httpCode>
+               <message>The requested resource could not be found. Please 
refer to Request Id : 11122416. [VDC-6-404] The requested data center does not 
exist or already deleted by the users. ResourceId 
random-non-existing-id</message>
+               <requestId>11122416</requestId>
+            </ns2:ProfitbricksServiceFault>
+         </detail>
+      </S:Fault>
+   </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/resources/fault-404.xml
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/resources/fault-404.xml 
b/providers/profitbricks/src/test/resources/fault-404.xml
index 486706d..430be82 100644
--- a/providers/profitbricks/src/test/resources/fault-404.xml
+++ b/providers/profitbricks/src/test/resources/fault-404.xml
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
-   <S:Body>
-      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope";>
-         <faultcode>S:Server</faultcode>
-         <faultstring>The requested resource could not be found. Please refer 
to Request Id : 11122416. [VDC-6-404] The requested data center does not exist 
or already deleted by the users. ResourceId 
random-non-existing-id</faultstring>
-         <detail>
-            <ns2:ProfitbricksServiceFault 
xmlns:ns2="http://ws.api.profitbricks.com/";>
-               <faultCode>RESOURCE_NOT_FOUND</faultCode>
-               <httpCode>404</httpCode>
-               <message>The requested resource could not be found. Please 
refer to Request Id : 11122416. [VDC-6-404] The requested data center does not 
exist or already deleted by the users. ResourceId 
random-non-existing-id</message>
-               <requestId>11122416</requestId>
-            </ns2:ProfitbricksServiceFault>
-         </detail>
-      </S:Fault>
-   </S:Body>
-</S:Envelope>
\ No newline at end of file
+    <S:Body>
+        <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope";>
+            <faultcode>S:Server</faultcode>
+            <faultstring>The requested resource could not be found. Please 
refer to Request Id : 16370720. [VDC-6-404] The requested resource does not 
exist or already deleted by the users. ResourceId 
random-non-existing-id</faultstring>
+            <detail>
+                <ns2:ProfitbricksServiceFault 
xmlns:ns2="http://ws.api.profitbricks.com/";>
+                    <faultCode>RESOURCE_NOT_FOUND</faultCode>
+                    <httpCode>404</httpCode>
+                    <message>The requested resource could not be found. Please 
refer to Request Id : 16370720. [VDC-6-404] The requested resource does not 
exist or already deleted by the users. ResourceId 
random-non-existing-id</message>
+                    <requestId>16370720</requestId>
+                </ns2:ProfitbricksServiceFault>
+            </detail>
+        </S:Fault>
+    </S:Body>
+</S:Envelope>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/resources/image/image-not-found.xml
----------------------------------------------------------------------
diff --git 
a/providers/profitbricks/src/test/resources/image/image-not-found.xml 
b/providers/profitbricks/src/test/resources/image/image-not-found.xml
new file mode 100644
index 0000000..98c9f3e
--- /dev/null
+++ b/providers/profitbricks/src/test/resources/image/image-not-found.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+    <S:Body>
+        <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope";>
+            <faultcode>S:Server</faultcode>
+            <faultstring>The requested resource could not be found. Please 
refer to Request Id : 16361390. [VDC-6-404] The requested image does not exist 
or already deleted by the users. ResourceId 
random-non-existing-id</faultstring>
+            <detail>
+                <ns2:ProfitbricksServiceFault 
xmlns:ns2="http://ws.api.profitbricks.com/";>
+                    <faultCode>RESOURCE_NOT_FOUND</faultCode>
+                    <httpCode>404</httpCode>
+                    <message>The requested resource could not be found. Please 
refer to Request Id : 16361390. [VDC-6-404] The requested image does not exist 
or already deleted by the users. ResourceId random-non-existing-id</message>
+                    <requestId>16361390</requestId>
+                </ns2:ProfitbricksServiceFault>
+            </detail>
+        </S:Fault>
+    </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/resources/image/image.xml
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/resources/image/image.xml 
b/providers/profitbricks/src/test/resources/image/image.xml
new file mode 100644
index 0000000..0e56bad
--- /dev/null
+++ b/providers/profitbricks/src/test/resources/image/image.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+    <S:Body>
+        <ns2:getImageResponse xmlns:ns2="http://ws.api.profitbricks.com/";>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>5ad99c9e-9166-11e4-9d74-52540066fee9</imageId>
+                <imageName>Ubuntu-14.04-LTS-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>us/las</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+        </ns2:getImageResponse>
+    </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/resources/image/images.xml
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/resources/image/images.xml 
b/providers/profitbricks/src/test/resources/image/images.xml
new file mode 100644
index 0000000..5e09a1d
--- /dev/null
+++ b/providers/profitbricks/src/test/resources/image/images.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+    <S:Body>
+        <ns2:getAllImagesResponse xmlns:ns2="http://ws.api.profitbricks.com/";>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>e4f73936-9161-11e4-9d74-52540066fee9</imageId>
+                <imageName>Ubuntu-12.04-LTS-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>de/fra</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>a984a5d3-9163-11e4-9d74-52540066fee9</imageId>
+                <imageName>Ubuntu-14.04-LTS-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>de/fra</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>5f3cac96-915f-11e4-9d74-52540066fee9</imageId>
+                
<imageName>Debian-jessie-prerelease-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>us/lasdev</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>f4742db0-9160-11e4-9d74-52540066fee9</imageId>
+                <imageName>Fedora-19-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>us/lasdev</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>86902c18-9164-11e4-9d74-52540066fee9</imageId>
+                <imageName>Ubuntu-12.04-LTS-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>us/lasdev</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>3b48e3ff-9163-11e4-9d74-52540066fee9</imageId>
+                <imageName>Ubuntu-14.04-LTS-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>de/fkb</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+            <return>
+                <bootable>true</bootable>
+                <cpuHotPlug>true</cpuHotPlug>
+                <cpuHotUnPlug>false</cpuHotUnPlug>
+                <discVirtioHotPlug>true</discVirtioHotPlug>
+                <discVirtioHotUnPlug>true</discVirtioHotUnPlug>
+                <imageId>6ce17716-9164-11e4-9d74-52540066fee9</imageId>
+                <imageName>Ubuntu-12.04-LTS-server-2015-01-01</imageName>
+                <imageSize>2048</imageSize>
+                <imageType>HDD</imageType>
+                <location>us/las</location>
+                <nicHotPlug>true</nicHotPlug>
+                <nicHotUnPlug>true</nicHotUnPlug>
+                <osType>LINUX</osType>
+                <public>true</public>
+                <ramHotPlug>true</ramHotPlug>
+                <ramHotUnPlug>false</ramHotUnPlug>
+                <writeable>true</writeable>
+            </return>
+        </ns2:getAllImagesResponse>
+    </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ee24ddb2/providers/profitbricks/src/test/resources/server/server-create.xml
----------------------------------------------------------------------
diff --git a/providers/profitbricks/src/test/resources/server/server-create.xml 
b/providers/profitbricks/src/test/resources/server/server-create.xml
new file mode 100644
index 0000000..b0392d6
--- /dev/null
+++ b/providers/profitbricks/src/test/resources/server/server-create.xml
@@ -0,0 +1,13 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:ws="http://ws.api.profitbricks.com/";>
+    <soapenv:Header/>
+    <soapenv:Body>
+        <ws:createServerReturn>
+            <return>
+                <requestId>102457</requestId>
+                
<dataCenterId>aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</dataCenterId>
+                <dataCenterVersion>2</dataCenterVersion>
+                <serverId>qwertyui-qwer-qwer-qwer-qwertyyuiiop</serverId>
+            </return>
+        </ws:createServerReturn>
+    </soapenv:Body>
+</soapenv:Envelope>
\ No newline at end of file

Reply via email to