Added listFree() to IpClient/IpAsyncClient

This commit is contained in:
Mattias Holmqvist 2011-12-02 18:06:00 +01:00
parent b15ab66d30
commit 506349da67
5 changed files with 108 additions and 7 deletions

View File

@ -18,18 +18,42 @@
*/ */
package org.jclouds.glesys.features; package org.jclouds.glesys.features;
import com.google.common.util.concurrent.ListenableFuture;
import org.jclouds.http.filters.BasicAuthentication; import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.RequestFilters; 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. * Provides asynchronous access to IP Addresses via their REST API.
* <p/> * <p/>
* *
* @author Adrian Cole
* @see ServerClient * @see ServerClient
* @see <a href="https://customer.glesys.com/api.php" /> * @see <a href="https://customer.glesys.com/api.php" />
* @author Adrian Cole
*/ */
@RequestFilters(BasicAuthentication.class) @RequestFilters(BasicAuthentication.class)
public interface IpAsyncClient { 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<Set<String>> listFree(@PathParam("ipversion") String ipversion,
@PathParam("datacenter") String datacenter,
@PathParam("platform") String platform);
} }

View File

@ -18,19 +18,31 @@
*/ */
package org.jclouds.glesys.features; package org.jclouds.glesys.features;
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout; import org.jclouds.concurrent.Timeout;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/** /**
* Provides synchronous access to IP Addresses. * Provides synchronous access to IP Addresses.
* <p/> * <p/>
* *
* @author Adrian Cole
* @see IpAsyncClient * @see IpAsyncClient
* @see <a href="https://customer.glesys.com/api.php" /> * @see <a href="https://customer.glesys.com/api.php" />
* @author Adrian Cole
*/ */
@Timeout(duration = 30, timeUnit = TimeUnit.SECONDS) @Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
public interface IpClient { 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<String> listFree(String ipversion, String datacenter, String platform);
} }

View File

@ -21,6 +21,10 @@ package org.jclouds.glesys.features;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import java.util.Set;
import static org.testng.Assert.assertTrue;
/** /**
* Tests behavior of {@code IpClient} * Tests behavior of {@code IpClient}
* *
@ -37,4 +41,9 @@ public class IpClientLiveTest extends BaseGleSYSClientLiveTest {
private IpClient client; private IpClient client;
@Test
public void testListFree() throws Exception {
Set<String> freeIps = client.listFree("4", "Falkenberg", "OpenVZ");
assertTrue(freeIps.size() >= 0);
}
} }

View File

@ -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<String> {
@Override
public String resource() {
return "/ip_list_free.json";
}
@Override
@SelectJson("iplist")
@Consumes(MediaType.APPLICATION_JSON)
public Set<String> expected() {
return new HashSet<String>(asList("31.192.226.131", "31.192.226.133"));
}
protected Injector injector() {
return Guice.createInjector(new GleSYSParserModule(), new GsonModule());
}
}

View File

@ -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"}}}}