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",