Repository: jclouds-labs Updated Branches: refs/heads/master 05a5ae2eb -> de629a45b
JCLOUDS-1151 oneandone-loadbalancers-api Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/de629a45 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/de629a45 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/de629a45 Branch: refs/heads/master Commit: de629a45b6f640dc57474067223c0d65dac54dd2 Parents: 05a5ae2 Author: Ali Bazlamit <[email protected]> Authored: Mon Aug 8 15:16:36 2016 +0300 Committer: Ignasi Barrera <[email protected]> Committed: Fri Aug 12 16:28:38 2016 +0200 ---------------------------------------------------------------------- .../jclouds/oneandone/rest/OneAndOneApi.java | 4 + .../oneandone/rest/domain/LoadBalancer.java | 330 +++++++++++++++++ .../jclouds/oneandone/rest/domain/Types.java | 16 + .../rest/features/LoadBalancerApi.java | 123 +++++++ .../rest/features/LoadBalancerApiLiveTest.java | 209 +++++++++++ .../rest/features/LoadBalancerApiMockTest.java | 353 +++++++++++++++++++ .../src/test/resources/loadbalancer/get.json | 38 ++ .../test/resources/loadbalancer/get.rule.json | 7 + .../resources/loadbalancer/get.serverip.json | 5 + .../src/test/resources/loadbalancer/list.json | 78 ++++ .../resources/loadbalancer/list.options.json | 78 ++++ .../test/resources/loadbalancer/list.rules.json | 16 + .../resources/loadbalancer/list.serverips.json | 7 + 13 files changed, 1264 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/OneAndOneApi.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/OneAndOneApi.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/OneAndOneApi.java index b4f464a..da15356 100644 --- a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/OneAndOneApi.java +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/OneAndOneApi.java @@ -19,6 +19,7 @@ package org.apache.jclouds.oneandone.rest; import java.io.Closeable; import org.apache.jclouds.oneandone.rest.features.FirewallPolicyApi; import org.apache.jclouds.oneandone.rest.features.ImageApi; +import org.apache.jclouds.oneandone.rest.features.LoadBalancerApi; import org.apache.jclouds.oneandone.rest.features.ServerApi; import org.apache.jclouds.oneandone.rest.features.SharedStorageApi; import org.jclouds.rest.annotations.Delegate; @@ -36,4 +37,7 @@ public interface OneAndOneApi extends Closeable { @Delegate FirewallPolicyApi firewallPolicyApi(); + + @Delegate + LoadBalancerApi loadBalancerApi(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/LoadBalancer.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/LoadBalancer.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/LoadBalancer.java new file mode 100644 index 0000000..621a1a9 --- /dev/null +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/LoadBalancer.java @@ -0,0 +1,330 @@ +/* + * 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.apache.jclouds.oneandone.rest.domain; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.apache.jclouds.oneandone.rest.domain.Types.HealthCheckTestTypes; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +@AutoValue +public abstract class LoadBalancer { + + public abstract String id(); + + public abstract String name(); + + @Nullable + public abstract String description(); + + @Nullable + public abstract String state(); + + @Nullable + public abstract String creationDate(); + + @Nullable + public abstract String ip(); + + @Nullable + public abstract HealthCheckTestTypes healthCheckTest(); + + public abstract int healthCheckInterval(); + + @Nullable + public abstract String healthCheckPath(); + + @Nullable + public abstract String healthCheckPathParser(); + + public abstract Boolean persistence(); + + @Nullable + public abstract Integer persistenceTime(); + + public abstract Types.LoadBalancerMethod method(); + + public abstract DataCenter datacenter(); + + public abstract List<Rule> rules(); + + public abstract List<ServerIp> serverIps(); + + public abstract String cloudpanelId(); + + @SerializedNames({"id", "name", "description", "state", "creation_date", "ip", "health_check_test", "health_check_interval", "health_check_path", + "health_check_path_parser", "persistence", "persistence_time", "method", "datacenter", "rules", "server_ips", "cloudpanel_id"}) + public static LoadBalancer create(String id, String name, String description, String state, String creationDate, String ip, HealthCheckTestTypes healthCheckTest, int healthCheckInterval, String healthCheckPath, String healthCheckPathParser, Boolean persistence, Integer persistenceTime, Types.LoadBalancerMethod method, DataCenter datacenter, List<Rule> rules, List<ServerIp> serverIps, String cloudpanelId) { + return new AutoValue_LoadBalancer(id, name, description, state, creationDate, ip, healthCheckTest, healthCheckInterval, healthCheckPath, healthCheckPathParser, persistence, persistenceTime, method, datacenter, rules == null ? ImmutableList.<Rule>of() : ImmutableList.copyOf(rules), serverIps == null ? ImmutableList.<ServerIp>of() : ImmutableList.copyOf(serverIps), cloudpanelId + ); + } + + @AutoValue + public abstract static class CreateLoadBalancer { + + public abstract String name(); + + @Nullable + public abstract String description(); + + public abstract HealthCheckTestTypes healthCheckTest(); + + public abstract int healthCheckInterval(); + + @Nullable + public abstract String healthCheckPath(); + + @Nullable + public abstract String healthCheckParse(); + + public abstract Boolean persistence(); + + @Nullable + public abstract Integer persistenceTime(); + + public abstract Types.LoadBalancerMethod method(); + + @Nullable + public abstract String datacenterId(); + + public abstract List<Rule.CreatePayload> rules(); + + @SerializedNames({"name", "description", "health_check_test", "health_check_interval", "health_check_path", "health_check_parse", "persistence", "persistence_time", "method", "datacenter_id", "rules"}) + public static CreateLoadBalancer create(final String name, final String description, final HealthCheckTestTypes healthCheckTest, final int healthCheckInterval, final String healthCheckPath, + final String healthCheckParse, final Boolean persistence, final Integer persistenceTime, final Types.LoadBalancerMethod method, final String dataCenterId, final List<Rule.CreatePayload> rules) { + return builder() + .name(name) + .description(description) + .healthCheckTest(healthCheckTest) + .healthCheckInterval(healthCheckInterval) + .healthCheckPath(healthCheckPath) + .healthCheckParse(healthCheckParse) + .persistence(persistence) + .persistenceTime(persistenceTime) + .method(method) + .datacenterId(dataCenterId) + .rules(rules == null ? ImmutableList.<Rule.CreatePayload>of() : ImmutableList.copyOf(rules)) + .build(); + } + + public static Builder builder() { + return new AutoValue_LoadBalancer_CreateLoadBalancer.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder name(String name); + + public abstract Builder description(String description); + + public abstract Builder healthCheckTest(HealthCheckTestTypes healthCheckTest); + + public abstract Builder healthCheckInterval(int healthCheckInterval); + + public abstract Builder healthCheckPath(String healthCheckPath); + + public abstract Builder healthCheckParse(String healthCheckParse); + + public abstract Builder persistence(Boolean persistence); + + public abstract Builder persistenceTime(Integer persistenceTime); + + public abstract Builder method(Types.LoadBalancerMethod method); + + public abstract Builder datacenterId(String datacenterId); + + public abstract Builder rules(List<Rule.CreatePayload> rules); + + abstract List<Rule.CreatePayload> rules(); + + public CreateLoadBalancer build() { + rules(rules() != null ? ImmutableList.copyOf(rules()) : ImmutableList.<Rule.CreatePayload>of()); + return autoBuild(); + } + + abstract CreateLoadBalancer autoBuild(); + } + } + + @AutoValue + public abstract static class UpdateLoadBalancer { + + @Nullable + public abstract String name(); + + @Nullable + public abstract String description(); + + @Nullable + public abstract HealthCheckTestTypes healthCheckTest(); + + @Nullable + public abstract Integer healthCheckInterval(); + + public abstract Boolean persistence(); + + @Nullable + public abstract Integer persistenceTime(); + + public abstract Types.LoadBalancerMethod method(); + + @SerializedNames({"name", "description", "health_check_test", "health_check_interval", "persistence", "persistence_time", "method"}) + public static UpdateLoadBalancer create(final String name, final String description, final HealthCheckTestTypes healthCheckTest, final int healthCheckInterval, + final Boolean persistence, final Integer persistenceTime, final Types.LoadBalancerMethod method) { + return builder() + .name(name) + .description(description) + .healthCheckTest(healthCheckTest) + .healthCheckInterval(healthCheckInterval) + .persistence(persistence) + .persistenceTime(persistenceTime) + .method(method) + .build(); + } + + public static Builder builder() { + return new AutoValue_LoadBalancer_UpdateLoadBalancer.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder name(String name); + + public abstract Builder description(String description); + + public abstract Builder healthCheckTest(HealthCheckTestTypes healthCheckTest); + + public abstract Builder healthCheckInterval(Integer healthCheckInterval); + + public abstract Builder persistence(Boolean persistence); + + public abstract Builder persistenceTime(Integer persistenceTime); + + public abstract Builder method(Types.LoadBalancerMethod method); + + public abstract UpdateLoadBalancer build(); + } + } + + @AutoValue + public abstract static class ServerIp { + + public abstract String id(); + + public abstract String ip(); + + public abstract String serverName(); + + @SerializedNames({"id", "ip", "server_name"}) + public static ServerIp create(String id, String ip, String serverName) { + return new AutoValue_LoadBalancer_ServerIp(id, ip, serverName); + } + + @AutoValue + public abstract static class CreateServerIp { + + public abstract List<String> serverIps(); + + @SerializedNames({"server_ips"}) + public static CreateServerIp create(final List<String> serverIps) { + return new AutoValue_LoadBalancer_ServerIp_CreateServerIp(serverIps == null ? ImmutableList.<String>of() : ImmutableList.copyOf(serverIps)); + } + } + } + + @AutoValue + public abstract static class Rule { + + @Nullable + public abstract String id(); + + @Nullable + public abstract Types.RuleProtocol protocol(); + + @Nullable + public abstract Integer portBalancer(); + + @Nullable + public abstract Integer portServer(); + + @Nullable + public abstract String source(); + + @SerializedNames({"id", "protocol", "port_balancer", "port_server", "source"}) + public static Rule create(String id, Types.RuleProtocol protocol, Integer portBalancer, Integer portServer, String source) { + return new AutoValue_LoadBalancer_Rule(id, protocol, portBalancer, portServer, source); + } + + @AutoValue + public abstract static class CreatePayload { + + public abstract Types.RuleProtocol protocol(); + + @Nullable + public abstract Integer portBalancer(); + + @Nullable + public abstract Integer portServer(); + + @Nullable + public abstract String source(); + + @SerializedNames({"protocol", "port_balancer", "port_server", "source"}) + public static CreatePayload create(Types.RuleProtocol protocol, Integer portBalancer, Integer portServer, String source) { + return builder() + .portBalancer(portBalancer) + .portServer(portServer) + .protocol(protocol) + .source(source) + .build(); + } + + public static Builder builder() { + return new AutoValue_LoadBalancer_Rule_CreatePayload.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder protocol(Types.RuleProtocol protocol); + + public abstract Builder portBalancer(Integer portBalancer); + + public abstract Builder portServer(Integer portServer); + + public abstract Builder source(String source); + + public abstract CreatePayload build(); + } + } + + @AutoValue + public abstract static class AddRule { + + public abstract List<CreatePayload> rules(); + + @SerializedNames({"rules"}) + public static AddRule create(List<CreatePayload> rules) { + return new AutoValue_LoadBalancer_Rule_AddRule(rules == null ? ImmutableList.<CreatePayload>of() : ImmutableList.copyOf(rules)); + } + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Types.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Types.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Types.java index 12bcb25..695dc2e 100644 --- a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Types.java +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Types.java @@ -161,4 +161,20 @@ public class Types { return Enums.getIfPresent(RuleProtocol.class, v).or(UNRECOGNIZED); } } + + public enum LoadBalancerMethod { + ROUND_ROBIN, LEAST_CONNECTIONS, UNRECOGNIZED; + + public static LoadBalancerMethod fromValue(String v) { + return Enums.getIfPresent(LoadBalancerMethod.class, v).or(UNRECOGNIZED); + } + } + + public enum HealthCheckTestTypes { + TCP, HTTP, NONE, UNRECOGNIZED; + + public static HealthCheckTestTypes fromValue(String v) { + return Enums.getIfPresent(HealthCheckTestTypes.class, v).or(UNRECOGNIZED); + } + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApi.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApi.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApi.java new file mode 100644 index 0000000..c289286 --- /dev/null +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApi.java @@ -0,0 +1,123 @@ +/* + * 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.apache.jclouds.oneandone.rest.features; + +import java.io.Closeable; +import java.util.List; +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import org.apache.jclouds.oneandone.rest.domain.LoadBalancer; +import org.apache.jclouds.oneandone.rest.domain.options.GenericQueryOptions; +import org.apache.jclouds.oneandone.rest.filters.AuthenticateRequest; +import org.jclouds.Fallbacks; +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.binders.BindToJsonPayload; + +@Path("/load_balancers") +@Produces("application/json") +@Consumes("application/json") +@RequestFilters(AuthenticateRequest.class) +public interface LoadBalancerApi extends Closeable { + + @Named("loadbalancers:list") + @GET + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<LoadBalancer> list(); + + @Named("loadbalancers:list") + @GET + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<LoadBalancer> list(GenericQueryOptions options); + + @Named("loadbalancers:get") + @GET + @Path("/{loadbalancerId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + LoadBalancer get(@PathParam("loadbalancerId") String loadbalancerId); + + @Named("loadbalancers:create") + @POST + LoadBalancer create(@BinderParam(BindToJsonPayload.class) LoadBalancer.CreateLoadBalancer loadBalancer); + + @Named("loadbalancers:update") + @PUT + @Path("/{loadbalancerId}") + LoadBalancer update(@PathParam("loadbalancerId") String loadbalancerId, @BinderParam(BindToJsonPayload.class) LoadBalancer.UpdateLoadBalancer loadBalancer); + + @Named("loadbalancers:delete") + @DELETE + @Path("/{loadbalancerId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + @MapBinder(BindToJsonPayload.class) + LoadBalancer delete(@PathParam("loadbalancerId") String loadbalancerId); + + @Named("loadbalancers:serverips:list") + @GET + @Path("/{loadbalancerId}/server_ips") + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<LoadBalancer.ServerIp> listServerIps(@PathParam("loadbalancerId") String loadbalancerId); + + @Named("loadbalancers:serverips:create") + @POST + @Path("/{loadbalancerId}/server_ips") + LoadBalancer assignServerIp(@PathParam("loadbalancerId") String loadbalancerId, @BinderParam(BindToJsonPayload.class) LoadBalancer.ServerIp.CreateServerIp serverIp); + + @Named("loadbalancers:serverips:get") + @GET + @Path("/{loadbalancerId}/server_ips/{serverIpId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + LoadBalancer.ServerIp getServerIp(@PathParam("loadbalancerId") String loadbalancerId, @PathParam("serverIpId") String serverIpId); + + @Named("loadbalancers:serverips:delete") + @DELETE + @Path("/{loadbalancerId}/server_ips/{serverIpId}") + @MapBinder(BindToJsonPayload.class) + LoadBalancer unassignServerIp(@PathParam("loadbalancerId") String loadbalancerId, @PathParam("serverIpId") String serverIpId); + + @Named("loadbalancers:rules:list") + @GET + @Path("/{loadbalancerId}/rules") + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<LoadBalancer.Rule> listRules(@PathParam("loadbalancerId") String loadbalancerId); + + @Named("loadbalancers:rules:create") + @POST + @Path("/{loadbalancerId}/rules") + LoadBalancer addRules(@PathParam("loadbalancerId") String loadbalancerId, @BinderParam(BindToJsonPayload.class) LoadBalancer.Rule.AddRule rule); + + @Named("loadbalancers:rules:get") + @GET + @Path("/{loadbalancerId}/rules/{ruleId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + LoadBalancer.Rule getRule(@PathParam("loadbalancerId") String loadbalancerId, @PathParam("ruleId") String ruleId); + + @Named("loadbalancers:rules:delete") + @DELETE + @Path("/{loadbalancerId}/rules/{ruleId}") + @MapBinder(BindToJsonPayload.class) + LoadBalancer removeRule(@PathParam("loadbalancerId") String firewallPolicyId, @PathParam("ruleId") String ruleId); +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiLiveTest.java ---------------------------------------------------------------------- diff --git a/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiLiveTest.java b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiLiveTest.java new file mode 100644 index 0000000..54bd33b --- /dev/null +++ b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiLiveTest.java @@ -0,0 +1,209 @@ +/* + * 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.apache.jclouds.oneandone.rest.features; + +import java.util.ArrayList; +import java.util.List; +import org.apache.jclouds.oneandone.rest.domain.LoadBalancer; +import org.apache.jclouds.oneandone.rest.domain.Server; +import org.apache.jclouds.oneandone.rest.domain.Types; +import org.apache.jclouds.oneandone.rest.domain.options.GenericQueryOptions; +import org.apache.jclouds.oneandone.rest.internal.BaseOneAndOneLiveTest; +import org.testng.Assert; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +@Test(groups = "live", testName = "LoadBalancerApiLiveTest") +public class LoadBalancerApiLiveTest extends BaseOneAndOneLiveTest { + + private LoadBalancer currentLoadBalancer; + private Server currentServer; + private List<LoadBalancer> loadBalancers; + + private LoadBalancerApi loadBalancerApi() { + return api.loadBalancerApi(); + } + + @BeforeClass + public void setupTest() { + currentServer = createServer("loadbalancers jclouds server"); + assertNodeAvailable(currentServer); + + List<LoadBalancer.Rule.CreatePayload> rules = new ArrayList<LoadBalancer.Rule.CreatePayload>(); + LoadBalancer.Rule.CreatePayload rule = LoadBalancer.Rule.CreatePayload.builder() + .portBalancer(4567) + .portServer(4567) + .protocol(Types.RuleProtocol.TCP) + .source("0.0.0.0") + .build(); + rules.add(rule); + currentLoadBalancer = loadBalancerApi().create(LoadBalancer.CreateLoadBalancer.builder() + .name("jclouds loadbalancer") + .rules(rules) + .description("description") + .healthCheckInterval(1) + .healthCheckPath("path") + .healthCheckTest(Types.HealthCheckTestTypes.TCP) + .method(Types.LoadBalancerMethod.ROUND_ROBIN) + .persistence(Boolean.TRUE) + .persistenceTime(200) + .build()); + } + + @Test + public void testList() { + loadBalancers = loadBalancerApi().list(); + + assertNotNull(loadBalancers); + assertFalse(loadBalancers.isEmpty()); + Assert.assertTrue(loadBalancers.size() > 0); + } + + public void testListWithOption() { + GenericQueryOptions options = new GenericQueryOptions(); + options.options(0, 0, null, "jclouds", null); + List<LoadBalancer> resultWithQuery = loadBalancerApi().list(options); + + assertNotNull(resultWithQuery); + assertFalse(resultWithQuery.isEmpty()); + Assert.assertTrue(resultWithQuery.size() > 0); + } + + public void testGet() { + LoadBalancer result = loadBalancerApi().get(currentLoadBalancer.id()); + + assertNotNull(result); + assertEquals(result.id(), currentLoadBalancer.id()); + } + + @Test(dependsOnMethods = "testGet") + public void testUpdate() throws InterruptedException { + String updatedName = "UpdatedjcloudsPolicy"; + + LoadBalancer updateResult = loadBalancerApi().update(currentLoadBalancer.id(), LoadBalancer.UpdateLoadBalancer.builder() + .name(updatedName) + .description("description") + .healthCheckInterval(40) + .healthCheckTest(Types.HealthCheckTestTypes.TCP) + .method(Types.LoadBalancerMethod.ROUND_ROBIN) + .persistence(Boolean.TRUE) + .persistenceTime(1200) + .build()); + + assertNotNull(updateResult); + assertEquals(updateResult.name(), updatedName); + + } + + @Test(dependsOnMethods = "testGet") + public void testAssignServerIp() throws InterruptedException { + assertNodeAvailable(currentServer); + currentServer = updateServerStatus(currentServer); + List<String> ips = new ArrayList<String>(); + ips.add(currentServer.ips().get(0).id()); + LoadBalancer.ServerIp.CreateServerIp toAdd = LoadBalancer.ServerIp.CreateServerIp.create(ips); + + LoadBalancer updateResult = loadBalancerApi().assignServerIp(currentLoadBalancer.id(), toAdd); + assertEquals(updateResult.serverIps().get(0).id(), currentServer.ips().get(0).id()); + } + + @Test(dependsOnMethods = "testAssignServerIp") + public void testListServerIps() { + List<LoadBalancer.ServerIp> servers = loadBalancerApi().listServerIps(currentLoadBalancer.id()); + + assertNotNull(servers); + assertFalse(servers.isEmpty()); + Assert.assertTrue(servers.size() > 0); + } + + @Test(dependsOnMethods = "testListServerIps") + public void testServerIpGet() { + LoadBalancer.ServerIp result = loadBalancerApi().getServerIp(currentLoadBalancer.id(), currentServer.ips().get(0).id()); + + assertNotNull(result); + } + + @Test(dependsOnMethods = "testServerIpGet") + public void testUnassignServer() { + LoadBalancer result = loadBalancerApi().unassignServerIp(currentLoadBalancer.id(), currentServer.ips().get(0).id()); + + assertNotNull(result); + assertEquals(result.serverIps().size(), 0); + } + + @Test(dependsOnMethods = "testServerIpGet") + public void testAddRules() throws InterruptedException { + assertNodeAvailable(currentServer); + currentServer = updateServerStatus(currentServer); + List<LoadBalancer.Rule.CreatePayload> rules = new ArrayList<LoadBalancer.Rule.CreatePayload>(); + LoadBalancer.Rule.CreatePayload rule = LoadBalancer.Rule.CreatePayload.builder() + .portBalancer(4668) + .portServer(4765) + .protocol(Types.RuleProtocol.TCP) + .source("0.0.0.0") + .build(); + rules.add(rule); + LoadBalancer response = loadBalancerApi().addRules(currentLoadBalancer.id(), LoadBalancer.Rule.AddRule.create(rules)); + + LoadBalancer.Rule ruleFromApi = loadBalancerApi().getRule(currentLoadBalancer.id(), currentLoadBalancer.rules().get(0).id()); + assertNotNull(response); + assertNotNull(ruleFromApi); + + } + + @Test(dependsOnMethods = "testAddRules") + public void testListRules() { + List<LoadBalancer.Rule> servers = loadBalancerApi().listRules(currentLoadBalancer.id()); + + assertNotNull(servers); + assertFalse(servers.isEmpty()); + Assert.assertTrue(servers.size() > 0); + } + + @Test(dependsOnMethods = "testListRules") + public void testGetRule() { + LoadBalancer.Rule result = loadBalancerApi().getRule(currentLoadBalancer.id(), currentLoadBalancer.rules().get(0).id()); + + assertNotNull(result); + } + + @Test(dependsOnMethods = "testGetRule") + public void testRemoveRule() { + LoadBalancer result = loadBalancerApi().removeRule(currentLoadBalancer.id(), currentLoadBalancer.rules().get(0).id()); + + assertNodeAvailable(currentServer); + LoadBalancer.Rule ruleFromApi = loadBalancerApi().getRule(currentLoadBalancer.id(), currentLoadBalancer.rules().get(0).id()); + + assertNotNull(result); + //the API returns an object with null values + assertEquals(ruleFromApi, LoadBalancer.Rule.create(null, null, null, null, null)); + assertEquals(result.id(), currentLoadBalancer.id()); + } + + @AfterClass(alwaysRun = true) + public void teardownTest() throws InterruptedException { + if (currentLoadBalancer != null) { + loadBalancerApi().delete(currentLoadBalancer.id()); + } + assertNodeAvailable(currentServer); + deleteServer(currentServer.id()); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiMockTest.java ---------------------------------------------------------------------- diff --git a/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiMockTest.java b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiMockTest.java new file mode 100644 index 0000000..909e063 --- /dev/null +++ b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/LoadBalancerApiMockTest.java @@ -0,0 +1,353 @@ +/* + * 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.apache.jclouds.oneandone.rest.features; + +import com.squareup.okhttp.mockwebserver.MockResponse; +import java.util.ArrayList; +import java.util.List; +import org.apache.jclouds.oneandone.rest.domain.LoadBalancer; +import org.apache.jclouds.oneandone.rest.domain.Types; +import org.apache.jclouds.oneandone.rest.domain.options.GenericQueryOptions; +import org.apache.jclouds.oneandone.rest.internal.BaseOneAndOneApiMockTest; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "LoadBalancerApiMockTest", singleThreaded = true) +public class LoadBalancerApiMockTest extends BaseOneAndOneApiMockTest { + + private LoadBalancerApi loadBalancerApi() { + return api.loadBalancerApi(); + } + + @Test + public void testList() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/list.json")) + ); + + List<LoadBalancer> loadbalancers = loadBalancerApi().list(); + + assertEquals(loadbalancers.size(), 2); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers"); + } + + @Test + public void testList404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + List<LoadBalancer> loadbalancers = loadBalancerApi().list(); + + assertEquals(loadbalancers.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers"); + } + + @Test + public void testListWithOption() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/list.options.json")) + ); + GenericQueryOptions options = new GenericQueryOptions(); + options.options(0, 0, null, "New", null); + List<LoadBalancer> loadbalancers = loadBalancerApi().list(options); + + assertEquals(loadbalancers.size(), 2); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers?q=New"); + } + + @Test + public void testListWithOption404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + GenericQueryOptions options = new GenericQueryOptions(); + options.options(0, 0, null, "New", null); + List<LoadBalancer> loadbalancers = loadBalancerApi().list(options); + + assertEquals(loadbalancers.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers?q=New"); + } + + public void testGet() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + LoadBalancer result = loadBalancerApi().get("loadbalancerId"); + + assertNotNull(result); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId"); + } + + public void testGet404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + LoadBalancer result = loadBalancerApi().get("loadbalancerId"); + + assertEquals(result, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId"); + } + + @Test + public void testCreate() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + List<LoadBalancer.Rule.CreatePayload> rules = new ArrayList<LoadBalancer.Rule.CreatePayload>(); + LoadBalancer.Rule.CreatePayload rule = LoadBalancer.Rule.CreatePayload.builder() + .portBalancer(80) + .portServer(80) + .protocol(Types.RuleProtocol.TCP) + .source("source") + .build(); + rules.add(rule); + LoadBalancer response = loadBalancerApi().create(LoadBalancer.CreateLoadBalancer.builder() + .rules(rules) + .description("description") + .name("name") + .healthCheckInterval(1) + .healthCheckPath("path") + .healthCheckTest(Types.HealthCheckTestTypes.HTTP) + .method(Types.LoadBalancerMethod.ROUND_ROBIN) + .persistence(Boolean.TRUE) + .persistenceTime(200) + .rules(rules) + .build()); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "/load_balancers", "{\"name\":\"name\"," + + "\"description\":\"description\",\"health_check_test\":\"HTTP\",\"health_check_interval\":1," + + "\"health_check_path\":\"path\",\"persistence\":true,\"persistence_time\":200," + + "\"method\":\"ROUND_ROBIN\",\"rules\":[{\"protocol\":\"TCP\",\"port_balancer\":80,\"port_server\":80,\"source\":\"source\"}]}"); + } + + @Test + public void testUpdate() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + LoadBalancer response = loadBalancerApi().update("loadbalancerId", LoadBalancer.UpdateLoadBalancer.builder() + .description("description") + .name("name") + .healthCheckInterval(1) + .healthCheckTest(Types.HealthCheckTestTypes.HTTP) + .method(Types.LoadBalancerMethod.ROUND_ROBIN) + .persistence(Boolean.TRUE) + .persistenceTime(200) + .build()); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "PUT", "/load_balancers/loadbalancerId", "{\"name\":\"name\",\"description\":\"description\"," + + "\"health_check_test\":\"HTTP\",\"health_check_interval\":1,\"persistence\":true,\"persistence_time\":200,\"method\":\"ROUND_ROBIN\"}"); + } + + @Test + public void testDelete() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + LoadBalancer response = loadBalancerApi().delete("loadbalancerId"); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/load_balancers/loadbalancerId"); + } + + @Test + public void testDelete404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + LoadBalancer response = loadBalancerApi().delete("loadbalancerId"); + + assertEquals(response, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/load_balancers/loadbalancerId"); + } + + @Test + public void testListServerIps() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/list.serverips.json")) + ); + + List<LoadBalancer.ServerIp> serverIps = loadBalancerApi().listServerIps("loadbalancerId"); + + assertNotNull(serverIps); + assertEquals(serverIps.size(), 1); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/server_ips"); + } + + @Test + public void testListServerIps404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + List<LoadBalancer.ServerIp> serverIps = loadBalancerApi().listServerIps("loadbalancerId"); + + assertEquals(serverIps.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/server_ips"); + } + + @Test + public void testGetServerIp() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.serverip.json")) + ); + LoadBalancer.ServerIp result = loadBalancerApi().getServerIp("loadbalancerId", "serverIpId"); + + assertNotNull(result); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/server_ips/serverIpId"); + } + + @Test + public void testGetServerIp404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + LoadBalancer.ServerIp result = loadBalancerApi().getServerIp("loadbalancerId", "serverIpId"); + + assertEquals(result, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/server_ips/serverIpId"); + } + + @Test + public void testAssignServerIp() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + + List<String> ips = new ArrayList<String>(); + ips.add("ip1"); + LoadBalancer response = loadBalancerApi().assignServerIp("loadbalancerId", LoadBalancer.ServerIp.CreateServerIp.create(ips)); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "/load_balancers/loadbalancerId/server_ips", "{\"server_ips\":[\"ip1\"]}"); + } + + @Test + public void testUnassignServerIp() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + LoadBalancer response = loadBalancerApi().unassignServerIp("loadbalancerId", "serverIpId"); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/load_balancers/loadbalancerId/server_ips/serverIpId"); + } + + @Test + public void testListRules() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/list.rules.json")) + ); + + List<LoadBalancer.Rule> rules = loadBalancerApi().listRules("loadbalancerId"); + + assertNotNull(rules); + assertEquals(rules.size(), 2); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/rules"); + } + + @Test + public void testListRules404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + List<LoadBalancer.Rule> rules = loadBalancerApi().listRules("loadbalancerId"); + + assertEquals(rules.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/rules"); + } + + @Test + public void testGetRule() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.rule.json")) + ); + LoadBalancer.Rule result = loadBalancerApi().getRule("loadbalancerId", "ruleId"); + + assertNotNull(result); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/rules/ruleId"); + } + + @Test + public void testGetRule404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + LoadBalancer.Rule result = loadBalancerApi().getRule("loadbalancerId", "ruleId"); + + assertEquals(result, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/load_balancers/loadbalancerId/rules/ruleId"); + } + + @Test + public void testAddRule() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + + List<LoadBalancer.Rule.CreatePayload> rules = new ArrayList<LoadBalancer.Rule.CreatePayload>(); + LoadBalancer.Rule.CreatePayload rule = LoadBalancer.Rule.CreatePayload.builder() + .portBalancer(80) + .portServer(80) + .protocol(Types.RuleProtocol.TCP) + .source("source") + .build(); + rules.add(rule); + LoadBalancer response = loadBalancerApi().addRules("loadbalancerId", LoadBalancer.Rule.AddRule.create(rules)); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "/load_balancers/loadbalancerId/rules", "{\"rules\":[{\"protocol\":\"TCP\",\"port_balancer\":80,\"port_server\":80,\"source\":\"source\"}]}"); + } + + @Test + public void testRemoveRule() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/loadbalancer/get.json")) + ); + LoadBalancer response = loadBalancerApi().removeRule("loadbalancerId", "ruleId"); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/load_balancers/loadbalancerId/rules/ruleId"); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/get.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/get.json b/oneandone/src/test/resources/loadbalancer/get.json new file mode 100644 index 0000000..b50a07b --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/get.json @@ -0,0 +1,38 @@ +{ + "id": "B23F1B4F84E983B4FEDD5459E877058A", + "name": "My load balancer", + "state": "CONFIGURING", + "creation_date": "2015-03-03T11:12:00+00:00", + "description": "My load balancer description", + "ip": "10.5.138.52", + "health_check_test": "TCP", + "health_check_interval": 40, + "health_check_path": null, + "health_check_path_parser": null, + "persistence": true, + "persistence_time": 1200, + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "method": "ROUND_ROBIN", + "rules": [ + { + "id": "D7A0A7C445D844848EBB439C28B46183", + "protocol": "TCP", + "port_balancer": 22, + "port_server": 22, + "source": "0.0.0.0" + }, + { + "id": "9AE836CDE379EEB361287F07B3300F84", + "protocol": "TCP", + "port_balancer": 85, + "port_server": 85, + "source": "0.0.0.0" + } + ], + "server_ips": [], + "cloudpanel_id": "LB99AA4_1" +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/get.rule.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/get.rule.json b/oneandone/src/test/resources/loadbalancer/get.rule.json new file mode 100644 index 0000000..d941bd1 --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/get.rule.json @@ -0,0 +1,7 @@ +{ + "id": "353E9F751630074CF7219747436A8D71", + "protocol": "TCP", + "port_from": 4567, + "port_to": 4567, + "source": "0.0.0.0" +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/get.serverip.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/get.serverip.json b/oneandone/src/test/resources/loadbalancer/get.serverip.json new file mode 100644 index 0000000..02b3e65 --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/get.serverip.json @@ -0,0 +1,5 @@ +{ + "id": "01D4A802798AB77AA72DA2D05E1379E1", + "ip": "10.5.135.140", + "server_name": "My Server 2" +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/list.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/list.json b/oneandone/src/test/resources/loadbalancer/list.json new file mode 100644 index 0000000..275b021 --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/list.json @@ -0,0 +1,78 @@ +[ + { + "id": "B23F1B4F84E983B4FEDD5459E877058A", + "name": "My load balancer", + "state": "CONFIGURING", + "creation_date": "2015-03-03T11:12:00+00:00", + "description": "My load balancer description", + "ip": "10.5.138.52", + "health_check_test": "TCP", + "health_check_interval": 40, + "health_check_path": null, + "health_check_path_parser": null, + "persistence": true, + "persistence_time": 1200, + "method": "ROUND_ROBIN", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "rules": [ + { + "id": "D7A0A7C445D844848EBB439C28B46183", + "protocol": "TCP", + "port_balancer": 22, + "port_server": 22, + "source": "0.0.0.0" + }, + { + "id": "9AE836CDE379EEB361287F07B3300F84", + "protocol": "TCP", + "port_balancer": 85, + "port_server": 85, + "source": "0.0.0.0" + } + ], + "server_ips": [], + "cloudpanel_id": "LB99AA4_1" + }, + { + "id": "B23F1B4F84E983B4FEDD5459E877058B", + "name": "My Load Balancer II", + "state": "CONFIGURING", + "creation_date": "2015-03-03T11:12:00+00:00", + "description": "My load balancer II description", + "ip": "10.5.138.53", + "health_check_test": "TCP", + "health_check_interval": 40, + "health_check_path": null, + "health_check_path_parser": null, + "persistence": true, + "persistence_time": 1200, + "method": "ROUND_ROBIN", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "rules": [ + { + "id": "D7A0A7C445D844848EBB439C28B46184", + "protocol": "TCP", + "port_balancer": 22, + "port_server": 22, + "source": "0.0.0.0" + }, + { + "id": "9AE836CDE379EEB361287F07B3300F85", + "protocol": "TCP", + "port_balancer": 9999, + "port_server": 9999, + "source": "0.0.0.0" + } + ], + "server_ips": [], + "cloudpanel_id": "LB99AA4_1" + } +] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/list.options.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/list.options.json b/oneandone/src/test/resources/loadbalancer/list.options.json new file mode 100644 index 0000000..275b021 --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/list.options.json @@ -0,0 +1,78 @@ +[ + { + "id": "B23F1B4F84E983B4FEDD5459E877058A", + "name": "My load balancer", + "state": "CONFIGURING", + "creation_date": "2015-03-03T11:12:00+00:00", + "description": "My load balancer description", + "ip": "10.5.138.52", + "health_check_test": "TCP", + "health_check_interval": 40, + "health_check_path": null, + "health_check_path_parser": null, + "persistence": true, + "persistence_time": 1200, + "method": "ROUND_ROBIN", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "rules": [ + { + "id": "D7A0A7C445D844848EBB439C28B46183", + "protocol": "TCP", + "port_balancer": 22, + "port_server": 22, + "source": "0.0.0.0" + }, + { + "id": "9AE836CDE379EEB361287F07B3300F84", + "protocol": "TCP", + "port_balancer": 85, + "port_server": 85, + "source": "0.0.0.0" + } + ], + "server_ips": [], + "cloudpanel_id": "LB99AA4_1" + }, + { + "id": "B23F1B4F84E983B4FEDD5459E877058B", + "name": "My Load Balancer II", + "state": "CONFIGURING", + "creation_date": "2015-03-03T11:12:00+00:00", + "description": "My load balancer II description", + "ip": "10.5.138.53", + "health_check_test": "TCP", + "health_check_interval": 40, + "health_check_path": null, + "health_check_path_parser": null, + "persistence": true, + "persistence_time": 1200, + "method": "ROUND_ROBIN", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "rules": [ + { + "id": "D7A0A7C445D844848EBB439C28B46184", + "protocol": "TCP", + "port_balancer": 22, + "port_server": 22, + "source": "0.0.0.0" + }, + { + "id": "9AE836CDE379EEB361287F07B3300F85", + "protocol": "TCP", + "port_balancer": 9999, + "port_server": 9999, + "source": "0.0.0.0" + } + ], + "server_ips": [], + "cloudpanel_id": "LB99AA4_1" + } +] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/list.rules.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/list.rules.json b/oneandone/src/test/resources/loadbalancer/list.rules.json new file mode 100644 index 0000000..114a2f4 --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/list.rules.json @@ -0,0 +1,16 @@ +[ + { + "id": "DA5CC179ED00079AE7DE595F0073D86E", + "protocol": "TCP", + "port_from": 80, + "port_to": 80, + "source": "0.0.0.0" + }, + { + "id": "0766EC674A0CD9D4EC0FA0B07978A649", + "protocol": "TCP", + "port_from": 443, + "port_to": 443, + "source": "0.0.0.0" + } +] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/de629a45/oneandone/src/test/resources/loadbalancer/list.serverips.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/loadbalancer/list.serverips.json b/oneandone/src/test/resources/loadbalancer/list.serverips.json new file mode 100644 index 0000000..14f14ea --- /dev/null +++ b/oneandone/src/test/resources/loadbalancer/list.serverips.json @@ -0,0 +1,7 @@ +[ + { + "id": "01D4A802798AB77AA72DA2D05E1379E1", + "ip": "10.5.135.140", + "server_name": "My Server 2" + } +] \ No newline at end of file
