Repository: jclouds-labs
Updated Branches:
  refs/heads/master 2c7db7e80 -> ff3bdab64


JCLOUDS-1455 - Update ParseResponse to log error details. Add ParseTests for 
Domain Objects in NetworkApi and ServerApi


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/ff3bdab6
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/ff3bdab6
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/ff3bdab6

Branch: refs/heads/master
Commit: ff3bdab6401c59e894205a64edc614077eabc42c
Parents: 2c7db7e
Author: john.clarke <john.cla...@dimensiondata.com>
Authored: Thu Oct 4 10:42:05 2018 +0100
Committer: Ignasi Barrera <n...@apache.org>
Committed: Fri Oct 5 10:51:08 2018 +0200

----------------------------------------------------------------------
 .../cloudcontrol/domain/Response.java           | 14 ++--
 .../cloudcontrol/utils/ParseResponse.java       | 27 ++++++--
 .../parse/FirewallRuleParseTest.java            | 47 +++++++++++++
 .../cloudcontrol/parse/NatRuleParseTest.java    | 42 ++++++++++++
 .../parse/NetworkDomainParseTest.java           | 42 ++++++++++++
 .../parse/PublicIpBlockParseTest.java           | 42 ++++++++++++
 .../cloudcontrol/parse/ServerParseTest.java     | 67 ++++++++++++++++++
 .../cloudcontrol/parse/ServersParseTest.java    | 72 ++++++++++++++++++++
 .../cloudcontrol/parse/VlanParseTest.java       | 47 +++++++++++++
 .../cloudcontrol/utils/ParseResponseTest.java   | 70 +++++++++++++++++++
 .../cloudcontrol/utils/ResponseParseTest.java   | 56 ---------------
 .../src/test/resources/firewallRule.json        | 25 +++++++
 dimensiondata/src/test/resources/server.json    |  4 +-
 13 files changed, 483 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
 
b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
index d3cea10..fe1d541 100644
--- 
a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
+++ 
b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
@@ -39,16 +39,16 @@ public abstract class Response {
    public abstract List<Property> info();
 
    @Nullable
-   public abstract List<String> warning();
+   public abstract List<Property> warning();
 
    @Nullable
-   public abstract List<String> error();
+   public abstract List<Property> error();
 
    public abstract String requestId();
 
    @SerializedNames({ "operation", "responseCode", "message", "info", 
"warning", "error", "requestId" })
    public static Response create(String operation, String responseCode, String 
message, List<Property> info,
-         List<String> warning, List<String> error, String requestId) {
+         List<Property> warning, List<Property> error, String requestId) {
       return 
builder().operation(operation).responseCode(responseCode).message(message).info(info).warning(warning)
             .error(error).requestId(requestId).build();
    }
@@ -66,17 +66,17 @@ public abstract class Response {
 
       public abstract Builder info(List<Property> info);
 
-      public abstract Builder warning(List<String> warning);
+      public abstract Builder warning(List<Property> warning);
 
-      public abstract Builder error(List<String> error);
+      public abstract Builder error(List<Property> error);
 
       public abstract Builder requestId(String requestId);
 
       abstract Response autoBuild();
 
-      abstract List<String> warning();
+      abstract List<Property> warning();
 
-      abstract List<String> error();
+      abstract List<Property> error();
 
       abstract List<Property> info();
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
 
b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
index 6f8b5de..809d934 100644
--- 
a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
+++ 
b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
@@ -46,17 +46,19 @@ public class ParseResponse implements 
Function<HttpResponse, String> {
    }
 
    public String apply(HttpResponse from) {
-      try {
-         InputStream gson = from.getPayload().openStream();
-
-         final Response response = json.fromJson(gson, 
TypeLiteral.get(Response.class).getType());
+      Response response = null;
+      try (InputStream gson = from.getPayload().openStream()) {
+         response = json.fromJson(gson, 
TypeLiteral.get(Response.class).getType());
          return tryFindInfoPropertyValue(response);
       } catch (Exception e) {
          StringBuilder message = new StringBuilder();
-         message.append("Error parsing input: ");
-         message.append(e.getMessage());
+         message.append("Error parsing input: ").append(e.getMessage());
+         if (response != null) {
+            message.append(" ").append("Response Message: 
").append(response.message());
+            message.append(" ").append(checkForErrorElements(response));
+         }
          logger.error(e, message.toString());
-         throw new HttpResponseException(message.toString() + "\n" + from, 
null, from, e);
+         throw new HttpResponseException(message.toString() + ".\n" + from, 
null, from, e);
       } finally {
          releasePayload(from);
       }
@@ -83,4 +85,15 @@ public class ParseResponse implements Function<HttpResponse, 
String> {
       }
       return "";
    }
+
+   final String checkForErrorElements(final Response response) {
+      if (response.error() != null && !response.error().isEmpty()) {
+         StringBuilder message = new StringBuilder("Error Elements: ");
+         for (Property e : response.error()) {
+            message.append(e.name()).append(":").append(e.value()).append(", 
");
+         }
+         return message.subSequence(0, message.length() - 2).toString() + ".";
+      }
+      return null;
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java
new file mode 100644
index 0000000..82150e2
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRule;
+import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRuleTarget;
+import org.jclouds.dimensiondata.cloudcontrol.domain.IpRange;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class FirewallRuleParseTest extends 
BaseDimensionDataCloudControlParseTest<FirewallRule> {
+
+   @Override
+   public String resource() {
+      return "/firewallRule.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public FirewallRule expected() {
+      return 
FirewallRule.builder().networkDomainId("484174a2-ae74-4658-9e56-50fc90e086cf")
+            
.name("CCDEFAULT.BlockOutboundMailIPv6Secure").action("DROP").ipVersion("IPV6").protocol("TCP")
+            .source(FirewallRuleTarget.builder().ip(IpRange.create("ANY", 
null)).build()).destination(
+                  FirewallRuleTarget.builder().ip(IpRange.create("ANY", null))
+                        .port(FirewallRuleTarget.Port.create(587, 
null)).build()).ruleType("DEFAULT_RULE").enabled(true)
+            
.id("1aa3d0ce-d95d-4296-8338-9717e0d37ff9").datacenterId("NA9").state(State.NORMAL).build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java
new file mode 100644
index 0000000..ee3cad6
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.NatRule;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class NatRuleParseTest extends 
BaseDimensionDataCloudControlParseTest<NatRule> {
+
+   @Override
+   public String resource() {
+      return "/natRule.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public NatRule expected() {
+      return 
NatRule.builder().networkDomainId("484174a2-ae74-4658-9e56-50fc90e086cf")
+            
.createTime(parseDate("2015-03-06T13:45:10.000Z")).internalIp("10.0.0.16").externalIp("165.180.12.19")
+            
.state(State.NORMAL).id("2169a38e-5692-497e-a22a-701a838a6539").datacenterId("NA9").build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java
new file mode 100644
index 0000000..5292b35
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkDomain;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class NetworkDomainParseTest extends 
BaseDimensionDataCloudControlParseTest<NetworkDomain> {
+
+   @Override
+   public String resource() {
+      return "/networkDomain.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public NetworkDomain expected() {
+      return 
NetworkDomain.builder().name("test").description("").type(NetworkDomain.Type.ESSENTIALS)
+            
.snatIpv4Address("168.128.3.44").createTime(parseDate("2016-03-08T14:39:47.000Z")).state(State.NORMAL)
+            
.id("8e082ed6-c198-4eff-97cb-aeac6f9685d8").datacenterId("NA9").build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java
new file mode 100644
index 0000000..f3e3aad
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.PublicIpBlock;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class PublicIpBlockParseTest extends 
BaseDimensionDataCloudControlParseTest<PublicIpBlock> {
+
+   @Override
+   public String resource() {
+      return "/publicIpBlock.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public PublicIpBlock expected() {
+      return 
PublicIpBlock.builder().networkDomainId("690de302-bb80-49c6-b401-8c02bbefb945").baseIp("168.128.6.216")
+            
.size(2).createTime(parseDate("2016-03-14T11:49:33.000Z")).state(State.NORMAL)
+            
.id("9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8").datacenterId("NA9").build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java
new file mode 100644
index 0000000..5d44d5e
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.CPU;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Disk;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Guest;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NIC;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkInfo;
+import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Server;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VirtualHardware;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VmTools;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+import java.util.Collections;
+
+@Test(groups = "unit")
+public class ServerParseTest extends 
BaseDimensionDataCloudControlParseTest<Server> {
+
+   @Override
+   public String resource() {
+      return "/server.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Server expected() {
+
+      return 
Server.builder().id("cb08c7ba-7a51-4e32-8d39-05d2270f8f8b").name("ServerApiLiveTest").datacenterId("EU6")
+            
.state(State.NORMAL).sourceImageId("56eb0b7c-15a7-4b63-b373-05b962e37554")
+            
.createTime(parseDate("2017-07-03T16:29:33.000Z")).started(true).deployed(true).guest(Guest.builder()
+                  .operatingSystem(
+                        
OperatingSystem.builder().id("REDHAT764").displayName("REDHAT7/64").family("UNIX").build())
+                  
.vmTools(VmTools.builder().apiVersion(9356).type(VmTools.Type.VMWARE_TOOLS)
+                        
.versionStatus(VmTools.VersionStatus.CURRENT).runningStatus(VmTools.RunningStatus.NOT_RUNNING)
+                        .build()).osCustomization(true).build())
+            
.cpu(CPU.builder().count(2).speed("STANDARD").coresPerSocket(1).build()).memoryGb(4).disks(Collections
+                  .singletonList(
+                        
Disk.builder().id("918f12ba-5e5e-4cd6-87bd-60c18293c24d").scsiId(0).sizeGb(20).speed("STANDARD")
+                              
.state("NORMAL").build())).networkInfo(NetworkInfo.builder().primaryNic(
+                  
NIC.builder().id("f0c00cab-bfa3-4c51-8c0a-c52fdac1ae4b").privateIpv4("10.0.0.7")
+                        
.ipv6("2a00:47c0:111:1131:5851:1950:411c:3dd8").vlanId("7bd12a4d-4e83-4254-a266-174aa5f55187")
+                        .vlanName("jclouds 
vlan").state("NORMAL").build()).additionalNic(Collections.<NIC>emptyList())
+                  
.networkDomainId("d122949b-8990-46d6-98f0-91c8676fc720").build())
+            
.virtualHardware(VirtualHardware.builder().upToDate(true).version("vmx-10").build())
+            .softwareLabels(Collections.emptyList()).build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java
new file mode 100644
index 0000000..eb97dae
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import com.google.common.collect.ImmutableList;
+import org.jclouds.dimensiondata.cloudcontrol.domain.CPU;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Disk;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Guest;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NIC;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkInfo;
+import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Server;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Servers;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VirtualHardware;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VmTools;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+import java.util.Collections;
+import java.util.List;
+
+@Test(groups = "unit")
+public class ServersParseTest extends 
BaseDimensionDataCloudControlParseTest<Servers> {
+
+   @Override
+   public String resource() {
+      return "/servers.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Servers expected() {
+      List<Server> servers = ImmutableList
+            
.of(Server.builder().id("b8246ba4-847d-475b-b296-f76787a69ca8").name("parser-test-server-name")
+                  
.description("parser-test-server-description").datacenterId("NA9").state(State.NORMAL)
+                  .sourceImageId("1e44ab3f-2426-45ec-a1b5-827b2ce58836")
+                  
.createTime(parseDate("2016-03-10T13:05:21.000Z")).started(true).deployed(true).guest(Guest.builder()
+                        .operatingSystem(
+                              
OperatingSystem.builder().id("CENTOS564").displayName("CENTOS5/64").family("UNIX")
+                                    
.build()).vmTools(VmTools.builder().apiVersion(9354).type(VmTools.Type.VMWARE_TOOLS)
+                              
.versionStatus(VmTools.VersionStatus.NEED_UPGRADE)
+                              
.runningStatus(VmTools.RunningStatus.RUNNING).build()).osCustomization(true).build())
+                  
.cpu(CPU.builder().count(2).speed("STANDARD").coresPerSocket(1).build()).memoryGb(4).disks(Collections
+                        
.singletonList(Disk.builder().id("0ba67812-d7b7-4c3f-b114-870fbea24d42").scsiId(0).sizeGb(10)
+                              
.speed("STANDARD").state("NORMAL").build())).networkInfo(NetworkInfo.builder().primaryNic(
+                        
NIC.builder().id("980a9fdd-4ea2-478b-85b4-f016349f1738").privateIpv4("10.0.0.8")
+                              .ipv6("2607:f480:111:1575:c47:7479:2af8:3f1a")
+                              .vlanId("6b25b02e-d3a2-4e69-8ca7-9bab605deebd")
+                              
.vlanId("6b25b02e-d3a2-4e69-8ca7-9bab605deebd").vlanName("vlan1").state("NORMAL").build())
+                        
.additionalNic(null).networkDomainId("690de302-bb80-49c6-b401-8c02bbefb945").build())
+                  
.virtualHardware(VirtualHardware.builder().upToDate(false).version("vmx-08").build())
+                  .softwareLabels(Collections.emptyList()).build());
+      return new Servers(servers, 1, 5, 5, 250);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java
new file mode 100644
index 0000000..804e491
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.IpRange;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkDomain;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Vlan;
+import 
org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class VlanParseTest extends 
BaseDimensionDataCloudControlParseTest<Vlan> {
+
+   @Override
+   public String resource() {
+      return "/vlan.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Vlan expected() {
+      return Vlan.builder()
+            
.networkDomain(NetworkDomain.builder().id("690de302-bb80-49c6-b401-8c02bbefb945").name("test").build())
+            
.name("vlan1").description("").privateIpv4Range(IpRange.create("10.0.0.0", 24))
+            
.ipv4GatewayAddress("10.0.0.1").ipv6Range(IpRange.create("2607:f480:111:1575:0:0:0:0",
 64))
+            
.ipv6GatewayAddress("2607:f480:111:1575:0:0:0:1").createTime(parseDate("2016-03-11T10:41:19.000Z"))
+            
.state(State.NORMAL).datacenterId("NA9").id("6b25b02e-d3a2-4e69-8ca7-9bab605deebd").build();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
----------------------------------------------------------------------
diff --git 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
new file mode 100644
index 0000000..995e318
--- /dev/null
+++ 
b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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 = "ParseResponseTest", singleThreaded = true)
+public class ParseResponseTest {
+
+   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);
+   }
+
+   public void testTryFindPropertyValue_ErrorReturned() {
+
+      List<Property> errorProperties = new ArrayList<Property>();
+      errorProperties.add(Property.create("propertyName1", "propertyValue1"));
+      errorProperties.add(Property.create("propertyName2", "propertyValue2"));
+
+      Response response = 
Response.builder().responseCode("responseCode").error(errorProperties).message("message")
+            .operation("operation").requestId("requestId").info(null).build();
+
+      Assert.assertEquals(new ParseResponse(null, 
"noProperty").checkForErrorElements(response),
+            "Error Elements: propertyName1:propertyValue1, 
propertyName2:propertyValue2.");
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/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
deleted file mode 100644
index 5c4ea1d..0000000
--- 
a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.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/ff3bdab6/dimensiondata/src/test/resources/firewallRule.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/firewallRule.json 
b/dimensiondata/src/test/resources/firewallRule.json
new file mode 100644
index 0000000..e85b5d8
--- /dev/null
+++ b/dimensiondata/src/test/resources/firewallRule.json
@@ -0,0 +1,25 @@
+{
+  "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"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ff3bdab6/dimensiondata/src/test/resources/server.json
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/resources/server.json 
b/dimensiondata/src/test/resources/server.json
index 9ece773..f0804e0 100644
--- a/dimensiondata/src/test/resources/server.json
+++ b/dimensiondata/src/test/resources/server.json
@@ -19,7 +19,7 @@
     "primaryNic": {
       "id": "f0c00cab-bfa3-4c51-8c0a-c52fdac1ae4b",
       "privateIpv4": "10.0.0.7",
-      "ipv6": "2a00:47c0: 111: 1131: 5851: 1950:411c: 3dd8",
+      "ipv6": "2a00:47c0:111:1131:5851:1950:411c:3dd8",
       "vlanId": "7bd12a4d-4e83-4254-a266-174aa5f55187",
       "vlanName": "jclouds vlan",
       "networkAdapter": "E1000",
@@ -32,7 +32,7 @@
   },
   "softwareLabel": [],
   "sourceImageId": "56eb0b7c-15a7-4b63-b373-05b962e37554",
-  "createTime": "2017-07-03T16: 29: 33.000Z",
+  "createTime": "2017-07-03T16:29:33.000Z",
   "deployed": true,
   "started": true,
   "state": "NORMAL",

Reply via email to