Repository: jclouds-labs Updated Branches: refs/heads/master bb178c714 -> 80e5c9116
JCLOUDS-1167 oneandone-privatenetwork-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/80e5c911 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/80e5c911 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/80e5c911 Branch: refs/heads/master Commit: 80e5c91161feff705b802738a9bd869b101ee135 Parents: bb178c7 Author: alibazlamit <ali@ali-G751JT> Authored: Fri Sep 9 12:35:11 2016 +0200 Committer: Ignasi Barrera <n...@apache.org> Committed: Mon Sep 19 12:02:05 2016 +0200 ---------------------------------------------------------------------- .../jclouds/oneandone/rest/OneAndOneApi.java | 4 + .../oneandone/rest/domain/DataCenter.java | 15 +- .../jclouds/oneandone/rest/domain/Dvd.java | 13 +- .../oneandone/rest/domain/PrivateNetwork.java | 116 ++++++++ .../rest/features/PrivateNetworkApi.java | 101 +++++++ .../features/PrivateNetworkApiMockTest.java | 263 +++++++++++++++++++ .../features/PrivateNetworksApiLiveTest.java | 135 ++++++++++ .../rest/internal/BaseOneAndOneLiveTest.java | 3 + .../src/test/resources/privatenetwork/get.json | 25 ++ .../src/test/resources/privatenetwork/list.json | 34 +++ .../resources/privatenetwork/list.options.json | 34 +++ .../resources/privatenetwork/server.get.json | 4 + .../resources/privatenetwork/servers.list.json | 10 + 13 files changed, 742 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/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 cfd08a9..2b0e9d7 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 @@ -20,6 +20,7 @@ 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.PrivateNetworkApi; import org.apache.jclouds.oneandone.rest.features.PublicIpApi; import org.apache.jclouds.oneandone.rest.features.ServerApi; import org.apache.jclouds.oneandone.rest.features.SharedStorageApi; @@ -44,4 +45,7 @@ public interface OneAndOneApi extends Closeable { @Delegate PublicIpApi publicIpApi(); + + @Delegate + PrivateNetworkApi privateNetworkApi(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/DataCenter.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/DataCenter.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/DataCenter.java index c2d129f..95e2bf3 100644 --- a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/DataCenter.java +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/DataCenter.java @@ -21,15 +21,14 @@ import org.jclouds.json.SerializedNames; @AutoValue public abstract class DataCenter { + public abstract String id(); - public abstract String id(); + public abstract String countryCode(); - public abstract String countryCode(); + public abstract String location(); - public abstract String location(); - - @SerializedNames({"id", "country_code", "location"}) - public static DataCenter create(String id, String countryCode, String location) { - return new AutoValue_DataCenter(id, countryCode, location); - } + @SerializedNames({"id", "country_code", "location"}) + public static DataCenter create(String id, String countryCode, String location) { + return new AutoValue_DataCenter(id, countryCode, location); + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Dvd.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Dvd.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Dvd.java index 865eb48..dd778be 100644 --- a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Dvd.java +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/Dvd.java @@ -21,13 +21,12 @@ import org.jclouds.json.SerializedNames; @AutoValue public abstract class Dvd { + public abstract String id(); - public abstract String id(); + public abstract String name(); - public abstract String name(); - - @SerializedNames({"id", "name"}) - public static Dvd create(String id, String name) { - return new AutoValue_Dvd(id, name); - } + @SerializedNames({"id", "name"}) + public static Dvd create(String id, String name) { + return new AutoValue_Dvd(id, name); + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/PrivateNetwork.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/PrivateNetwork.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/PrivateNetwork.java index 5a01fc7..487acf5 100644 --- a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/PrivateNetwork.java +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/domain/PrivateNetwork.java @@ -58,4 +58,120 @@ public abstract class PrivateNetwork { public static PrivateNetwork create(String id, String name, String description, String networkAddress, String subnetMask, GenericState state, String creationDate, List<Server> servers, String cloudpanelId, DataCenter datacenter) { return new AutoValue_PrivateNetwork(id, name, description, networkAddress, subnetMask, state, creationDate, servers == null ? ImmutableList.<Server>of() : servers, cloudpanelId, datacenter); } + + @AutoValue + public abstract static class CreatePrivateNetwork { + + public abstract String name(); + + @Nullable + public abstract String description(); + + @Nullable + public abstract String networkAddress(); + + @Nullable + public abstract String subnetMask(); + + @Nullable + public abstract String datacenterId(); + + @SerializedNames({"name", "description", "network_address", "subnet_mask", "datacenter_id"}) + public static CreatePrivateNetwork create(String name, String description, String networkAddress, String subnetMask, String datacenterId) { + return builder() + .name(name) + .description(description) + .subnetMask(subnetMask) + .networkAddress(networkAddress) + .datacenterId(datacenterId) + .build(); + } + + public static Builder builder() { + return new AutoValue_PrivateNetwork_CreatePrivateNetwork.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder name(String name); + + public abstract Builder description(String description); + + public abstract Builder networkAddress(String networkAddress); + + public abstract Builder subnetMask(String subnetMask); + + public abstract Builder datacenterId(String datacenterId); + + public abstract CreatePrivateNetwork build(); + } + } + + @AutoValue + public abstract static class UpdatePrivateNetwork { + + public abstract String name(); + + @Nullable + public abstract String description(); + + @Nullable + public abstract String networkAddress(); + + @Nullable + public abstract String subnetMask(); + + @SerializedNames({"name", "description", "network_address", "subnet_mask"}) + public static UpdatePrivateNetwork create(String name, String description, String networkAddress, String subnetMask) { + return builder() + .name(name) + .description(description) + .subnetMask(subnetMask) + .networkAddress(networkAddress) + .build(); + } + + public static Builder builder() { + return new AutoValue_PrivateNetwork_UpdatePrivateNetwork.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder name(String name); + + public abstract Builder description(String description); + + public abstract Builder networkAddress(String networkAddress); + + public abstract Builder subnetMask(String subnetMask); + + public abstract UpdatePrivateNetwork build(); + } + } + + @AutoValue + public abstract static class Server { + + public abstract String id(); + + public abstract String name(); + + @SerializedNames({"id", "name"}) + public static Server create(String id, String name) { + return new AutoValue_PrivateNetwork_Server(id, name); + } + + @AutoValue + public abstract static class CreateServer { + + public abstract List<String> servers(); + + @SerializedNames({"servers"}) + public static CreateServer create(List<String> servers) { + return new AutoValue_PrivateNetwork_Server_CreateServer(servers == null ? ImmutableList.<String>of() : ImmutableList.copyOf(servers)); + } + } + } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApi.java ---------------------------------------------------------------------- diff --git a/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApi.java b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApi.java new file mode 100644 index 0000000..3f97250 --- /dev/null +++ b/oneandone/src/main/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApi.java @@ -0,0 +1,101 @@ +/* + * 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.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.PrivateNetwork; +import org.apache.jclouds.oneandone.rest.domain.PrivateNetwork.Server; +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("/private_networks") +@Produces("application/json") +@Consumes("application/json") +@RequestFilters(AuthenticateRequest.class) +public interface PrivateNetworkApi { + + @Named("privatenetwork:list") + @GET + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<PrivateNetwork> list(); + + @Named("privatenetwork:list") + @GET + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<PrivateNetwork> list(GenericQueryOptions options); + + @Named("privatenetwork:get") + @GET + @Path("/{privateNetworkId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + PrivateNetwork get(@PathParam("privateNetworkId") String privateNetworkId); + + @Named("privatenetwork:create") + @POST + PrivateNetwork create(@BinderParam(BindToJsonPayload.class) PrivateNetwork.CreatePrivateNetwork privateNetwork); + + @Named("privatenetwork:update") + @PUT + @Path("/{privateNetworkId}") + PrivateNetwork update(@PathParam("privateNetworkId") String privateNetworkId, @BinderParam(BindToJsonPayload.class) PrivateNetwork.UpdatePrivateNetwork privateNetwork); + + @Named("privatenetwork:delete") + @DELETE + @Path("/{privateNetworkId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + @MapBinder(BindToJsonPayload.class) + PrivateNetwork delete(@PathParam("privateNetworkId") String privateNetworkId); + + @Named("sharedstorages:servers:list") + @GET + @Path("/{privateNetworkId}/servers") + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) + List<Server> listServers(@PathParam("privateNetworkId") String privateNetworkId); + + @Named("sharedstorages:servers:create") + @POST + @Path("/{privateNetworkId}/servers") + PrivateNetwork attachServer(@PathParam("privateNetworkId") String privateNetworkId, @BinderParam(BindToJsonPayload.class) PrivateNetwork.Server.CreateServer server); + + @Named("sharedstorages:servers:get") + @GET + @Path("/{privateNetworkId}/servers/{serverId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + Server getServer(@PathParam("privateNetworkId") String privateNetworkId, @PathParam("serverId") String serverId); + + @Named("sharedstorages:servers:delete") + @DELETE + @Path("/{privateNetworkId}/servers/{serverId}") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + @MapBinder(BindToJsonPayload.class) + PrivateNetwork detachServer(@PathParam("privateNetworkId") String privateNetworkId, @PathParam("serverId") String serverId); +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApiMockTest.java ---------------------------------------------------------------------- diff --git a/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApiMockTest.java b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApiMockTest.java new file mode 100644 index 0000000..9032ed7 --- /dev/null +++ b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworkApiMockTest.java @@ -0,0 +1,263 @@ +/* + * 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.PrivateNetwork; +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 = "PrivateNetworkApiMockTest", singleThreaded = true) +public class PrivateNetworkApiMockTest extends BaseOneAndOneApiMockTest { + + private PrivateNetworkApi privateNetworkApi() { + return api.privateNetworkApi(); + } + + @Test + public void testList() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/list.json")) + ); + + List<PrivateNetwork> networks = privateNetworkApi().list(); + + assertNotNull(networks); + assertEquals(networks.size(), 2); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks"); + } + + @Test + public void testList404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + List<PrivateNetwork> networks = privateNetworkApi().list(); + + assertEquals(networks.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks"); + } + + @Test + public void testListWithOption() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/list.options.json")) + ); + GenericQueryOptions options = new GenericQueryOptions(); + options.options(0, 0, null, "New", null); + List<PrivateNetwork> result = privateNetworkApi().list(options); + + assertNotNull(result); + assertEquals(result.size(), 2); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks?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<PrivateNetwork> result = privateNetworkApi().list(options); + + assertEquals(result.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks?q=New"); + } + + public void testGet() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/get.json")) + ); + PrivateNetwork result = privateNetworkApi().get("privatenetworkId"); + + assertNotNull(result); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks/privatenetworkId"); + } + + public void testGet404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + PrivateNetwork result = privateNetworkApi().get("privatenetworkId"); + + assertEquals(result, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks/privatenetworkId"); + } + + @Test + public void testCreate() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/get.json")) + ); + + PrivateNetwork response = privateNetworkApi().create(PrivateNetwork.CreatePrivateNetwork.builder() + .name("name") + .networkAddress("192.168.1.0") + .subnetMask("255.255.255.0") + .build()); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "/private_networks", "{\"name\":\"name\",\"network_address\":\"192.168.1.0\",\"subnet_mask\":\"255.255.255.0\"}"); + } + + @Test + public void testUpdate() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/get.json")) + ); + PrivateNetwork response = privateNetworkApi().update("privatenetworkId", PrivateNetwork.UpdatePrivateNetwork.builder() + .name("name") + .build() + ); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "PUT", "/private_networks/privatenetworkId", "{\"name\":\"name\"}"); + } + + @Test + public void testDelete() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/get.json")) + ); + PrivateNetwork response = privateNetworkApi().delete("privatenetworkId"); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/private_networks/privatenetworkId"); + } + + @Test + public void testDelete404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + PrivateNetwork response = privateNetworkApi().delete("privatenetworkId"); + + assertEquals(response, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/private_networks/privatenetworkId"); + } + + @Test + public void testListServers() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/servers.list.json")) + ); + + List<PrivateNetwork.Server> servers = privateNetworkApi().listServers("privatenetworkId"); + + assertNotNull(servers); + assertEquals(servers.size(), 2); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks/privatenetworkId/servers"); + } + + @Test + public void testListServers404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + List<PrivateNetwork.Server> servers = privateNetworkApi().listServers("privatenetworkId"); + + assertEquals(servers.size(), 0); + + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks/privatenetworkId/servers"); + } + + @Test + public void testGetServer() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/server.get.json")) + ); + PrivateNetwork.Server result = privateNetworkApi().getServer("privatenetworkId", "serverId"); + + assertNotNull(result); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks/privatenetworkId/servers/serverId"); + } + + @Test + public void testGetServer404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + PrivateNetwork.Server result = privateNetworkApi().getServer("privatenetworkId", "serverId"); + + assertEquals(result, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "GET", "/private_networks/privatenetworkId/servers/serverId"); + } + + @Test + public void testAttachServer() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/get.json")) + ); + + List<String> servers = new ArrayList<String>(); + String toAdd = "server_id"; + servers.add(toAdd); + PrivateNetwork response = privateNetworkApi().attachServer("privatenetworkId", PrivateNetwork.Server.CreateServer.create(servers)); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "POST", "/private_networks/privatenetworkId/servers", "{\"servers\":[\"server_id\"]}"); + } + + @Test + public void testDetachServer() throws InterruptedException { + server.enqueue( + new MockResponse().setBody(stringFromResource("/privatenetwork/get.json")) + ); + PrivateNetwork response = privateNetworkApi().detachServer("privatenetworkId", "serverId"); + + assertNotNull(response); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/private_networks/privatenetworkId/servers/serverId"); + } + + @Test + public void testDetachServer404() throws InterruptedException { + server.enqueue( + new MockResponse().setResponseCode(404)); + + PrivateNetwork response = privateNetworkApi().detachServer("privatenetworkId", "serverId"); + + assertEquals(response, null); + assertEquals(server.getRequestCount(), 1); + assertSent(server, "DELETE", "/private_networks/privatenetworkId/servers/serverId"); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworksApiLiveTest.java ---------------------------------------------------------------------- diff --git a/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworksApiLiveTest.java b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworksApiLiveTest.java new file mode 100644 index 0000000..466430b --- /dev/null +++ b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/features/PrivateNetworksApiLiveTest.java @@ -0,0 +1,135 @@ +/* + * 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.PrivateNetwork; +import org.apache.jclouds.oneandone.rest.domain.Server; +import org.apache.jclouds.oneandone.rest.domain.options.GenericQueryOptions; +import org.apache.jclouds.oneandone.rest.ids.ServerPrivateNetworkRef; +import org.apache.jclouds.oneandone.rest.internal.BaseOneAndOneLiveTest; +import org.testng.Assert; +import static org.testng.Assert.assertEquals; +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 = "PrivateNetworksApiLiveTest") +public class PrivateNetworksApiLiveTest extends BaseOneAndOneLiveTest { + + private PrivateNetwork currentPrivateNetwork; + private List<PrivateNetwork> privateNetworks; + private Server currentServer; + + private PrivateNetworkApi privateNetworkApi() { + + return api.privateNetworkApi(); + } + + @BeforeClass + public void setupTest() { + currentServer = createServer("privatenetwork jclouds server"); + assertNodeAvailable(currentServer); + currentPrivateNetwork = privateNetworkApi().create(PrivateNetwork.CreatePrivateNetwork.builder() + .name("jclouds privatenetwork") + .networkAddress("192.168.1.0") + .subnetMask("255.255.255.0") + .build()); + } + + @Test + public void testList() { + privateNetworks = privateNetworkApi().list(); + + Assert.assertTrue(privateNetworks.size() > 0); + } + + public void testListWithOption() { + GenericQueryOptions options = new GenericQueryOptions(); + options.options(0, 0, null, "jclouds", null); + List<PrivateNetwork> resultWithQuery = privateNetworkApi().list(options); + + Assert.assertTrue(resultWithQuery.size() > 0); + } + + public void testGet() { + PrivateNetwork result = privateNetworkApi().get(currentPrivateNetwork.id()); + + assertEquals(result.id(), currentPrivateNetwork.id()); + } + + public void testUpdate() throws InterruptedException { + String updatedName = "updatejclouds PN"; + + PrivateNetwork updateResult = privateNetworkApi().update(currentPrivateNetwork.id(), PrivateNetwork.UpdatePrivateNetwork.builder() + .name(updatedName) + .build()); + + assertEquals(updateResult.name(), updatedName); + + } + + @Test(dependsOnMethods = "testUpdate") + public void testAttachServer() throws InterruptedException { + List<String> servers = new ArrayList<String>(); + String toAdd = currentServer.id(); + servers.add(toAdd); + + PrivateNetwork updateResult = privateNetworkApi().attachServer(currentPrivateNetwork.id(), PrivateNetwork.Server.CreateServer.create(servers)); + + assertNotNull(updateResult); + + } + + @Test(dependsOnMethods = "testAttachServer") + public void testListServers() { + assertPrivateNetworkAvailable(ServerPrivateNetworkRef.create(currentServer.id(), currentPrivateNetwork.id())); + List<PrivateNetwork.Server> servers = privateNetworkApi().listServers(currentPrivateNetwork.id()); + + Assert.assertTrue(servers.size() > 0); + } + + @Test(dependsOnMethods = "testAttachServer") + public void testServerGet() { + PrivateNetwork.Server result = privateNetworkApi().getServer(currentPrivateNetwork.id(), currentServer.id()); + + assertEquals(result.id(), currentServer.id()); + } + + @Test(dependsOnMethods = "testServerGet") + public void testDetachServer() { + turnOFFServer(currentServer.id()); + assertNodeAvailable(currentServer); + assertPrivateNetworkAvailable(ServerPrivateNetworkRef.create(currentServer.id(), currentPrivateNetwork.id())); + PrivateNetwork result = privateNetworkApi().detachServer(currentPrivateNetwork.id(), currentServer.id()); + + assertEquals(result.id(), currentPrivateNetwork.id()); + } + + @AfterClass(alwaysRun = true) + public void teardownTest() throws InterruptedException { + if (currentPrivateNetwork != null && currentServer != null) { + assertPrivateNetworkAvailable(ServerPrivateNetworkRef.create(currentServer.id(), currentPrivateNetwork.id())); + privateNetworkApi().delete(currentPrivateNetwork.id()); + assertNodeAvailable(currentServer); + deleteServer(currentServer.id()); + } + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/internal/BaseOneAndOneLiveTest.java ---------------------------------------------------------------------- diff --git a/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/internal/BaseOneAndOneLiveTest.java b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/internal/BaseOneAndOneLiveTest.java index b03b44c..78b5eb9 100644 --- a/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/internal/BaseOneAndOneLiveTest.java +++ b/oneandone/src/test/java/org/apache/jclouds/oneandone/rest/internal/BaseOneAndOneLiveTest.java @@ -123,4 +123,7 @@ public class BaseOneAndOneLiveTest extends BaseApiLiveTest<OneAndOneApi> { protected Server turnOnServer(String serverId) { return api.serverApi().updateStatus(serverId, Server.UpdateStatus.create(Types.ServerAction.POWER_ON, Types.ServerActionMethod.SOFTWARE)); } + protected Server turnOFFServer(String serverId) { + return api.serverApi().updateStatus(serverId, Server.UpdateStatus.create(Types.ServerAction.POWER_OFF, Types.ServerActionMethod.SOFTWARE)); +} } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/resources/privatenetwork/get.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/privatenetwork/get.json b/oneandone/src/test/resources/privatenetwork/get.json new file mode 100644 index 0000000..5fff526 --- /dev/null +++ b/oneandone/src/test/resources/privatenetwork/get.json @@ -0,0 +1,25 @@ +{ + "id": "7786BE739765D4EC0635A90C19F44D91", + "cloudpanel_id": "pn90282_1", + "name": "Private Network", + "description": "Private network description", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "network_address": null, + "subnet_mask": null, + "state": "ACTIVE", + "creation_date": "2015-04-06T23:48:38Z", + "servers": [ + { + "id": "7786BE739765D4EC0635A90C19F44D91", + "name": "My server name" + }, + { + "id": "7786BE739765D4EC0635A90C19F44D91", + "name": "My server name 2" + } + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/resources/privatenetwork/list.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/privatenetwork/list.json b/oneandone/src/test/resources/privatenetwork/list.json new file mode 100644 index 0000000..164d12b --- /dev/null +++ b/oneandone/src/test/resources/privatenetwork/list.json @@ -0,0 +1,34 @@ +[ + { + "id": "6058B5DAF8182D20E1C68C3CED78EE22", + "name": "My private network", + "description": "My private network description", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "network_address": "192.168.1.0", + "subnet_mask": "255.255.255.0", + "state": "ACTIVE", + "creation_date": "2015-04-28T10:21:19+00:00", + "servers": [], + "cloudpanel_id": "pn99AA4_1" + }, + { + "id": "6058B5DAF8182D20E1C68C3CED78EE23", + "name": "My private network 2", + "description": "My private network description", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "network_address": null, + "subnet_mask": null, + "state": "ACTIVE", + "creation_date": "2015-04-28T10:21:19+00:00", + "servers": [], + "cloudpanel_id": "pn99AA4_1" + } +] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/resources/privatenetwork/list.options.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/privatenetwork/list.options.json b/oneandone/src/test/resources/privatenetwork/list.options.json new file mode 100644 index 0000000..164d12b --- /dev/null +++ b/oneandone/src/test/resources/privatenetwork/list.options.json @@ -0,0 +1,34 @@ +[ + { + "id": "6058B5DAF8182D20E1C68C3CED78EE22", + "name": "My private network", + "description": "My private network description", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "network_address": "192.168.1.0", + "subnet_mask": "255.255.255.0", + "state": "ACTIVE", + "creation_date": "2015-04-28T10:21:19+00:00", + "servers": [], + "cloudpanel_id": "pn99AA4_1" + }, + { + "id": "6058B5DAF8182D20E1C68C3CED78EE23", + "name": "My private network 2", + "description": "My private network description", + "datacenter": { + "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36", + "location": "USA", + "country_code": "US" + }, + "network_address": null, + "subnet_mask": null, + "state": "ACTIVE", + "creation_date": "2015-04-28T10:21:19+00:00", + "servers": [], + "cloudpanel_id": "pn99AA4_1" + } +] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/resources/privatenetwork/server.get.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/privatenetwork/server.get.json b/oneandone/src/test/resources/privatenetwork/server.get.json new file mode 100644 index 0000000..b7f5213 --- /dev/null +++ b/oneandone/src/test/resources/privatenetwork/server.get.json @@ -0,0 +1,4 @@ +{ + "id": "C72CF0A681B0CCE7EC624DD194D585C6", + "name": "My server 1" +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/80e5c911/oneandone/src/test/resources/privatenetwork/servers.list.json ---------------------------------------------------------------------- diff --git a/oneandone/src/test/resources/privatenetwork/servers.list.json b/oneandone/src/test/resources/privatenetwork/servers.list.json new file mode 100644 index 0000000..83935b5 --- /dev/null +++ b/oneandone/src/test/resources/privatenetwork/servers.list.json @@ -0,0 +1,10 @@ +[ +{ + "id": "C72CF0A681B0CCE7EC624DD194D585C6", + "name": "My server 1" +}, +{ + "id": "4ECD9D188EB457317B2CF8F07885E7B4", + "name": "My server 2" +} +] \ No newline at end of file