mirror of https://github.com/apache/jclouds.git
Added listFree() to IpClient/IpAsyncClient
This commit is contained in:
parent
b15ab66d30
commit
506349da67
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
|
@ -21,9 +21,13 @@ 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}
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Test(groups = "live", testName = "IpClientLiveTest")
|
@Test(groups = "live", testName = "IpClientLiveTest")
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"}}}}
|
Loading…
Reference in New Issue