Repository: jclouds-labs
Updated Branches:
  refs/heads/2.0.x 3bf86dee5 -> 73af05acd


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
new file mode 100644
index 0000000..5c4ea1d
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.dimensiondata.cloudcontrol.utils;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.Property;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Response;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Test(groups = "unit", testName = "ResponseParseTest", singleThreaded = true)
+public class ResponseParseTest {
+
+   public void testTryFindPropertyValue() {
+
+      List<Property> infoProperties = new ArrayList<Property>();
+      infoProperties.add(Property.create("propertyName1", "propertyValue1"));
+      infoProperties.add(Property.create("propertyName2", "propertyValue2"));
+
+      Response response = 
Response.builder().responseCode("responseCode").error(null).message("message")
+            
.operation("operation").requestId("requestId").info(infoProperties).build();
+
+      Assert.assertEquals(new ParseResponse(null, 
"propertyName1").tryFindInfoPropertyValue(response),
+            "propertyValue1");
+      Assert.assertEquals(new ParseResponse(null, 
"propertyName2").tryFindInfoPropertyValue(response),
+            "propertyValue2");
+   }
+
+   @Test(expectedExceptions = { IllegalStateException.class })
+   public void testTryFindPropertyValue_PropertyNotFound() {
+
+      List<Property> infoProperties = new ArrayList<Property>();
+      infoProperties.add(Property.create("propertyName1", "propertyValue1"));
+
+      Response response = 
Response.builder().responseCode("responseCode").error(null).message("message")
+            
.operation("operation").requestId("requestId").info(infoProperties).build();
+
+      new ParseResponse(null, "noProperty").tryFindInfoPropertyValue(response);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/firewallRules-page1.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/firewallRules-page1.json 
b/dimensiondata/src/test/resources/firewallRules-page1.json
new file mode 100644
index 0000000..9b328f4
--- /dev/null
+++ b/dimensiondata/src/test/resources/firewallRules-page1.json
@@ -0,0 +1,283 @@
+{
+  "firewallRule": [
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-xe21wswq",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-xe1sw1x",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-ne21e1c",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-xe21xe2",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-ce12ce2",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-xe21xe21v",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-xe21x1e2",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-xr32rx2",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-b23br32",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-dhtrhr",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-d1d121221",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 11,
+  "totalCount": 15,
+  "pageSize": 11
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/firewallRules-page2.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/firewallRules-page2.json 
b/dimensiondata/src/test/resources/firewallRules-page2.json
new file mode 100644
index 0000000..557a358
--- /dev/null
+++ b/dimensiondata/src/test/resources/firewallRules-page2.json
@@ -0,0 +1,108 @@
+{
+  "firewallRule": [
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-br32rb23",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-3h33",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-htrhtr",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-g312yg53",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    }
+  ],
+  "pageNumber": 2,
+  "pageCount": 4,
+  "totalCount": 15,
+  "pageSize": 11
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/firewallRules.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/firewallRules.json 
b/dimensiondata/src/test/resources/firewallRules.json
new file mode 100644
index 0000000..2c2ea0b
--- /dev/null
+++ b/dimensiondata/src/test/resources/firewallRules.json
@@ -0,0 +1,33 @@
+{
+  "firewallRule": [
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+      "action": "DROP",
+      "ipVersion": "IPV6",
+      "protocol": "TCP",
+      "source": {
+        "ip": {
+          "address": "ANY"
+        }
+      },
+      "destination": {
+        "ip": {
+          "address": "ANY"
+        },
+        "port": {
+          "begin": 587
+        }
+      },
+      "enabled": true,
+      "state": "NORMAL",
+      "id": "1aa3d0ce-d95d-4296-8338-9717e0d37ff9",
+      "datacenterId": "NA9",
+      "ruleType": "DEFAULT_RULE"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 4,
+  "totalCount": 4,
+  "pageSize": 50
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/natRule.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/natRule.json 
b/dimensiondata/src/test/resources/natRule.json
new file mode 100644
index 0000000..eb77796
--- /dev/null
+++ b/dimensiondata/src/test/resources/natRule.json
@@ -0,0 +1,9 @@
+{
+  "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+  "internalIp": "10.0.0.16",
+  "externalIp": "165.180.12.19",
+  "createTime": "2015-03-06T13:45:10.000Z",
+  "state": "NORMAL",
+  "id": "2169a38e-5692-497e-a22a-701a838a6539",
+  "datacenterId": "NA9"
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/natRules-page1.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/natRules-page1.json 
b/dimensiondata/src/test/resources/natRules-page1.json
new file mode 100644
index 0000000..37c085d
--- /dev/null
+++ b/dimensiondata/src/test/resources/natRules-page1.json
@@ -0,0 +1,98 @@
+{
+  "natRule": [
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.15",
+      "externalIp": "165.180.12.18",
+      "createTime": "2015-03-06T13:43:45.000Z",
+      "state": "NORMAL",
+      "id": "2187a636-7ebb-49a1-a2ff-5d617f496dce",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/natRules-page2.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/natRules-page2.json 
b/dimensiondata/src/test/resources/natRules-page2.json
new file mode 100644
index 0000000..4d8c124
--- /dev/null
+++ b/dimensiondata/src/test/resources/natRules-page2.json
@@ -0,0 +1,98 @@
+{
+  "natRule": [
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.15",
+      "externalIp": "165.180.12.18",
+      "createTime": "2015-03-06T13:43:45.000Z",
+      "state": "NORMAL",
+      "id": "2187a636-7ebb-49a1-a2ff-5d617f496dce",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 2,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/natRules.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/natRules.json 
b/dimensiondata/src/test/resources/natRules.json
new file mode 100644
index 0000000..7501f36
--- /dev/null
+++ b/dimensiondata/src/test/resources/natRules.json
@@ -0,0 +1,26 @@
+{
+  "natRule": [
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.15",
+      "externalIp": "165.180.12.18",
+      "createTime": "2015-03-06T13:43:45.000Z",
+      "state": "NORMAL",
+      "id": "2187a636-7ebb-49a1-a2ff-5d617f496dce",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+      "internalIp": "10.0.0.16",
+      "externalIp": "165.180.12.19",
+      "createTime": "2015-03-06T13:45:10.000Z",
+      "state": "NORMAL",
+      "id": "2169a38e-5692-497e-a22a-701a838a6539",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 2,
+  "totalCount": 2,
+  "pageSize": 250
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/networkDomain.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/networkDomain.json 
b/dimensiondata/src/test/resources/networkDomain.json
new file mode 100644
index 0000000..221076e
--- /dev/null
+++ b/dimensiondata/src/test/resources/networkDomain.json
@@ -0,0 +1,10 @@
+{
+  "name": "test",
+  "description": "",
+  "type": "ESSENTIALS",
+  "snatIpv4Address": "168.128.3.44",
+  "createTime": "2016-03-08T14:39:47.000Z",
+  "state": "NORMAL",
+  "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+  "datacenterId": "NA9"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/networkDomains-page1.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/networkDomains-page1.json 
b/dimensiondata/src/test/resources/networkDomains-page1.json
new file mode 100644
index 0000000..b931857
--- /dev/null
+++ b/dimensiondata/src/test/resources/networkDomains-page1.json
@@ -0,0 +1,108 @@
+{
+  "networkDomain": [
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/networkDomains-page2.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/networkDomains-page2.json 
b/dimensiondata/src/test/resources/networkDomains-page2.json
new file mode 100644
index 0000000..e939571
--- /dev/null
+++ b/dimensiondata/src/test/resources/networkDomains-page2.json
@@ -0,0 +1,108 @@
+{
+  "networkDomain": [
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    },
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 2,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/networkDomains.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/networkDomains.json 
b/dimensiondata/src/test/resources/networkDomains.json
new file mode 100644
index 0000000..34ef39b
--- /dev/null
+++ b/dimensiondata/src/test/resources/networkDomains.json
@@ -0,0 +1,18 @@
+{
+  "networkDomain": [
+    {
+      "name": "test",
+      "description": "",
+      "type": "ESSENTIALS",
+      "snatIpv4Address": "168.128.3.44",
+      "createTime": "2016-03-08T14:39:47.000Z",
+      "state": "NORMAL",
+      "id": "8e082ed6-c198-4eff-97cb-aeac6f9685d8",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 1,
+  "totalCount": 1,
+  "pageSize": 250
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/portList.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/portList.json 
b/dimensiondata/src/test/resources/portList.json
new file mode 100644
index 0000000..29eb027
--- /dev/null
+++ b/dimensiondata/src/test/resources/portList.json
@@ -0,0 +1,16 @@
+{
+  "id": "c8c92ea3-2da8-4d51-8153-f39bec794d69",
+  "name": "name",
+  "description": "description",
+  "port": [
+    {
+      "begin": 100,
+      "end": 2000
+    },
+    {
+      "begin": 443
+    }
+  ],
+  "state": "NORMAL",
+  "createTime": "2008-09-29T02:49:45"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/portLists.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/portLists.json 
b/dimensiondata/src/test/resources/portLists.json
new file mode 100644
index 0000000..50d5edd
--- /dev/null
+++ b/dimensiondata/src/test/resources/portLists.json
@@ -0,0 +1,32 @@
+{
+  "portList": {
+    "id": "c8c92ea3-2da8-4d51-8153-f39bec794d69",
+    "name": "name",
+    "description": "description",
+    "port": [
+      {
+        "begin": 100,
+        "end": 2000
+      },
+      {
+        "begin": 443
+      }
+    ],
+    "childPortList": [
+      {
+        "id": "c8c92ea3-2da8-4d51-8153-f39bec794d68",
+        "name": "tomcatPorts"
+      },
+      {
+        "id": "c8c92ea3-2da8-4d51-8153-f39bec794d67",
+        "name": "mySqlPorts"
+      }
+    ],
+    "state": "NORMAL",
+    "createTime": "2008-09-29T02:49:45"
+  },
+  "pageNumber": 1,
+  "pageCount": 1,
+  "totalCount": 1,
+  "pageSize": 250
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/publicIpBlock.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/publicIpBlock.json 
b/dimensiondata/src/test/resources/publicIpBlock.json
new file mode 100644
index 0000000..789637a
--- /dev/null
+++ b/dimensiondata/src/test/resources/publicIpBlock.json
@@ -0,0 +1,9 @@
+{
+  "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+  "baseIp": "168.128.6.216",
+  "size": 2,
+  "createTime": "2016-03-14T11:49:33.000Z",
+  "state": "NORMAL",
+  "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+  "datacenterId": "NA9"
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/publicIpBlocks-page1.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/publicIpBlocks-page1.json 
b/dimensiondata/src/test/resources/publicIpBlocks-page1.json
new file mode 100644
index 0000000..1a9eab6
--- /dev/null
+++ b/dimensiondata/src/test/resources/publicIpBlocks-page1.json
@@ -0,0 +1,98 @@
+{
+  "publicIpBlock": [
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/publicIpBlocks-page2.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/publicIpBlocks-page2.json 
b/dimensiondata/src/test/resources/publicIpBlocks-page2.json
new file mode 100644
index 0000000..4922311
--- /dev/null
+++ b/dimensiondata/src/test/resources/publicIpBlocks-page2.json
@@ -0,0 +1,98 @@
+{
+  "publicIpBlock": [
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 2,
+  "pageCount": 10,
+  "totalCount": 2,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/publicIpBlocks.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/publicIpBlocks.json 
b/dimensiondata/src/test/resources/publicIpBlocks.json
new file mode 100644
index 0000000..d2c8ab6
--- /dev/null
+++ b/dimensiondata/src/test/resources/publicIpBlocks.json
@@ -0,0 +1,17 @@
+{
+  "publicIpBlock": [
+    {
+      "networkDomainId": "690de302-bb80-49c6-b401-8c02bbefb945",
+      "baseIp": "168.128.6.216",
+      "size": 2,
+      "createTime": "2016-03-14T11:49:33.000Z",
+      "state": "NORMAL",
+      "id": "9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 1,
+  "totalCount": 1,
+  "pageSize": 250
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/response.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/response.json 
b/dimensiondata/src/test/resources/response.json
new file mode 100644
index 0000000..237bd4d
--- /dev/null
+++ b/dimensiondata/src/test/resources/response.json
@@ -0,0 +1,30 @@
+{
+  "operation": "ADD_DISK",
+  "responseCode": "IN_PROGRESS",
+  "message": "Request to add a 3 GB Standard Speed Disk on Server 
'Green-SCSI-SATA-IDE-Server2' has been accepted and is being processed.",
+  "info": [
+    {
+      "name": "diskId",
+      "value": "270a0d5d-f9c9-4aa5-94f5-123333cffb3c"
+    },
+    {
+      "name": "scsiId",
+      "value": "11"
+    },
+    {
+      "name": "scsiControllerId",
+      "value": "e461c085-fa98-4f19-818a-65d557182f46"
+    },
+    {
+      "name": "busNumber",
+      "value": "0"
+    },
+    {
+      "name": "speed",
+      "value": "STANDARD"
+    }
+  ],
+  "warning": [],
+  "error": [],
+  "requestId": 
"devlab1_20170512T065031117-0400_49fd964f-0c2c-44bc-95e3-edd112d98cc9"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/vlan.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/vlan.json 
b/dimensiondata/src/test/resources/vlan.json
new file mode 100644
index 0000000..ef5cb29
--- /dev/null
+++ b/dimensiondata/src/test/resources/vlan.json
@@ -0,0 +1,22 @@
+{
+  "networkDomain": {
+    "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+    "name": "test"
+  },
+  "name": "vlan1",
+  "description": "",
+  "privateIpv4Range": {
+    "address": "10.0.0.0",
+    "prefixSize": 24
+  },
+  "ipv4GatewayAddress": "10.0.0.1",
+  "ipv6Range": {
+    "address": "2607:f480:111:1575:0:0:0:0",
+    "prefixSize": 64
+  },
+  "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+  "createTime": "2016-03-11T10:41:19.000Z",
+  "state": "NORMAL",
+  "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+  "datacenterId": "NA9"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/vlans-page1.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/vlans-page1.json 
b/dimensiondata/src/test/resources/vlans-page1.json
new file mode 100644
index 0000000..cb8e36a
--- /dev/null
+++ b/dimensiondata/src/test/resources/vlans-page1.json
@@ -0,0 +1,228 @@
+{
+  "vlan": [
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/vlans-page2.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/vlans-page2.json 
b/dimensiondata/src/test/resources/vlans-page2.json
new file mode 100644
index 0000000..64775cc
--- /dev/null
+++ b/dimensiondata/src/test/resources/vlans-page2.json
@@ -0,0 +1,228 @@
+{
+  "vlan": [
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    },
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 2,
+  "pageCount": 10,
+  "totalCount": 20,
+  "pageSize": 10
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/73af05ac/dimensiondata/src/test/resources/vlans.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/vlans.json 
b/dimensiondata/src/test/resources/vlans.json
new file mode 100644
index 0000000..5573563
--- /dev/null
+++ b/dimensiondata/src/test/resources/vlans.json
@@ -0,0 +1,30 @@
+{
+  "vlan": [
+    {
+      "networkDomain": {
+        "id": "690de302-bb80-49c6-b401-8c02bbefb945",
+        "name": "test"
+      },
+      "name": "vlan1",
+      "description": "",
+      "privateIpv4Range": {
+        "address": "10.0.0.0",
+        "prefixSize": 24
+      },
+      "ipv4GatewayAddress": "10.0.0.1",
+      "ipv6Range": {
+        "address": "2607:f480:111:1575:0:0:0:0",
+        "prefixSize": 64
+      },
+      "ipv6GatewayAddress": "2607:f480:111:1575:0:0:0:1",
+      "createTime": "2016-03-11T10:41:19.000Z",
+      "state": "NORMAL",
+      "id": "6b25b02e-d3a2-4e69-8ca7-9bab605deebd",
+      "datacenterId": "NA9"
+    }
+  ],
+  "pageNumber": 1,
+  "pageCount": 1,
+  "totalCount": 1,
+  "pageSize": 250
+}
\ No newline at end of file

Reply via email to