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

Reply via email to