You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2017/12/12 08:52:56 UTC
jclouds-labs-openstack git commit: [Openstack-Neutron] move
SecurityGroupApi from extensions to features
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 <an...@gmail.com>
Authored: Tue Nov 21 12:34:12 2017 +0100
Committer: andreaturli <an...@gmail.com>
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)