Repository: jclouds-labs-openstack Updated Branches: refs/heads/master 51873d8ed -> 660f10fb8
[Openstack-Neutron] move SecurityGroupApi from extensions to features Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/commit/660f10fb Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/660f10fb Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/660f10fb Branch: refs/heads/master Commit: 660f10fb8b93e12454256ef6a26dcfddb982de80 Parents: 51873d8 Author: andreaturli <[email protected]> Authored: Tue Nov 21 12:34:12 2017 +0100 Committer: andreaturli <[email protected]> Committed: Tue Dec 12 09:47:11 2017 +0100 ---------------------------------------------------------------------- .../openstack/neutron/v2/NeutronApi.java | 18 +- .../neutron/v2/extensions/SecurityGroupApi.java | 190 --------- .../neutron/v2/features/SecurityGroupApi.java | 184 +++++++++ .../v2/functions/RulesToPagedIterable.java | 4 +- .../SecurityGroupsToPagedIterable.java | 4 +- .../v2/extensions/SecurityGroupApiLiveTest.java | 103 ----- .../v2/extensions/SecurityGroupApiMockTest.java | 413 ------------------- .../v2/features/SecurityGroupApiLiveTest.java | 103 +++++ .../v2/features/SecurityGroupApiMockTest.java | 394 ++++++++++++++++++ ...CloudNetworksUSSecurityGroupApiLiveTest.java | 2 +- 10 files changed, 693 insertions(+), 722 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/NeutronApi.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/NeutronApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/NeutronApi.java index 6eb3f53..97530f8 100644 --- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/NeutronApi.java +++ b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/NeutronApi.java @@ -24,7 +24,7 @@ import javax.ws.rs.Path; import org.jclouds.location.Region; import org.jclouds.openstack.neutron.v2.extensions.FloatingIPApi; import org.jclouds.openstack.neutron.v2.extensions.RouterApi; -import org.jclouds.openstack.neutron.v2.extensions.SecurityGroupApi; +import org.jclouds.openstack.neutron.v2.features.SecurityGroupApi; import org.jclouds.openstack.neutron.v2.extensions.lbaas.v1.LBaaSApi; import org.jclouds.openstack.neutron.v2.extensions.FWaaSApi; import org.jclouds.openstack.neutron.v2.features.NetworkApi; @@ -83,34 +83,30 @@ public interface NeutronApi extends Closeable { PortApi getPortApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); /** - * Provides access to Router features. - * - * <h3>NOTE</h3> - * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type - * to determine if it is present. + * Provides access to SecurityGroup features. */ @Delegate - Optional<RouterApi> getRouterApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); + SecurityGroupApi getSecurityGroupApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); /** - * Provides access to Floating IP features. + * Provides access to Router features. * * <h3>NOTE</h3> * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type * to determine if it is present. */ @Delegate - Optional<FloatingIPApi> getFloatingIPApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); + Optional<RouterApi> getRouterApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); /** - * Provides access to SecurityGroup features. + * Provides access to Floating IP features. * * <h3>NOTE</h3> * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type * to determine if it is present. */ @Delegate - Optional<SecurityGroupApi> getSecurityGroupApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); + Optional<FloatingIPApi> getFloatingIPApi(@EndpointParam(parser = VersionAwareRegionToEndpoint.class) String region); /** * Provides access to LBaaS features. http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApi.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApi.java deleted file mode 100644 index 4986343..0000000 --- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApi.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * 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.jclouds.openstack.neutron.v2.extensions; - -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.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -import org.jclouds.Fallbacks; -import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; -import org.jclouds.collect.PagedIterable; -import org.jclouds.javax.annotation.Nullable; -import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; -import org.jclouds.openstack.neutron.v2.domain.Rule; -import org.jclouds.openstack.neutron.v2.domain.Rules; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroups; -import org.jclouds.openstack.neutron.v2.fallbacks.EmptyRulesFallback; -import org.jclouds.openstack.neutron.v2.fallbacks.EmptySecurityGroupsFallback; -import org.jclouds.openstack.neutron.v2.functions.ParseRules; -import org.jclouds.openstack.neutron.v2.functions.ParseSecurityGroups; -import org.jclouds.openstack.neutron.v2.functions.RulesToPagedIterable; -import org.jclouds.openstack.neutron.v2.functions.SecurityGroupsToPagedIterable; -import org.jclouds.openstack.v2_0.ServiceType; -import org.jclouds.openstack.v2_0.options.PaginationOptions; -import org.jclouds.openstack.v2_0.services.Extension; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.annotations.ResponseParser; -import org.jclouds.rest.annotations.SelectJson; -import org.jclouds.rest.annotations.Transform; -import org.jclouds.rest.annotations.WrapWith; - -import com.google.common.annotations.Beta; - -/** - * Provides access to Security Group extension operations for the OpenStack Networking (Neutron) v2 API. - * <p/> - * Security groups and security group rules allows administrators and tenants the ability to specify the type of - * traffic and direction (ingress/egress) that is allowed to pass through a port. A security group is a container for - * security group rules. - */ -@Beta -@RequestFilters(AuthenticateRequest.class) -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) -@Extension(of = ServiceType.NETWORK, namespace = ExtensionNamespaces.SECURITY_GROUPS, name = "security-group", alias = "security-group") -public interface SecurityGroupApi { - /** - * Groups - */ - - /** - * @return all security groups currently defined in Neutron for the current tenant. - */ - @Path("/security-groups") - @Named("security-group:list") - @GET - @ResponseParser(ParseSecurityGroups.class) - @Transform(SecurityGroupsToPagedIterable.class) - @Fallback(EmptyPagedIterableOnNotFoundOr404.class) - PagedIterable<SecurityGroup> listSecurityGroups(); - - /** - * @return all security groups currently defined in Neutron for the current tenant. - */ - @Path("/security-groups") - @Named("security-group:list") - @GET - @ResponseParser(ParseSecurityGroups.class) - @Fallback(EmptySecurityGroupsFallback.class) - SecurityGroups listSecurityGroups(PaginationOptions options); - - /** - * @param id the id of the security group to return - * @return SecurityGroup or null if not found. - */ - @Path("/security-groups/{id}") - @Named("security-group:get") - @GET - @SelectJson("security_group") - @Fallback(Fallbacks.NullOnNotFoundOr404.class) - @Nullable - SecurityGroup getSecurityGroup(@PathParam("id") String id); - - /** - * Creates a new SecurityGroup. - * - * @param securityGroup Describes the security group to be created. - * @return a reference of the newly-created security group - */ - @Path("/security-groups") - @Named("secuity-group:create") - @POST - @SelectJson("security_group") - SecurityGroup create(@WrapWith("security_group") SecurityGroup.CreateSecurityGroup securityGroup); - - /** - * Deletes the specified Security Group. - * - * @param id the id of the security group to delete - * @return true if delete was successful, false if not - */ - @Path("/security-groups/{id}") - @Named("security-group:delete") - @DELETE - @Fallback(Fallbacks.FalseOnNotFoundOr404.class) - boolean deleteSecurityGroup(@PathParam("id") String id); - - /** - * Rules - */ - - /** - * @return all security groups rules currently defined in Neutron for the current tenant. - */ - @Path("/security-group-rules") - @Named("security-group-rule:list") - @GET - @ResponseParser(ParseRules.class) - @Transform(RulesToPagedIterable.class) - @Fallback(EmptyPagedIterableOnNotFoundOr404.class) - PagedIterable<Rule> listRules(); - - /** - * @return all security groups rules currently defined in Neutron for the current tenant. - */ - @Path("/security-group-rules") - @Named("security-group-rule:list") - @GET - @ResponseParser(ParseRules.class) - @Fallback(EmptyRulesFallback.class) - Rules listRules(PaginationOptions options); - - /** - * @param id the id of the security group rule to return. - * @return SecurityGroupRule or null if not found. - */ - @Path("/security-group-rules/{id}") - @Named("security-group-rule:get") - @GET - @SelectJson("security_group_rule") - @Fallback(Fallbacks.NullOnNotFoundOr404.class) - @Nullable - Rule get(@PathParam("id") String id); - - /** - * Creates a new Security Group Rule. - * - * @param securityGroupRule Describes the security group rule to be created. - * @return a reference of the newly-created security group rule. - */ - @Path("/security-group-rules") - @Named("security-group-rule:create") - @POST - @SelectJson("security_group_rule") - Rule create(@WrapWith("security_group_rule") Rule.CreateRule securityGroupRule); - - /** - * Deletes the specified Security Group Rule. - * - * @param id the id of the security group rule to delete. - * @return true if delete was successful, false if not. - */ - @Path("/security-group-rules/{id}") - @Named("security-group-rule:delete") - @DELETE - @Fallback(Fallbacks.FalseOnNotFoundOr404.class) - boolean deleteRule(@PathParam("id") String id); -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java new file mode 100644 index 0000000..4b9803c --- /dev/null +++ b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java @@ -0,0 +1,184 @@ +/* + * 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.jclouds.openstack.neutron.v2.features; + +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.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; +import org.jclouds.openstack.neutron.v2.domain.Rule; +import org.jclouds.openstack.neutron.v2.domain.Rules; +import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; +import org.jclouds.openstack.neutron.v2.domain.SecurityGroups; +import org.jclouds.openstack.neutron.v2.fallbacks.EmptyRulesFallback; +import org.jclouds.openstack.neutron.v2.fallbacks.EmptySecurityGroupsFallback; +import org.jclouds.openstack.neutron.v2.functions.ParseRules; +import org.jclouds.openstack.neutron.v2.functions.ParseSecurityGroups; +import org.jclouds.openstack.neutron.v2.functions.RulesToPagedIterable; +import org.jclouds.openstack.neutron.v2.functions.SecurityGroupsToPagedIterable; +import org.jclouds.openstack.v2_0.options.PaginationOptions; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SelectJson; +import org.jclouds.rest.annotations.Transform; +import org.jclouds.rest.annotations.WrapWith; + +import com.google.common.annotations.Beta; + +/** + * Provides access to Security Group extension operations for the OpenStack Networking (Neutron) v2 API. + * <p/> + * Security groups and security group rules allows administrators and tenants the ability to specify the type of + * traffic and direction (ingress/egress) that is allowed to pass through a port. A security group is a container for + * security group rules. + */ +@Beta +@RequestFilters(AuthenticateRequest.class) +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public interface SecurityGroupApi { + + /** + * @return all security groups currently defined in Neutron for the current tenant. + */ + @Path("/security-groups") + @Named("security-group:list") + @GET + @ResponseParser(ParseSecurityGroups.class) + @Transform(SecurityGroupsToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<SecurityGroup> listSecurityGroups(); + + /** + * @return all security groups currently defined in Neutron for the current tenant. + */ + @Path("/security-groups") + @Named("security-group:list") + @GET + @ResponseParser(ParseSecurityGroups.class) + @Fallback(EmptySecurityGroupsFallback.class) + SecurityGroups listSecurityGroups(PaginationOptions options); + + /** + * @param id the id of the security group to return + * @return SecurityGroup or null if not found. + */ + @Path("/security-groups/{id}") + @Named("security-group:get") + @GET + @SelectJson("security_group") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + @Nullable + SecurityGroup getSecurityGroup(@PathParam("id") String id); + + /** + * Creates a new SecurityGroup. + * + * @param securityGroup Describes the security group to be created. + * @return a reference of the newly-created security group + */ + @Path("/security-groups") + @Named("secuity-group:create") + @POST + @SelectJson("security_group") + SecurityGroup create(@WrapWith("security_group") SecurityGroup.CreateSecurityGroup securityGroup); + + /** + * Deletes the specified Security Group. + * + * @param id the id of the security group to delete + * @return true if delete was successful, false if not + */ + @Path("/security-groups/{id}") + @Named("security-group:delete") + @DELETE + @Fallback(Fallbacks.FalseOnNotFoundOr404.class) + boolean deleteSecurityGroup(@PathParam("id") String id); + + /** + * Rules + */ + + /** + * @return all security groups rules currently defined in Neutron for the current tenant. + */ + @Path("/security-group-rules") + @Named("security-group-rule:list") + @GET + @ResponseParser(ParseRules.class) + @Transform(RulesToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Rule> listRules(); + + /** + * @return all security groups rules currently defined in Neutron for the current tenant. + */ + @Path("/security-group-rules") + @Named("security-group-rule:list") + @GET + @ResponseParser(ParseRules.class) + @Fallback(EmptyRulesFallback.class) + Rules listRules(PaginationOptions options); + + /** + * @param id the id of the security group rule to return. + * @return SecurityGroupRule or null if not found. + */ + @Path("/security-group-rules/{id}") + @Named("security-group-rule:get") + @GET + @SelectJson("security_group_rule") + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + @Nullable + Rule get(@PathParam("id") String id); + + /** + * Creates a new Security Group Rule. + * + * @param securityGroupRule Describes the security group rule to be created. + * @return a reference of the newly-created security group rule. + */ + @Path("/security-group-rules") + @Named("security-group-rule:create") + @POST + @SelectJson("security_group_rule") + Rule create(@WrapWith("security_group_rule") Rule.CreateRule securityGroupRule); + + /** + * Deletes the specified Security Group Rule. + * + * @param id the id of the security group rule to delete. + * @return true if delete was successful, false if not. + */ + @Path("/security-group-rules/{id}") + @Named("security-group-rule:delete") + @DELETE + @Fallback(Fallbacks.FalseOnNotFoundOr404.class) + boolean deleteRule(@PathParam("id") String id); +} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/RulesToPagedIterable.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/RulesToPagedIterable.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/RulesToPagedIterable.java index d664cd6..e4283c2 100644 --- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/RulesToPagedIterable.java +++ b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/RulesToPagedIterable.java @@ -24,7 +24,7 @@ import org.jclouds.collect.IterableWithMarker; import org.jclouds.collect.internal.Arg0ToPagedIterable; import org.jclouds.openstack.neutron.v2.NeutronApi; import org.jclouds.openstack.neutron.v2.domain.Rule; -import org.jclouds.openstack.neutron.v2.extensions.SecurityGroupApi; +import org.jclouds.openstack.neutron.v2.features.SecurityGroupApi; import org.jclouds.openstack.v2_0.options.PaginationOptions; import com.google.common.base.Function; @@ -46,7 +46,7 @@ public class RulesToPagedIterable extends @Override protected Function<Object, IterableWithMarker<Rule>> markerToNextForArg0(Optional<Object> arg0) { String region = arg0.isPresent() ? arg0.get().toString() : null; - final SecurityGroupApi securityGroupApi = api.getSecurityGroupApi(region).get(); + final SecurityGroupApi securityGroupApi = api.getSecurityGroupApi(region); return new Function<Object, IterableWithMarker<Rule>>() { @SuppressWarnings("unchecked") http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/SecurityGroupsToPagedIterable.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/SecurityGroupsToPagedIterable.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/SecurityGroupsToPagedIterable.java index 15c7c14..ddb4240 100644 --- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/SecurityGroupsToPagedIterable.java +++ b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/functions/SecurityGroupsToPagedIterable.java @@ -24,7 +24,7 @@ import org.jclouds.collect.IterableWithMarker; import org.jclouds.collect.internal.Arg0ToPagedIterable; import org.jclouds.openstack.neutron.v2.NeutronApi; import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; -import org.jclouds.openstack.neutron.v2.extensions.SecurityGroupApi; +import org.jclouds.openstack.neutron.v2.features.SecurityGroupApi; import org.jclouds.openstack.v2_0.options.PaginationOptions; import com.google.common.base.Function; @@ -46,7 +46,7 @@ public class SecurityGroupsToPagedIterable extends @Override protected Function<Object, IterableWithMarker<SecurityGroup>> markerToNextForArg0(Optional<Object> arg0) { String region = arg0.isPresent() ? arg0.get().toString() : null; - final SecurityGroupApi securityGroupApi = api.getSecurityGroupApi(region).get(); + final SecurityGroupApi securityGroupApi = api.getSecurityGroupApi(region); return new Function<Object, IterableWithMarker<SecurityGroup>>() { @SuppressWarnings("unchecked") http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiLiveTest.java deleted file mode 100644 index c02ed49..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiLiveTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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.jclouds.openstack.neutron.v2.extensions; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; - -import org.jclouds.openstack.neutron.v2.domain.Rule; -import org.jclouds.openstack.neutron.v2.domain.RuleDirection; -import org.jclouds.openstack.neutron.v2.domain.RuleEthertype; -import org.jclouds.openstack.neutron.v2.domain.RuleProtocol; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; -import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest; -import org.testng.annotations.Test; - -/** - * Tests parsing and Guice wiring of RouterApi - */ -@Test(groups = "live", testName = "SecurityGroupApiLiveTest") -public class SecurityGroupApiLiveTest extends BaseNeutronApiLiveTest { - - /** - * Smoke test for the Security Group extension for Neutron - */ - public void testCreateUpdateAndDeleteSecurityGroup() { - for (String region : api.getConfiguredRegions()) { - SecurityGroupApi sgApi = null; - Rule rule = null; - SecurityGroup securityGroup = null; - - try { - sgApi = api.getSecurityGroupApi(region).get(); - - securityGroup = sgApi.create( - SecurityGroup.createBuilder().name("jclouds-test").description("jclouds test security group") - .build()); - assertNotNull(securityGroup); - - rule = sgApi.create( - Rule.createBuilder(RuleDirection.INGRESS, securityGroup.getId()) - .ethertype(RuleEthertype.IPV6) - .portRangeMax(90) - .portRangeMin(80) - .protocol(RuleProtocol.TCP) - .build()); - - assertNotNull(rule); - - // Refresh - securityGroup = sgApi.getSecurityGroup(securityGroup.getId()); - - assertEquals(securityGroup.getName(), "jclouds-test"); - assertEquals(securityGroup.getDescription(), "jclouds test security group"); - - assertEquals(securityGroup.getRules().size(), 1); - - Rule newSecGroupRule = null; - - for (Rule sgr : securityGroup.getRules()) { - if (sgr.getId().equals(rule.getId())) { - newSecGroupRule = sgr; - break; - } - } - assertNotNull(newSecGroupRule, "Did not find the new rule in the group."); - - assertEquals(rule, newSecGroupRule); - - assertEquals(rule.getEthertype(), RuleEthertype.IPV6); - assertEquals(rule.getProtocol(), RuleProtocol.TCP); - assertEquals(rule.getPortRangeMax().intValue(), 90); - assertEquals(rule.getPortRangeMin().intValue(), 80); - assertEquals(rule.getDirection(), RuleDirection.INGRESS); - } finally { - if (sgApi != null) { - try { - if (rule != null) { - assertTrue(sgApi.deleteRule(rule.getId())); - } - } finally { - assertTrue(sgApi.deleteSecurityGroup(securityGroup.getId())); - } - } - } - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiMockTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiMockTest.java deleted file mode 100644 index 682232e..0000000 --- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/SecurityGroupApiMockTest.java +++ /dev/null @@ -1,413 +0,0 @@ -/* - * 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.jclouds.openstack.neutron.v2.extensions; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.List; - -import org.jclouds.openstack.neutron.v2.NeutronApi; -import org.jclouds.openstack.neutron.v2.domain.Rule; -import org.jclouds.openstack.neutron.v2.domain.RuleDirection; -import org.jclouds.openstack.neutron.v2.domain.RuleEthertype; -import org.jclouds.openstack.neutron.v2.domain.RuleProtocol; -import org.jclouds.openstack.neutron.v2.domain.Rules; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; -import org.jclouds.openstack.neutron.v2.domain.SecurityGroups; -import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest; -import org.jclouds.openstack.v2_0.options.PaginationOptions; -import org.testng.annotations.Test; - -import com.squareup.okhttp.mockwebserver.MockResponse; -import com.squareup.okhttp.mockwebserver.MockWebServer; - -/** - * Tests NetworkApi Guice wiring and parsing - * - */ -@Test -public class SecurityGroupApiMockTest extends BaseNeutronApiMockTest { - - public void testCreateSecurityGroup() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders( - new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_create_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - SecurityGroup.CreateSecurityGroup createSecurityGroup = SecurityGroup.createBuilder().name("new-webservers") - .description("security group for webservers") - .build(); - - SecurityGroup securityGroup = api.create(createSecurityGroup); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "POST", uriApiVersion + "/security-groups", "/security_group_create_request.json"); - - /* - * Check response - */ - assertNotNull(securityGroup); - assertEquals(securityGroup.getId(), "2076db17-a522-4506-91de-c6dd8e837028"); - assertEquals(securityGroup.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - assertEquals(securityGroup.getName(), "new-webservers"); - assertEquals(securityGroup.getDescription(), "security group for webservers"); - - Rule sgr0 = securityGroup.getRules().get(0); - Rule sgr1 = securityGroup.getRules().get(1); - - assertEquals(sgr0.getId(), "38ce2d8e-e8f1-48bd-83c2-d33cb9f50c3d"); - assertEquals(sgr1.getId(), "565b9502-12de-4ffd-91e9-68885cff6ae1"); - } finally { - server.shutdown(); - } - } - - public void testCreateSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders( - new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_rule_create_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - Rule.CreateRule createSecurityGroupRule = Rule.createBuilder( - RuleDirection.INGRESS, "a7734e61-b545-452d-a3cd-0189cbd9747a") - .portRangeMin(80) - .portRangeMax(80) - .ethertype(RuleEthertype.IPV4) - .protocol(RuleProtocol.TCP) - .remoteGroupId("85cc3048-abc3-43cc-89b3-377341426ac5") - .build(); - - Rule rule = api.create(createSecurityGroupRule); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "POST", uriApiVersion + "/security-group-rules", "/security_group_rule_create_request.json"); - - /* - * Check response - */ - assertNotNull(rule); - assertEquals(rule.getId(), "2bc0accf-312e-429a-956e-e4407625eb62"); - assertEquals(rule.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - assertEquals(rule.getDirection(), RuleDirection.INGRESS); - assertEquals(rule.getPortRangeMax().intValue(), 80); - assertEquals(rule.getPortRangeMin().intValue(), 80); - assertEquals(rule.getEthertype(), RuleEthertype.IPV4); - assertEquals(rule.getProtocol(), RuleProtocol.TCP); - assertEquals(rule.getRemoteGroupId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(rule.getSecurityGroupId(), "a7734e61-b545-452d-a3cd-0189cbd9747a"); - - } finally { - server.shutdown(); - } - } - - public void testListSpecificPageSecurityGroup() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged1.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - SecurityGroups securityGroups = api.listSecurityGroups(PaginationOptions.Builder.limit(2).marker("abcdefg")); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups?limit=2&marker=abcdefg"); - - /* - * Check response - */ - assertNotNull(securityGroups); - assertEquals(securityGroups.size(), 2); - // Ensures the full collection is parsed and ordering is preserved. - assertEquals(securityGroups.first().get().getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(securityGroups.get(1).getId(), "85cc3048-abc3-43cc-89b3-377341426ac52"); - } finally { - server.shutdown(); - } - } - - public void testListSpecificPageSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged1.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - Rules rules = api.listRules(PaginationOptions.Builder.limit(2).marker("abcdefg")); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules?limit=2&marker=abcdefg"); - - /* - * Check response - */ - assertNotNull(rules); - assertEquals(rules.size(), 4); - // Ensures the full collection is parsed and ordering is preserved. - assertEquals(rules.first().get().getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - assertEquals(rules.get(3).getId(), "f7d45c89-008e-4bab-88ad-d6811724c51c"); - } finally { - server.shutdown(); - } - } - - public void testListPagedSecurityGroups() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged1.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged2.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - // Note: Lazy! Have to actually look at the collection. - List<SecurityGroup> securityGroups = api.listSecurityGroups().concat().toList(); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 4); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups"); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718"); - - /* - * Check response - */ - assertNotNull(securityGroups); - assertEquals(securityGroups.size(), 4); - // Ensures ordering is preserved and both pages are parsed. - assertEquals(securityGroups.get(0).getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(securityGroups.get(3).getId(), "85cc3048-abc3-43cc-89b3-377341426ac524"); - - } finally { - server.shutdown(); - } - } - - public void testListPagedSecurityGroupRules() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged1.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged2.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - // Note: Lazy! Have to actually look at the collection. - List<Rule> rules = api.listRules().concat().toList(); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 4); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules"); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718"); - - /* - * Check response - */ - assertNotNull(rules); - assertEquals(rules.size(), 8); - // Ensures both pages are tested and ordering is preserved. - assertEquals(rules.get(0).getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - assertEquals(rules.get(7).getId(), "f7d45c89-008e-4bab-88ad-d6811724c51c2"); - - } finally { - server.shutdown(); - } - } - - public void testGetSecurityGroup() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders( - new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_get_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - SecurityGroup securityGroup = api.getSecurityGroup("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups/12345"); - - /* - * Check response - */ - assertNotNull(securityGroup); - assertEquals(securityGroup.getName(), "default"); - assertEquals(securityGroup.getDescription(), "default"); - assertEquals(securityGroup.getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - assertEquals(securityGroup.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - Rule sgr = securityGroup.getRules().get(0); - assertEquals(sgr.getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - } finally { - server.shutdown(); - } - } - - public void testGetSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders( - new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_rule_get_response.json")))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - Rule rule = api.get("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules/12345"); - - /* - * Check response - */ - assertNotNull(rule); - assertEquals(rule.getDirection(), RuleDirection.EGRESS); - assertEquals(rule.getEthertype(), RuleEthertype.IPV6); - assertEquals(rule.getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); - assertEquals(rule.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); - assertEquals(rule.getSecurityGroupId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); - - } finally { - server.shutdown(); - } - } - - public void testDeleteSecurityGroup() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders( - new MockResponse().setResponseCode(201))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - boolean result = api.deleteSecurityGroup("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "DELETE", uriApiVersion + "/security-groups/12345"); - - /* - * Check response - */ - assertTrue(result); - } finally { - server.shutdown(); - } - } - - public void testDeleteSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { - MockWebServer server = mockOpenStackServer(); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); - server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json")))); - server.enqueue(addCommonHeaders( - new MockResponse().setResponseCode(201))); - - try { - NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); - SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne").get(); - - boolean result = api.deleteRule("12345"); - - /* - * Check request - */ - assertEquals(server.getRequestCount(), 3); - assertAuthentication(server); - assertExtensions(server, uriApiVersion + ""); - assertRequest(server.takeRequest(), "DELETE", uriApiVersion + "/security-group-rules/12345"); - - /* - * Check response - */ - assertTrue(result); - } finally { - server.shutdown(); - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java new file mode 100644 index 0000000..2cb30fc --- /dev/null +++ b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiLiveTest.java @@ -0,0 +1,103 @@ +/* + * 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.jclouds.openstack.neutron.v2.features; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import org.jclouds.openstack.neutron.v2.domain.Rule; +import org.jclouds.openstack.neutron.v2.domain.RuleDirection; +import org.jclouds.openstack.neutron.v2.domain.RuleEthertype; +import org.jclouds.openstack.neutron.v2.domain.RuleProtocol; +import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; +import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest; +import org.testng.annotations.Test; + +/** + * Tests parsing and Guice wiring of RouterApi + */ +@Test(groups = "live", testName = "SecurityGroupApiLiveTest") +public class SecurityGroupApiLiveTest extends BaseNeutronApiLiveTest { + + /** + * Smoke test for the Security Group extension for Neutron + */ + public void testCreateUpdateAndDeleteSecurityGroup() { + for (String region : api.getConfiguredRegions()) { + SecurityGroupApi sgApi = null; + Rule rule = null; + SecurityGroup securityGroup = null; + + try { + sgApi = api.getSecurityGroupApi(region); + + securityGroup = sgApi.create( + SecurityGroup.createBuilder().name("jclouds-test").description("jclouds test security group") + .build()); + assertNotNull(securityGroup); + + rule = sgApi.create( + Rule.createBuilder(RuleDirection.INGRESS, securityGroup.getId()) + .ethertype(RuleEthertype.IPV6) + .portRangeMax(90) + .portRangeMin(80) + .protocol(RuleProtocol.TCP) + .build()); + + assertNotNull(rule); + + // Refresh + securityGroup = sgApi.getSecurityGroup(securityGroup.getId()); + + assertEquals(securityGroup.getName(), "jclouds-test"); + assertEquals(securityGroup.getDescription(), "jclouds test security group"); + + assertEquals(securityGroup.getRules().size(), 1); + + Rule newSecGroupRule = null; + + for (Rule sgr : securityGroup.getRules()) { + if (sgr.getId().equals(rule.getId())) { + newSecGroupRule = sgr; + break; + } + } + assertNotNull(newSecGroupRule, "Did not find the new rule in the group."); + + assertEquals(rule, newSecGroupRule); + + assertEquals(rule.getEthertype(), RuleEthertype.IPV6); + assertEquals(rule.getProtocol(), RuleProtocol.TCP); + assertEquals(rule.getPortRangeMax().intValue(), 90); + assertEquals(rule.getPortRangeMin().intValue(), 80); + assertEquals(rule.getDirection(), RuleDirection.INGRESS); + } finally { + if (sgApi != null) { + try { + if (rule != null) { + assertTrue(sgApi.deleteRule(rule.getId())); + } + } finally { + assertTrue(sgApi.deleteSecurityGroup(securityGroup.getId())); + } + } + } + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java ---------------------------------------------------------------------- diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java new file mode 100644 index 0000000..39bb8c5 --- /dev/null +++ b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApiMockTest.java @@ -0,0 +1,394 @@ +/* + * 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.jclouds.openstack.neutron.v2.features; + +import static com.google.common.collect.Iterables.size; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; + +import org.jclouds.openstack.neutron.v2.NeutronApi; +import org.jclouds.openstack.neutron.v2.domain.Rule; +import org.jclouds.openstack.neutron.v2.domain.RuleDirection; +import org.jclouds.openstack.neutron.v2.domain.RuleEthertype; +import org.jclouds.openstack.neutron.v2.domain.RuleProtocol; +import org.jclouds.openstack.neutron.v2.domain.Rules; +import org.jclouds.openstack.neutron.v2.domain.SecurityGroup; +import org.jclouds.openstack.neutron.v2.domain.SecurityGroups; +import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest; +import org.jclouds.openstack.v2_0.options.PaginationOptions; +import org.testng.annotations.Test; + +import com.squareup.okhttp.mockwebserver.MockResponse; +import com.squareup.okhttp.mockwebserver.MockWebServer; + +/** + * Tests SecurityGroupApi Guice wiring and parsing + * + */ +@Test +public class SecurityGroupApiMockTest extends BaseNeutronApiMockTest { + + public void testCreateSecurityGroup() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders( + new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_create_response.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + SecurityGroup.CreateSecurityGroup createSecurityGroup = SecurityGroup.createBuilder().name("new-webservers") + .description("security group for webservers") + .build(); + + SecurityGroup securityGroup = api.create(createSecurityGroup); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "POST", uriApiVersion + "/security-groups", "/security_group_create_request.json"); + + /* + * Check response + */ + assertNotNull(securityGroup); + assertEquals(securityGroup.getId(), "2076db17-a522-4506-91de-c6dd8e837028"); + assertEquals(securityGroup.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); + assertEquals(securityGroup.getName(), "new-webservers"); + assertEquals(securityGroup.getDescription(), "security group for webservers"); + + Rule sgr0 = securityGroup.getRules().get(0); + Rule sgr1 = securityGroup.getRules().get(1); + + assertEquals(sgr0.getId(), "38ce2d8e-e8f1-48bd-83c2-d33cb9f50c3d"); + assertEquals(sgr1.getId(), "565b9502-12de-4ffd-91e9-68885cff6ae1"); + } finally { + server.shutdown(); + } + } + + public void testCreateSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders( + new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_rule_create_response.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + Rule.CreateRule createSecurityGroupRule = Rule.createBuilder( + RuleDirection.INGRESS, "a7734e61-b545-452d-a3cd-0189cbd9747a") + .portRangeMin(80) + .portRangeMax(80) + .ethertype(RuleEthertype.IPV4) + .protocol(RuleProtocol.TCP) + .remoteGroupId("85cc3048-abc3-43cc-89b3-377341426ac5") + .build(); + + Rule rule = api.create(createSecurityGroupRule); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "POST", uriApiVersion + "/security-group-rules", "/security_group_rule_create_request.json"); + + /* + * Check response + */ + assertNotNull(rule); + assertEquals(rule.getId(), "2bc0accf-312e-429a-956e-e4407625eb62"); + assertEquals(rule.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); + assertEquals(rule.getDirection(), RuleDirection.INGRESS); + assertEquals(rule.getPortRangeMax().intValue(), 80); + assertEquals(rule.getPortRangeMin().intValue(), 80); + assertEquals(rule.getEthertype(), RuleEthertype.IPV4); + assertEquals(rule.getProtocol(), RuleProtocol.TCP); + assertEquals(rule.getRemoteGroupId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); + assertEquals(rule.getSecurityGroupId(), "a7734e61-b545-452d-a3cd-0189cbd9747a"); + + } finally { + server.shutdown(); + } + } + + public void testListSpecificPageSecurityGroup() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged1.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + SecurityGroups securityGroups = api.listSecurityGroups(PaginationOptions.Builder.limit(2).marker("abcdefg")); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups?limit=2&marker=abcdefg"); + + /* + * Check response + */ + assertNotNull(securityGroups); + assertEquals(size(securityGroups), 2); + // Ensures the full collection is parsed and ordering is preserved. + assertEquals(securityGroups.first().get().getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); + assertEquals(securityGroups.get(1).getId(), "85cc3048-abc3-43cc-89b3-377341426ac52"); + } finally { + server.shutdown(); + } + } + + public void testListSpecificPageSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged1.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + Rules rules = api.listRules(PaginationOptions.Builder.limit(2).marker("abcdefg")); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules?limit=2&marker=abcdefg"); + + /* + * Check response + */ + assertNotNull(rules); + assertEquals(rules.size(), 4); + // Ensures the full collection is parsed and ordering is preserved. + assertEquals(rules.first().get().getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); + assertEquals(rules.get(3).getId(), "f7d45c89-008e-4bab-88ad-d6811724c51c"); + } finally { + server.shutdown(); + } + } + + public void testListPagedSecurityGroups() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged1.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_list_response_paged2.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + // Note: Lazy! Have to actually look at the collection. + List<SecurityGroup> securityGroups = api.listSecurityGroups().concat().toList(); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 3); + assertAuthentication(server); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups"); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718"); + + /* + * Check response + */ + assertNotNull(securityGroups); + assertEquals(securityGroups.size(), 4); + // Ensures ordering is preserved and both pages are parsed. + assertEquals(securityGroups.get(0).getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); + assertEquals(securityGroups.get(3).getId(), "85cc3048-abc3-43cc-89b3-377341426ac524"); + + } finally { + server.shutdown(); + } + } + + public void testListPagedSecurityGroupRules() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged1.json")))); + server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource("/security_group_rule_list_response_paged2.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + // Note: Lazy! Have to actually look at the collection. + List<Rule> rules = api.listRules().concat().toList(); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 3); + assertAuthentication(server); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules"); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718"); + + /* + * Check response + */ + assertNotNull(rules); + assertEquals(rules.size(), 8); + // Ensures both pages are tested and ordering is preserved. + assertEquals(rules.get(0).getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); + assertEquals(rules.get(7).getId(), "f7d45c89-008e-4bab-88ad-d6811724c51c2"); + + } finally { + server.shutdown(); + } + } + + public void testGetSecurityGroup() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders( + new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_get_response.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + SecurityGroup securityGroup = api.getSecurityGroup("12345"); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-groups/12345"); + + /* + * Check response + */ + assertNotNull(securityGroup); + assertEquals(securityGroup.getName(), "default"); + assertEquals(securityGroup.getDescription(), "default"); + assertEquals(securityGroup.getId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); + assertEquals(securityGroup.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); + Rule sgr = securityGroup.getRules().get(0); + assertEquals(sgr.getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); + } finally { + server.shutdown(); + } + } + + public void testGetSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders( + new MockResponse().setResponseCode(201).setBody(stringFromResource("/security_group_rule_get_response.json")))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + Rule rule = api.get("12345"); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "GET", uriApiVersion + "/security-group-rules/12345"); + + /* + * Check response + */ + assertNotNull(rule); + assertEquals(rule.getDirection(), RuleDirection.EGRESS); + assertEquals(rule.getEthertype(), RuleEthertype.IPV6); + assertEquals(rule.getId(), "3c0e45ff-adaf-4124-b083-bf390e5482ff"); + assertEquals(rule.getTenantId(), "e4f50856753b4dc6afee5fa6b9b6c550"); + assertEquals(rule.getSecurityGroupId(), "85cc3048-abc3-43cc-89b3-377341426ac5"); + + } finally { + server.shutdown(); + } + } + + public void testDeleteSecurityGroup() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders( + new MockResponse().setResponseCode(201))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + boolean result = api.deleteSecurityGroup("12345"); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "DELETE", uriApiVersion + "/security-groups/12345"); + + /* + * Check response + */ + assertTrue(result); + } finally { + server.shutdown(); + } + } + + public void testDeleteSecurityGroupRule() throws IOException, InterruptedException, URISyntaxException { + MockWebServer server = mockOpenStackServer(); + server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); + server.enqueue(addCommonHeaders( + new MockResponse().setResponseCode(201))); + + try { + NeutronApi neutronApi = api(server.getUrl("/").toString(), "openstack-neutron", overrides); + SecurityGroupApi api = neutronApi.getSecurityGroupApi("RegionOne"); + + boolean result = api.deleteRule("12345"); + + /* + * Check request + */ + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + assertRequest(server.takeRequest(), "DELETE", uriApiVersion + "/security-group-rules/12345"); + + /* + * Check response + */ + assertTrue(result); + } finally { + server.shutdown(); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/660f10fb/rackspace-cloudnetworks-us/src/test/java/org/jclouds/rackspace/cloudnetworks/us/CloudNetworksUSSecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/rackspace-cloudnetworks-us/src/test/java/org/jclouds/rackspace/cloudnetworks/us/CloudNetworksUSSecurityGroupApiLiveTest.java b/rackspace-cloudnetworks-us/src/test/java/org/jclouds/rackspace/cloudnetworks/us/CloudNetworksUSSecurityGroupApiLiveTest.java index b53de9c..dee11f3 100644 --- a/rackspace-cloudnetworks-us/src/test/java/org/jclouds/rackspace/cloudnetworks/us/CloudNetworksUSSecurityGroupApiLiveTest.java +++ b/rackspace-cloudnetworks-us/src/test/java/org/jclouds/rackspace/cloudnetworks/us/CloudNetworksUSSecurityGroupApiLiveTest.java @@ -16,7 +16,7 @@ */ package org.jclouds.rackspace.cloudnetworks.us; -import org.jclouds.openstack.neutron.v2.extensions.SecurityGroupApiLiveTest; +import org.jclouds.openstack.neutron.v2.features.SecurityGroupApiLiveTest; import org.testng.annotations.Test; @Test(groups = "live", testName = "CloudNetworksUSSecurityGroupApiLiveTest", singleThreaded = true)
