diff --git a/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpAsyncClient.java b/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpAsyncClient.java index f458cd03fd..80a9986326 100644 --- a/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpAsyncClient.java +++ b/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpAsyncClient.java @@ -18,18 +18,42 @@ */ package org.jclouds.glesys.features; +import com.google.common.util.concurrent.ListenableFuture; import org.jclouds.http.filters.BasicAuthentication; +import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SelectJson; +import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; +import java.util.Set; /** * Provides asynchronous access to IP Addresses via their REST API. *

- * + * + * @author Adrian Cole * @see ServerClient * @see - * @author Adrian Cole */ @RequestFilters(BasicAuthentication.class) public interface IpAsyncClient { + + /** + * @see IpClient#listFree + */ + @GET + @Path("/ip/listfree/ipversion/{ipversion}/datacenter/{datacenter}/platform/{platform}/format/json") + @Consumes(MediaType.APPLICATION_JSON) + @SelectJson("iplist") + @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) + ListenableFuture> listFree(@PathParam("ipversion") String ipversion, + @PathParam("datacenter") String datacenter, + @PathParam("platform") String platform); + } diff --git a/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpClient.java b/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpClient.java index 8ee2d53b39..f144ff3b1a 100644 --- a/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpClient.java +++ b/sandbox-providers/glesys/src/main/java/org/jclouds/glesys/features/IpClient.java @@ -18,19 +18,31 @@ */ package org.jclouds.glesys.features; -import java.util.concurrent.TimeUnit; - import org.jclouds.concurrent.Timeout; +import java.util.Set; +import java.util.concurrent.TimeUnit; + /** * Provides synchronous access to IP Addresses. *

- * + * + * @author Adrian Cole * @see IpAsyncClient * @see - * @author Adrian Cole */ @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS) public interface IpClient { + + /** + * Get a set of all IP addresses that are available and not used on any account or server. + * + * @param ipversion "4" or "6", for IPV4 or IPV6, respectively + * @param datacenter the datacenter + * @param platform the platform + * @return a set of free IP addresses + */ + Set listFree(String ipversion, String datacenter, String platform); + } \ No newline at end of file diff --git a/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/features/IpClientLiveTest.java b/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/features/IpClientLiveTest.java index f41ab83577..5a598abedc 100644 --- a/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/features/IpClientLiveTest.java +++ b/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/features/IpClientLiveTest.java @@ -21,9 +21,13 @@ package org.jclouds.glesys.features; import org.testng.annotations.BeforeGroups; import org.testng.annotations.Test; +import java.util.Set; + +import static org.testng.Assert.assertTrue; + /** * Tests behavior of {@code IpClient} - * + * * @author Adrian Cole */ @Test(groups = "live", testName = "IpClientLiveTest") @@ -37,4 +41,9 @@ public class IpClientLiveTest extends BaseGleSYSClientLiveTest { private IpClient client; + @Test + public void testListFree() throws Exception { + Set freeIps = client.listFree("4", "Falkenberg", "OpenVZ"); + assertTrue(freeIps.size() >= 0); + } } diff --git a/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/parse/ParseIpAddressFromResponseTest.java b/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/parse/ParseIpAddressFromResponseTest.java new file mode 100644 index 0000000000..9653a64723 --- /dev/null +++ b/sandbox-providers/glesys/src/test/java/org/jclouds/glesys/parse/ParseIpAddressFromResponseTest.java @@ -0,0 +1,55 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.jclouds.glesys.parse; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import org.jclouds.glesys.config.GleSYSParserModule; +import org.jclouds.json.BaseSetParserTest; +import org.jclouds.json.config.GsonModule; +import org.jclouds.rest.annotations.SelectJson; +import org.testng.annotations.Test; + +import javax.ws.rs.Consumes; +import javax.ws.rs.core.MediaType; +import java.util.HashSet; +import java.util.Set; + +import static java.util.Arrays.asList; + +@Test(groups = "unit", testName = "ParseIpAddressFromResponseTest") +public class ParseIpAddressFromResponseTest extends BaseSetParserTest { + + @Override + public String resource() { + return "/ip_list_free.json"; + } + + @Override + @SelectJson("iplist") + @Consumes(MediaType.APPLICATION_JSON) + public Set expected() { + return new HashSet(asList("31.192.226.131", "31.192.226.133")); + } + + protected Injector injector() { + return Guice.createInjector(new GleSYSParserModule(), new GsonModule()); + } +} diff --git a/sandbox-providers/glesys/src/test/resources/ip_list_free.json b/sandbox-providers/glesys/src/test/resources/ip_list_free.json new file mode 100644 index 0000000000..3583d21467 --- /dev/null +++ b/sandbox-providers/glesys/src/test/resources/ip_list_free.json @@ -0,0 +1 @@ +{"response":{"status":{"code":"200","text":"OK"},"ipinfo":{"ipversion":4,"datacenter":"Falkenberg","platform":"OpenVZ"},"iplist":["31.192.226.131","31.192.226.133"],"debug":{"input":{"ipversion":"4","datacenter":"Falkenberg","platform":"OpenVZ"}}}} \ No newline at end of file