http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiLiveTest.java
 
b/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiLiveTest.java
new file mode 100644
index 0000000..62f09fb
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiLiveTest.java
@@ -0,0 +1,199 @@
+/*
+ * 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.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import org.jclouds.openstack.neutron.v2.domain.CreateFirewall;
+import org.jclouds.openstack.neutron.v2.domain.CreateFirewallPolicy;
+import org.jclouds.openstack.neutron.v2.domain.CreateFirewallRule;
+import org.jclouds.openstack.neutron.v2.domain.Firewall;
+import org.jclouds.openstack.neutron.v2.domain.FirewallPolicy;
+import org.jclouds.openstack.neutron.v2.domain.FirewallRule;
+import org.jclouds.openstack.neutron.v2.domain.UpdateFirewall;
+import org.jclouds.openstack.neutron.v2.domain.UpdateFirewallPolicy;
+import org.jclouds.openstack.neutron.v2.domain.UpdateFirewallRule;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiLiveTest;
+import org.jclouds.openstack.v2_0.options.PaginationOptions;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
+/**
+ * Tests parsing and Guice wiring of FWaaSApi
+ */
+@Test(groups = "live", testName = "FWaaSApiLiveTest")
+public class FWaaSApiLiveTest extends BaseNeutronApiLiveTest {
+
+   private FWaaSApi fWaaSApi;
+
+   @BeforeMethod
+   void setUp() {
+      Optional<String> optionalRegion = 
Iterables.tryFind(api.getConfiguredRegions(), Predicates.notNull());
+      if (!optionalRegion.isPresent()) Assert.fail();
+      fWaaSApi = api.getFWaaSApi(optionalRegion.get()).get();
+   }
+   /**
+    * Smoke test for the Firewall extension for Neutron
+    */
+   public void testCreateUpdateAndDeleteFirewallRule() {
+
+      String inboundPort = "22";
+      FirewallRule firewallRule = null;
+
+      try {
+         // methods under test
+         firewallRule = 
fWaaSApi.createFirewallRule(CreateFirewallRule.builder()
+                 .name(String.format("jclouds-test-%s-fw-rule-%s", 
this.getClass().getCanonicalName().toLowerCase(), inboundPort))
+                 .description("jclouds test fw rule")
+                 .destinationIpAddress("192.168.0.1")
+                 .destinationPort(inboundPort)
+                 .enabled(true)
+                 .action("allow")
+                 .protocol("tcp")
+                 .build());
+
+         assertFalse(fWaaSApi.listFirewallRules().concat().toList().isEmpty());
+         
assertNotNull(fWaaSApi.listFirewallRules(PaginationOptions.Builder.limit(1)));
+
+         // get
+         firewallRule = fWaaSApi.getFirewallRule(firewallRule.getId());
+         assertEquals(firewallRule.getName(), 
String.format("jclouds-test-%s-fw-rule-%s", 
this.getClass().getCanonicalName().toLowerCase(), inboundPort));
+         assertEquals(firewallRule.getDescription(), "jclouds test fw rule");
+
+         // update
+         FirewallRule updatedFirewallRule = 
fWaaSApi.updateFirewallRule(firewallRule.getId(), 
UpdateFirewallRule.builder().name(firewallRule.getName() + "-updated").build());
+         firewallRule = fWaaSApi.getFirewallRule(firewallRule.getId());
+         assertEquals(updatedFirewallRule, firewallRule);
+      } finally {
+         // delete
+         if (fWaaSApi != null) {
+            assertTrue(fWaaSApi.deleteFirewallRule(firewallRule.getId()));
+         }
+      }
+   }
+
+   public void testCreateUpdateAndDeleteFirewallPolicy() {
+
+      String inboundPort = "80";
+      FirewallRule firewallRule = 
fWaaSApi.createFirewallRule(CreateFirewallRule.builder()
+              .name(String.format("jclouds-test-%s-fw-rule-%s", 
this.getClass().getCanonicalName().toLowerCase(), inboundPort))
+              .description("jclouds test fw rule")
+              .destinationIpAddress("192.168.0.1")
+              .destinationPort(inboundPort)
+              .enabled(true)
+              .action("allow")
+              .protocol("tcp")
+              .build());
+      FirewallPolicy firewallPolicy = null;
+
+      try {
+         // methods under test
+         firewallPolicy = 
fWaaSApi.createFirewallPolicy(CreateFirewallPolicy.builder()
+                 .name(String.format("jclouds-test-%s-fw-policy", 
this.getClass().getCanonicalName().toLowerCase()))
+                 .description("jclouds test fw policy")
+                 .build());
+
+         
assertFalse(fWaaSApi.listFirewallPolicies().concat().toList().isEmpty());
+         
assertNotNull(fWaaSApi.listFirewallPolicies(PaginationOptions.Builder.limit(1)));
+
+         // get
+         firewallPolicy = fWaaSApi.getFirewallPolicy(firewallPolicy.getId());
+         assertEquals(firewallPolicy.getName(), 
String.format("jclouds-test-%s-fw-policy", 
this.getClass().getCanonicalName().toLowerCase()));
+         assertEquals(firewallPolicy.getDescription(), "jclouds test fw 
policy");
+
+         // update
+         FirewallPolicy updatedFirewallPolicy = 
fWaaSApi.updateFirewallPolicy(firewallPolicy.getId(), 
UpdateFirewallPolicy.builder()
+                 .name(String.format("jclouds-test-%s-fw-policy-update", 
this.getClass().getCanonicalName().toLowerCase())).build());
+         firewallPolicy = fWaaSApi.getFirewallPolicy(firewallPolicy.getId());
+         assertEquals(updatedFirewallPolicy, firewallPolicy);
+
+         firewallPolicy = 
fWaaSApi.insertFirewallRuleToPolicy(firewallPolicy.getId(), 
firewallRule.getId());
+         assertNotNull(firewallPolicy);
+         assertFalse(firewallPolicy.getFirewallRules().isEmpty());
+
+         firewallPolicy = 
fWaaSApi.removeFirewallRuleFromPolicy(firewallPolicy.getId(), 
firewallRule.getId());
+         assertNotNull(firewallPolicy);
+         assertTrue(firewallPolicy.getFirewallRules().isEmpty());
+      } finally {
+         // delete
+         if (fWaaSApi != null) {
+            try {
+               if (firewallPolicy != null) {
+                  
assertTrue(fWaaSApi.deleteFirewallPolicy(firewallPolicy.getId()));
+               }
+            } finally {
+               assertTrue(fWaaSApi.deleteFirewallRule(firewallRule.getId()));
+            }
+         }
+      }
+   }
+
+   public void testCreateUpdateAndDeleteFirewall() {
+
+      FirewallPolicy firewallPolicy = 
fWaaSApi.createFirewallPolicy(CreateFirewallPolicy.builder()
+              .name(String.format("jclouds-test-%s-fw-policy", 
this.getClass().getCanonicalName().toLowerCase()))
+              .description("jclouds test fw policy")
+              .build());
+
+      Firewall firewall = null;
+
+      try {
+         // methods under test
+         firewall = 
fWaaSApi.create(CreateFirewall.builder().name(String.format("jclouds-test-%s-fw",
 this.getClass().getCanonicalName().toLowerCase()))
+                 .description("jclouds test firewall")
+                 .firewallPolicyId(firewallPolicy.getId())
+                 .build());
+
+         assertFalse(fWaaSApi.list().concat().toList().isEmpty());
+         assertNotNull(fWaaSApi.list(PaginationOptions.Builder.limit(1)));
+
+         // get
+         firewall = fWaaSApi.get(firewall.getId());
+         assertEquals(firewall.getName(), String.format("jclouds-test-%s-fw", 
this.getClass().getCanonicalName().toLowerCase()));
+         assertEquals(firewall.getDescription(), "jclouds test firewall");
+
+         // update
+         Firewall updatedFirewall = fWaaSApi.update(firewall.getId(), 
UpdateFirewall.builder().name(String.format("jclouds-test-%s-fw_updated", 
this.getClass()
+                 .getCanonicalName().toLowerCase())).build());
+         firewall = fWaaSApi.get(firewall.getId());
+         assertEquals(updatedFirewall, firewall);
+
+      } finally {
+         // delete
+         if (fWaaSApi != null) {
+            try {
+               if (firewallPolicy != null) {
+                  
assertTrue(fWaaSApi.deleteFirewallPolicy(firewallPolicy.getId()));
+               }
+         } finally {
+            if (firewall != null) {
+               assertTrue(fWaaSApi.delete(firewall.getId()));
+            }         }
+         }
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiMockTest.java
 
b/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiMockTest.java
new file mode 100644
index 0000000..fe7a879
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApiMockTest.java
@@ -0,0 +1,984 @@
+/*
+ * 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.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+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.CreateFirewall;
+import org.jclouds.openstack.neutron.v2.domain.CreateFirewallPolicy;
+import org.jclouds.openstack.neutron.v2.domain.CreateFirewallRule;
+import org.jclouds.openstack.neutron.v2.domain.Firewall;
+import org.jclouds.openstack.neutron.v2.domain.FirewallPolicy;
+import org.jclouds.openstack.neutron.v2.domain.FirewallRule;
+import org.jclouds.openstack.neutron.v2.domain.FloatingIP;
+import org.jclouds.openstack.neutron.v2.domain.FloatingIPs;
+import org.jclouds.openstack.neutron.v2.domain.UpdateFirewall;
+import org.jclouds.openstack.neutron.v2.domain.UpdateFirewallPolicy;
+import org.jclouds.openstack.neutron.v2.domain.UpdateFirewallRule;
+import org.jclouds.openstack.neutron.v2.internal.BaseNeutronApiMockTest;
+import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
+import org.jclouds.openstack.v2_0.options.PaginationOptions;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+
+/**
+ * Tests Floating Api Guice wiring and parsing
+ *
+ */
+@Test
+public class FWaaSApiMockTest extends BaseNeutronApiMockTest {
+
+   public void testCreateFirewall() 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("/firewall_create_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         CreateFirewall firewallRequest = CreateFirewall.builder()
+                 .firewallPolicyId("c69933c1-b472-44f9-8226-30dc4ffd454c")
+                 .adminStateUp(Boolean.TRUE)
+                 .build();
+
+         Firewall firewall = api.create(firewallRequest);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "POST", uriApiVersion + 
"/fw/firewalls", "/firewall_create_request.json");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewall);
+         assertEquals(firewall.getName(), "");
+         assertEquals(firewall.getTenantId(), 
"45977fa2dbd7482098dd68d0d8970117");
+         assertEquals(firewall.getDescription(), "");
+         assertEquals(firewall.getId(), 
"3b0ef8f4-82c7-44d4-a4fb-6177f9a21977");
+         assertEquals(firewall.getStatus(), "PENDING_CREATE");
+         assertTrue(firewall.isAdminStateUp());
+         assertEquals(firewall.getFirewallPolicyId(), 
"c69933c1-b472-44f9-8226-30dc4ffd454c");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   @Test(expectedExceptions = ResourceNotFoundException.class)
+   public void testCreateFirewallFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         CreateFirewall firewallRequest = CreateFirewall.builder()
+                 .firewallPolicyId("c69933c1-b472-44f9-8226-30dc4ffd454c")
+                 .adminStateUp(Boolean.TRUE)
+                 .build();
+
+         Firewall firewall = api.create(firewallRequest);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testListSpecificPageFirewall() 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("/firewall_list_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         PaginatedCollection<Firewall> firewalls = 
api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewalls?limit=2&marker=abcdefg");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewalls);
+         assertEquals(firewalls.size(), 1);
+         assertEquals(Iterables.getFirst(firewalls, null).getId(), 
"5eb708e7-3856-449a-99ac-fec27cd745f9");
+         assertEquals(firewalls.get(0).getId(), 
"5eb708e7-3856-449a-99ac-fec27cd745f9");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testListSpecificPageFirewallFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FloatingIPApi api = neutronApi.getFloatingIPApi("RegionOne").get();
+
+         FloatingIPs floatingIPs = 
api.list(PaginationOptions.Builder.limit(2).marker("abcdefg"));
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/floatingips?limit=2&marker=abcdefg");
+
+         /*
+          * Check response
+          */
+         assertNotNull(floatingIPs);
+         assertTrue(floatingIPs.isEmpty());
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testListPagedFirewall() 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("/floatingip_list_response_paged1.json"))));
+      server.enqueue(addCommonHeaders(new 
MockResponse().setResponseCode(200).setBody(stringFromResource("/floatingip_list_response_paged2.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FloatingIPApi api = neutronApi.getFloatingIPApi("RegionOne").get();
+
+         // Note: Lazy! Have to actually look at the collection.
+         List<FloatingIP> floatingIPs = api.list().concat().toList();
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 4);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/floatingips");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/floatingips?marker=71c1e68c-171a-4aa2-aca5-50ea153a3718");
+
+         /*
+          * Check response
+          */
+         assertNotNull(floatingIPs);
+         assertEquals(floatingIPs.size(), 4);
+         assertEquals(floatingIPs.get(0).getId(), 
"2f245a7b-796b-4f26-9cf9-9e82d248fda7");
+         assertEquals(floatingIPs.get(3).getId(), 
"61cea855-49cb-4846-997d-801b70c71bdd2");
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testListPagedFirewallFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FloatingIPApi api = neutronApi.getFloatingIPApi("RegionOne").get();
+
+         // Note: Lazy! Have to actually look at the collection.
+         List<FloatingIP> floatingIPs = api.list().concat().toList();
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/floatingips");
+
+         /*
+          * Check response
+          */
+         assertNotNull(floatingIPs);
+         assertTrue(floatingIPs.isEmpty());
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetFirewall() 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("/firewall_get_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         Firewall firewall = api.get("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewalls/12345");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewall);
+         assertEquals(firewall.getId(), 
"3b0ef8f4-82c7-44d4-a4fb-6177f9a21977");
+         assertEquals(firewall.getTenantId(), 
"45977fa2dbd7482098dd68d0d8970117");
+         assertEquals(firewall.getDescription(), "");
+         assertEquals(firewall.getName(), "");
+         assertEquals(firewall.getStatus(), "ACTIVE");
+         assertEquals(firewall.getFirewallPolicyId(), 
"c69933c1-b472-44f9-8226-30dc4ffd454c");
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetFirewallFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         Firewall firewall = api.get("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewalls/12345");
+
+         /*
+          * Check response
+          */
+         assertNull(firewall);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testUpdateFirewall() 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("/firewall_update_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         UpdateFirewall updateFirewall = UpdateFirewall.builder()
+               .adminStateUp(false)
+               .build();
+
+         Firewall firewall = api.update("12345", updateFirewall);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewalls/12345", "/firewall_update_request.json");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewall);
+         assertFalse(firewall.isAdminStateUp());
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testUpdateFirewallFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         UpdateFirewall updateFirewall = UpdateFirewall.builder()
+                 .adminStateUp(false)
+                 .build();
+
+         Firewall firewall = api.update("12345", updateFirewall);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewalls/12345", "/firewall_update_request.json");
+
+         /*
+          * Check response
+          */
+         assertNull(firewall);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteFirewall() 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);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         boolean result = api.delete("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "DELETE", uriApiVersion + 
"/fw/firewalls/12345");
+
+         /*
+          * Check response
+          */
+         assertTrue(result);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteFirewallFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         boolean result = api.delete("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "DELETE", uriApiVersion + 
"/fw/firewalls/12345");
+
+         /*
+          * Check response
+          */
+         assertFalse(result);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testCreateFirewallPolicy() 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("/firewall_policy_create_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         CreateFirewallPolicy firewallPolicyRequest = 
CreateFirewallPolicy.builder()
+                 .name("jclouds-fw-policy_group-52-e8b")
+                 .build();
+
+         FirewallPolicy firewallPolicy = 
api.createFirewallPolicy(firewallPolicyRequest);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "POST", uriApiVersion + 
"/fw/firewall_policies", "/firewall_policy_create_request.json");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewallPolicy);
+         assertEquals(firewallPolicy.getName(), 
"jclouds-fw-policy_group-52-e8b");
+         assertEquals(firewallPolicy.getTenantId(), 
"3e00d5716204446c8d3c47a466eec25a");
+         assertEquals(firewallPolicy.getDescription(), "");
+         assertEquals(firewallPolicy.getId(), 
"12971159-95cf-4ca1-9baa-c82298ae0918");
+         assertEquals(firewallPolicy.isShared(), false);
+         assertEquals(firewallPolicy.getFirewallRules(), ImmutableList.of());
+         assertEquals(firewallPolicy.isAudited(), false);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   @Test(expectedExceptions = ResourceNotFoundException.class)
+   public void testCreateFirewallPolicyFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         CreateFirewallPolicy firewallPolicyRequest = 
CreateFirewallPolicy.builder()
+                 .name("jclouds-fw-policy_group-52-e8b")
+                 .build();
+
+         FirewallPolicy firewallPolicy = 
api.createFirewallPolicy(firewallPolicyRequest);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetFirewallPolicy() 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("/firewall_policy_get_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         FirewallPolicy firewallPolicy = api.getFirewallPolicy("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewall_policies/12345");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewallPolicy);
+         assertEquals(firewallPolicy.getId(), 
"18d2f4e5-afdd-4c10-87ea-d35f38faf98c");
+         assertEquals(firewallPolicy.getTenantId(), 
"e1defcdd823741c89afd5824040deed2");
+         assertEquals(firewallPolicy.getDescription(), "");
+         assertEquals(firewallPolicy.getName(), "myfirewallrule");
+         assertEquals(firewallPolicy.isAudited(), false);
+         assertEquals(firewallPolicy.isShared(), true);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetFirewallPolicyFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         FirewallPolicy firewallPolicy = api.getFirewallPolicy("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewall_policies/12345");
+
+         /*
+          * Check response
+          */
+         assertNull(firewallPolicy);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testUpdateFirewallPolicy() 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("/firewall_policy_get_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         UpdateFirewallPolicy updateFirewallPolicy = 
UpdateFirewallPolicy.builder()
+                 .shared(true)
+                 .build();
+
+         FirewallPolicy firewallPolicy = api.updateFirewallPolicy("12345", 
updateFirewallPolicy);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewall_policies/12345");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewallPolicy);
+         assertEquals(firewallPolicy.getId(), 
"18d2f4e5-afdd-4c10-87ea-d35f38faf98c");
+         assertEquals(firewallPolicy.getTenantId(), 
"e1defcdd823741c89afd5824040deed2");
+         assertEquals(firewallPolicy.getDescription(), "");
+         assertEquals(firewallPolicy.getName(), "myfirewallrule");
+         assertEquals(firewallPolicy.isAudited(), false);
+         assertEquals(firewallPolicy.isShared(), true);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testUpdateFirewallPolicyFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         UpdateFirewallPolicy updateFirewallPolicy = 
UpdateFirewallPolicy.builder()
+                 .shared(true)
+                 .build();
+
+         FirewallPolicy firewallPolicy = api.updateFirewallPolicy("12345", 
updateFirewallPolicy);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewall_policies/12345");
+
+         /*
+          * Check response
+          */
+         assertNull(firewallPolicy);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testInsertFirewallRuleIntoFirewallPolicy() 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("/firewall_policy_insert_rule_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         FirewallPolicy updatedFirewallPolicy = 
api.insertFirewallRuleToPolicy("12345", "59585143-e819-48c9-944d-f03e0f049dba");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewall_policies/12345/insert_rule", 
"/firewall_policy_insert_rule_request.json");
+
+         /*
+          * Check response
+          */
+         assertNotNull(updatedFirewallPolicy);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testInsertFirewallRuleIntoFirewallPolicyFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         FirewallPolicy updatedFirewallPolicy = 
api.insertFirewallRuleToPolicy("12345", "59585143-e819-48c9-944d-f03e0f049dba");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewall_policies/12345/insert_rule", 
"/firewall_policy_insert_rule_request.json");
+
+         /*
+          * Check response
+          */
+         assertNull(updatedFirewallPolicy);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testCreateFirewallRule() 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("/firewall_rule_create_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         CreateFirewallRule firewallRuleRequest = CreateFirewallRule.builder()
+                 .name("jclouds-fw-rule_group-52-e8b_port-22")
+                 .tenantId("3e00d5716204446c8d3c47a466eec25a")
+                 .protocol("tcp")
+                 .destinationIpAddress("192.168.0.117")
+                 .destinationPort("22")
+                 .action("allow")
+                 .shared(false)
+                 .enabled(true)
+                 .build();
+
+         FirewallRule firewallRule = 
api.createFirewallRule(firewallRuleRequest);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "POST", uriApiVersion + 
"/fw/firewall_rules", "/firewall_rule_create_request.json");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewallRule);
+         assertEquals(firewallRule.getName(), 
"jclouds-fw-rule_group-52-e8b_port-22");
+         assertEquals(firewallRule.getTenantId(), 
"3e00d5716204446c8d3c47a466eec25a");
+         assertEquals(firewallRule.getDescription(), "");
+         assertEquals(firewallRule.getId(), 
"59585143-e819-48c9-944d-f03e0f049dba");
+         assertEquals(firewallRule.isShared(), false);
+         assertEquals(firewallRule.isEnabled(), true);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   @Test(expectedExceptions = ResourceNotFoundException.class)
+   public void testCreateFirewallRuleFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         CreateFirewallRule firewallRuleRequest = CreateFirewallRule.builder()
+                 .name("jclouds-fw-rule_group-52-e8b_port-22")
+                 .build();
+
+         FirewallRule firewallRule = 
api.createFirewallRule(firewallRuleRequest);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetFirewallRule() 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("/firewall_rule_get_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         FirewallRule firewallRule = api.getFirewallRule("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewall_rules/12345");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewallRule);
+         assertEquals(firewallRule.getId(), 
"736b1686-3301-4a3d-9eaf-15e3c2682edc");
+         assertEquals(firewallRule.getTenantId(), 
"3e00d5716204446c8d3c47a466eec25a");
+         assertEquals(firewallRule.getDescription(), "jclouds test fw rule");
+         assertEquals(firewallRule.getName(), 
"jclouds-test-org.jclouds.openstack.neutron.v2.extensions.fwaasapilivetest-fw-rule-22");
+         assertEquals(firewallRule.getAction(), "allow");
+         assertEquals(firewallRule.isEnabled(), true);
+         assertEquals(firewallRule.getIpVersion().version(), 4);
+         assertEquals(firewallRule.isShared(), false);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testGetFirewallRuleFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         FirewallRule firewallRule = api.getFirewallRule("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "GET", uriApiVersion + 
"/fw/firewall_rules/12345");
+
+         /*
+          * Check response
+          */
+         assertNull(firewallRule);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testUpdateFirewallRule() 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("/firewall_rule_update_response.json"))));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         UpdateFirewallRule updateFirewallRule = UpdateFirewallRule.builder()
+                 .build();
+
+         FirewallRule firewallRule = api.updateFirewallRule("12345", 
updateFirewallRule);
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewall_rules/12345", "/firewall_rule_update_request.json");
+
+         /*
+          * Check response
+          */
+         assertNotNull(firewallRule);
+
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testUpdateFirewallRuleFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         UpdateFirewallRule updateFirewallRule = UpdateFirewallRule.builder()
+                 .build();
+
+         FirewallRule firewallRule = api.updateFirewallRule("12345", 
updateFirewallRule);
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "PUT", uriApiVersion + 
"/fw/firewall_rules/12345", "/firewall_rule_update_request.json");
+
+         /*
+          * Check response
+          */
+         assertNull(firewallRule);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteFirewallRule() 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);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         boolean result = api.deleteFirewallRule("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "DELETE", uriApiVersion + 
"/fw/firewall_rules/12345");
+
+         /*
+          * Check response
+          */
+         assertTrue(result);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+   public void testDeleteFirewallRuleFail() 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(404)));
+
+      try {
+         NeutronApi neutronApi = api(server.getUrl("/").toString(), 
"openstack-neutron", overrides);
+         FWaaSApi api = neutronApi.getFWaaSApi("RegionOne").get();
+
+         boolean result = api.deleteFirewallRule("12345");
+
+         /*
+          * Check request
+          */
+         assertEquals(server.getRequestCount(), 3);
+         assertAuthentication(server);
+         assertExtensions(server, uriApiVersion + "");
+         assertRequest(server.takeRequest(), "DELETE", uriApiVersion + 
"/fw/firewall_rules/12345");
+
+         /*
+          * Check response
+          */
+         assertFalse(result);
+      } finally {
+         server.shutdown();
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
 
b/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
index 38d36fb..e0b6e1c 100644
--- 
a/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
+++ 
b/apis/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2/features/ExtensionApiMockTest.java
@@ -61,7 +61,7 @@ public class ExtensionApiMockTest extends 
BaseNeutronApiMockTest {
           * Check response
           */
          assertNotNull(extensions);
-         assertEquals(extensions.size(), 17);
+         assertEquals(extensions.size(), 15);
       } finally {
          server.shutdown();
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/extension_list.json
----------------------------------------------------------------------
diff --git a/apis/openstack-neutron/src/test/resources/extension_list.json 
b/apis/openstack-neutron/src/test/resources/extension_list.json
index 9f85e1e..acdd36a 100644
--- a/apis/openstack-neutron/src/test/resources/extension_list.json
+++ b/apis/openstack-neutron/src/test/resources/extension_list.json
@@ -1,140 +1,124 @@
 {
-    "extensions": [
-        {
-            "updated": "2013-01-20T00:00:00-00:00",
-            "name": "Neutron Service Type Management",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/neutron/service-type/api/v1.0";,
-            "alias": "service-type",
-            "description": "API for retrieving service providers for Neutron 
advanced services"
-        },
-        {
-            "updated": "2012-10-05T10:00:00-00:00",
-            "name": "security-group",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/securitygroups/api/v2.0";,
-            "alias": "security-group",
-            "description": "The security groups extension."
-        },
-        {
-            "updated": "2013-02-07T10:00:00-00:00",
-            "name": "L3 Agent Scheduler",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/l3_agent_scheduler/api/v1.0";,
-            "alias": "l3_agent_scheduler",
-            "description": "Schedule routers among l3 agents"
-        },
-        {
-            "updated": "2013-02-07T10:00:00-00:00",
-            "name": "Loadbalancer Agent Scheduler",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/lbaas_agent_scheduler/api/v1.0";,
-            "alias": "lbaas_agent_scheduler",
-            "description": "Schedule pools among lbaas agents"
-        },
-        {
-            "updated": "2013-03-28T10:00:00-00:00",
-            "name": "Neutron L3 Configurable external gateway mode",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/neutron/ext-gw-mode/api/v1.0";,
-            "alias": "ext-gw-mode",
-            "description": "Extension of the router abstraction for specifying 
whether SNAT should occur on the external gateway"
-        },
-        {
-            "updated": "2014-02-03T10:00:00-00:00",
-            "name": "Port Binding",
-            "links": [],
-            "namespace": "http://docs.openstack.org/ext/binding/api/v1.0";,
-            "alias": "binding",
-            "description": "Expose port bindings of a virtual port to external 
application"
-        },
-        {
-            "updated": "2012-09-07T10:00:00-00:00",
-            "name": "Provider Network",
-            "links": [],
-            "namespace": "http://docs.openstack.org/ext/provider/api/v1.0";,
-            "alias": "provider",
-            "description": "Expose mapping of virtual networks to physical 
networks"
-        },
-        {
-            "updated": "2013-02-03T10:00:00-00:00",
-            "name": "agent",
-            "links": [],
-            "namespace": "http://docs.openstack.org/ext/agent/api/v2.0";,
-            "alias": "agent",
-            "description": "The agent management extension."
-        },
-        {
-            "updated": "2012-07-29T10:00:00-00:00",
-            "name": "Quota management support",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/network/ext/quotas-sets/api/v2.0";,
-            "alias": "quotas",
-            "description": "Expose functions for quotas management per tenant"
-        },
-        {
-            "updated": "2013-02-07T10:00:00-00:00",
-            "name": "DHCP Agent Scheduler",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/dhcp_agent_scheduler/api/v1.0";,
-            "alias": "dhcp_agent_scheduler",
-            "description": "Schedule networks among dhcp agents"
-        },
-        {
-            "updated": "2013-06-27T10:00:00-00:00",
-            "name": "Multi Provider Network",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/multi-provider/api/v1.0";,
-            "alias": "multi-provider",
-            "description": "Expose mapping of virtual networks to multiple 
physical networks"
-        },
-        {
-            "updated": "2013-01-14T10:00:00-00:00",
-            "name": "Neutron external network",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/neutron/external_net/api/v1.0";,
-            "alias": "external-net",
-            "description": "Adds external network attribute to network 
resource."
-        },
-        {
-            "updated": "2012-07-20T10:00:00-00:00",
-            "name": "Neutron L3 Router",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/neutron/router/api/v1.0";,
-            "alias": "router",
-            "description": "Router abstraction for basic L3 forwarding between 
L2 Neutron networks and access to external networks via a NAT gateway."
-        },
-        {
-            "updated": "2013-07-23T10:00:00-00:00",
-            "name": "Allowed Address Pairs",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/allowedaddresspairs/api/v2.0";,
-            "alias": "allowed-address-pairs",
-            "description": "Provides allowed address pairs"
-        },
-        {
-            "updated": "2013-03-17T12:00:00-00:00",
-            "name": "Neutron Extra DHCP opts",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/neutron/extra_dhcp_opt/api/v1.0";,
-            "alias": "extra_dhcp_opt",
-            "description": "Extra options configuration for DHCP. For example 
PXE boot options to DHCP clients can be specified (e.g. tftp-server, 
server-ip-address, bootfile-name)"
-        },
-        {
-            "updated": "2012-10-07T10:00:00-00:00",
-            "name": "LoadBalancing service",
-            "links": [],
-            "namespace": "http://wiki.openstack.org/neutron/LBaaS/API_1.0";,
-            "alias": "lbaas",
-            "description": "Extension for LoadBalancing service"
-        },
-        {
-            "updated": "2013-02-01T10:00:00-00:00",
-            "name": "Neutron Extra Route",
-            "links": [],
-            "namespace": 
"http://docs.openstack.org/ext/neutron/extraroutes/api/v1.0";,
-            "alias": "extraroute",
-            "description": "Extra routes configuration for L3 router"
-        }
-    ]
-}
+  "extensions": [
+    {
+      "updated": "2013-01-20T00:00:00-00:00",
+      "name": "Neutron Service Type Management",
+      "links": [],
+      "namespace": 
"http://docs.openstack.org/ext/neutron/service-type/api/v1.0";,
+      "alias": "service-type",
+      "description": "API for retrieving service providers for Neutron 
advanced services"
+    },
+    {
+      "updated": "2012-10-05T10:00:00-00:00",
+      "name": "security-group",
+      "links": [],
+      "namespace": "http://docs.openstack.org/ext/securitygroups/api/v2.0";,
+      "alias": "security-group",
+      "description": "The security groups extension."
+    },
+    {
+      "updated": "2013-02-07T10:00:00-00:00",
+      "name": "Loadbalancer Agent Scheduler",
+      "links": [],
+      "namespace": 
"http://docs.openstack.org/ext/lbaas_agent_scheduler/api/v1.0";,
+      "alias": "lbaas_agent_scheduler",
+      "description": "Schedule pools among lbaas agents"
+    },
+    {
+      "updated": "2013-02-25T10:00:00-00:00",
+      "name": "Firewall service",
+      "links": [],
+      "namespace": "http://wiki.openstack.org/Neutron/FWaaS/API_1.0";,
+      "alias": "fwaas",
+      "description": "Extension for Firewall service"
+    },
+    {
+      "updated": "2014-02-03T10:00:00-00:00",
+      "name": "Port Binding",
+      "links": [],
+      "namespace": "http://docs.openstack.org/ext/binding/api/v1.0";,
+      "alias": "binding",
+      "description": "Expose port bindings of a virtual port to external 
application"
+    },
+    {
+      "updated": "2012-07-29T10:00:00-00:00",
+      "name": "Quota management support",
+      "links": [],
+      "namespace": 
"http://docs.openstack.org/network/ext/quotas-sets/api/v2.0";,
+      "alias": "quotas",
+      "description": "Expose functions for quotas management per tenant"
+    },
+    {
+      "updated": "2014-01-01T10:00:00-00:00",
+      "name": "Nuage security-group",
+      "links": [],
+      "namespace": "http://nuagenetworks.net/ext/secgroup/api/v1.0";,
+      "alias": "nuage-security-group",
+      "description": "Nuage security-group"
+    },
+    {
+      "updated": "2014-01-01T10:00:00-00:00",
+      "name": "Nuage router",
+      "links": [],
+      "namespace": "http://nuagenetworks.net/ext/routers/api/v1.0";,
+      "alias": "nuage-router",
+      "description": "Nuage Router"
+    },
+    {
+      "updated": "2013-01-14T10:00:00-00:00",
+      "name": "Neutron external network",
+      "links": [],
+      "namespace": 
"http://docs.openstack.org/ext/neutron/external_net/api/v1.0";,
+      "alias": "external-net",
+      "description": "Adds external network attribute to network resource."
+    },
+    {
+      "updated": "2012-07-20T10:00:00-00:00",
+      "name": "Neutron L3 Router",
+      "links": [],
+      "namespace": "http://docs.openstack.org/ext/neutron/router/api/v1.0";,
+      "alias": "router",
+      "description": "Router abstraction for basic L3 forwarding between L2 
Neutron networks and access to external networks via a NAT gateway."
+    },
+    {
+      "updated": "2014-01-01T10:00:00-00:00",
+      "name": "Nuage subnet",
+      "links": [],
+      "namespace": "http://nuagenetworks.net/ext/subnets/api/v1.0";,
+      "alias": "nuage-subnet",
+      "description": "Nuage subnet"
+    },
+    {
+      "updated": "2013-05-29T10:00:00-00:00",
+      "name": "VPN service",
+      "links": [],
+      "namespace": "https://wiki.openstack.org/Neutron/VPNaaS";,
+      "alias": "vpnaas",
+      "description": "Extension for VPN service"
+    },
+    {
+      "updated": "2014-01-01T10:00:00-00:00",
+      "name": "NetPartition",
+      "links": [],
+      "namespace": "http://nuagenetworks.net/ext/net_partition/api/v1.0";,
+      "alias": "net-partition",
+      "description": "NetPartition"
+    },
+    {
+      "updated": "2012-10-07T10:00:00-00:00",
+      "name": "LoadBalancing service",
+      "links": [],
+      "namespace": "http://wiki.openstack.org/neutron/LBaaS/API_1.0";,
+      "alias": "lbaas",
+      "description": "Extension for LoadBalancing service"
+    },
+    {
+      "updated": "2013-02-01T10:00:00-00:00",
+      "name": "Neutron Extra Route",
+      "links": [],
+      "namespace": 
"http://docs.openstack.org/ext/neutron/extraroutes/api/v1.0";,
+      "alias": "extraroute",
+      "description": "Extra routes configuration for L3 router"
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_create_request.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_create_request.json 
b/apis/openstack-neutron/src/test/resources/firewall_create_request.json
new file mode 100644
index 0000000..7a7a5e7
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_create_request.json
@@ -0,0 +1,6 @@
+{
+  "firewall": {
+    "admin_state_up": true,
+    "firewall_policy_id": "c69933c1-b472-44f9-8226-30dc4ffd454c"
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_create_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_create_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_create_response.json
new file mode 100644
index 0000000..0433a76
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_create_response.json
@@ -0,0 +1,11 @@
+{
+  "firewall": {
+    "admin_state_up": true,
+    "description": "",
+    "firewall_policy_id": "c69933c1-b472-44f9-8226-30dc4ffd454c",
+    "id": "3b0ef8f4-82c7-44d4-a4fb-6177f9a21977",
+    "name": "",
+    "status": "PENDING_CREATE",
+    "tenant_id": "45977fa2dbd7482098dd68d0d8970117"
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_get_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_get_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_get_response.json
new file mode 100644
index 0000000..14425e1
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_get_response.json
@@ -0,0 +1,11 @@
+{
+  "firewall": {
+    "admin_state_up": true,
+    "description": "",
+    "firewall_policy_id": "c69933c1-b472-44f9-8226-30dc4ffd454c",
+    "id": "3b0ef8f4-82c7-44d4-a4fb-6177f9a21977",
+    "name": "",
+    "status": "ACTIVE",
+    "tenant_id": "45977fa2dbd7482098dd68d0d8970117"
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_list_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_list_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_list_response.json
new file mode 100644
index 0000000..9881360
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_list_response.json
@@ -0,0 +1,13 @@
+{
+  "firewalls": [
+    {
+      "status": "ACTIVE",
+      "name": "fw",
+      "admin_state_up": true,
+      "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+      "firewall_policy_id": "5083ef0d-7ad2-4305-acd8-bd036c332e1e",
+      "id": "5eb708e7-3856-449a-99ac-fec27cd745f9",
+      "description": ""
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_policy_create_request.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_policy_create_request.json 
b/apis/openstack-neutron/src/test/resources/firewall_policy_create_request.json
new file mode 100644
index 0000000..d5d417d
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_policy_create_request.json
@@ -0,0 +1,8 @@
+{
+  "firewall_policy": {
+    "name": "jclouds-fw-policy_group-52-e8b",
+    "shared": false,
+    "firewall_rules": [],
+    "audited": false
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_policy_create_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_policy_create_response.json
 
b/apis/openstack-neutron/src/test/resources/firewall_policy_create_response.json
new file mode 100644
index 0000000..8e3dd37
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_policy_create_response.json
@@ -0,0 +1,11 @@
+{
+  "firewall_policy": {
+    "name": "jclouds-fw-policy_group-52-e8b",
+    "firewall_rules": [],
+    "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+    "audited": false,
+    "shared": false,
+    "id": "12971159-95cf-4ca1-9baa-c82298ae0918",
+    "description": ""
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_policy_get_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_policy_get_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_policy_get_response.json
new file mode 100644
index 0000000..9ee2a17
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_policy_get_response.json
@@ -0,0 +1,14 @@
+{
+  "firewall_policy": {
+    "name": "myfirewallrule",
+    "firewall_rules": [
+      "3e5a4e53-4390-4b22-baea-75529dbeafb8",
+      "4e58f636-1ef1-4e8e-b3ad-5f7f9d1f9f23"
+    ],
+    "tenant_id": "e1defcdd823741c89afd5824040deed2",
+    "audited": false,
+    "shared": true,
+    "id": "18d2f4e5-afdd-4c10-87ea-d35f38faf98c",
+    "description": ""
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_request.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_request.json
 
b/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_request.json
new file mode 100644
index 0000000..eba7d52
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_request.json
@@ -0,0 +1 @@
+{"firewall_rule_id": "59585143-e819-48c9-944d-f03e0f049dba"}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_response.json
 
b/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_response.json
new file mode 100644
index 0000000..9f58f20
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_policy_insert_rule_response.json
@@ -0,0 +1,10 @@
+{
+  "name": "jclouds-fw-policy_group-52-e8b",
+  "firewall_rules": ["59585143-e819-48c9-944d-f03e0f049dba"],
+  "shared": false,
+  "audited": false,
+  "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+  "id": "12971159-95cf-4ca1-9baa-c82298ae0918",
+  "firewall_list": [],
+  "description": ""
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_policy_list_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_policy_list_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_policy_list_response.json
new file mode 100644
index 0000000..ecf2e3d
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_policy_list_response.json
@@ -0,0 +1,255 @@
+{
+  "firewall_policies": [
+    {
+      "name": "myfirewallrule",
+      "firewall_rules": [
+        "3e5a4e53-4390-4b22-baea-75529dbeafb8",
+        "4e58f636-1ef1-4e8e-b3ad-5f7f9d1f9f23"
+      ],
+      "tenant_id": "e1defcdd823741c89afd5824040deed2",
+      "audited": false,
+      "shared": true,
+      "id": "18d2f4e5-afdd-4c10-87ea-d35f38faf98c",
+      "description": ""
+    },
+    {
+      "name": "Policy SBT",
+      "firewall_rules": [],
+      "tenant_id": "ba6ba03f266e4ccfb07d2372bc8d68a2",
+      "audited": false,
+      "shared": true,
+      "id": "31d6368b-3d8b-49a1-af5d-901283223801",
+      "description": ""
+    },
+    {
+      "name": "FW-POLICY-DEMO",
+      "firewall_rules": [
+        "e434b562-c33f-4d64-84da-adfaaa94630e",
+        "03a3d9d7-eb92-49c4-83c1-a479ec37d87b",
+        "1086d52d-2323-434d-a1e8-ade5791fb5ac",
+        "7240cdf3-a8da-4006-90e2-9191d998fee0",
+        "eec4cdbe-859f-45c5-9acb-1935056af1e4",
+        "a18ee08e-9d5d-4c9e-9372-c4b8f71c6c75",
+        "7aefe7f9-01f6-4387-900e-177684e3c59d",
+        "b6017900-7811-4428-9940-a02033042c88",
+        "94129848-4eb8-4c8e-9164-cd8ee60faa49",
+        "e0649a2b-a327-45ed-a3a0-f068cb3fcf37",
+        "53f5bf0a-05e3-4a30-800b-611151a9685d",
+        "e07558b1-5e18-4d2d-a79b-0a95f36d1715",
+        "43931a28-513d-4cbb-80fa-464bf49df65f",
+        "79572a32-fda4-4f2c-bdad-bb11a08af9ed"
+      ],
+      "tenant_id": "cfb5b69938dc49f19f192eabf62a32e6",
+      "audited": false,
+      "shared": true,
+      "id": "4c0743e4-0361-4ed0-a6ce-2a8959d978a9",
+      "description": ""
+    },
+    {
+      "name": "fw-policy",
+      "firewall_rules": [
+        "3c51d308-1c5c-4776-b4ac-6d3c9ebd5685",
+        "e614f597-4eb2-457a-a102-5b9ad2beba42",
+        "e908239c-2b40-4afa-8ec3-9c4b437367da",
+        "1ae9b906-9250-4f8c-a262-b0fe6e7b1680",
+        "daa2ee3c-760c-4c67-81a8-e61a310366f1",
+        "1bd356b4-d0b0-4a86-a5a3-3245ac838960",
+        "e72605a4-f866-4cfe-9962-6577c4a87a4d"
+      ],
+      "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+      "audited": false,
+      "shared": false,
+      "id": "5083ef0d-7ad2-4305-acd8-bd036c332e1e",
+      "description": ""
+    },
+    {
+      "name": "PolicyOfTheVoid",
+      "firewall_rules": [],
+      "tenant_id": "85c79b517ef6431881c9477d2227be5f",
+      "audited": true,
+      "shared": true,
+      "id": "60779a72-21bd-4b97-a587-cd5fb8b8e7c0",
+      "description": ""
+    },
+    {
+      "name": "Policy",
+      "firewall_rules": [
+        "2b6646ea-a0d8-4982-b3e2-e14ad2743428",
+        "21a42289-b05c-4271-9f06-1172b88c8465",
+        "7b998345-1660-428f-969d-bfcdb4c0dbaf",
+        "8996fcfd-b88d-4b68-bff7-5fb07fc0088a",
+        "55b96a08-f868-45fd-9386-1fd831b7b63b",
+        "df5aaeb6-50d7-4344-9f00-f973d5e28185",
+        "bc23bcb1-1a81-4658-b72d-485da3af8a8a"
+      ],
+      "tenant_id": "ccef3550ec724607a8024977b3b4e410",
+      "audited": false,
+      "shared": true,
+      "id": "63337440-d0ad-4a3c-9e26-777a6e360119",
+      "description": "Ping + SSH"
+    },
+    {
+      "name": "allow_all",
+      "firewall_rules": ["d52ea23a-9911-44ef-815b-f3b4b6b0df64"],
+      "tenant_id": "53b1ed26b8874556bc7141f9482fd789",
+      "audited": false,
+      "shared": true,
+      "id": "6e3d5d6d-1356-43eb-91ef-d6f70888632d",
+      "description": "Allow All"
+    },
+    {
+      "name": "Politique Production",
+      "firewall_rules": [
+        "a6f58b76-5c90-4530-908c-cc7dbd945a4b",
+        "3521380b-624c-42a1-8415-992b52a9dfec",
+        "fbcf3060-bd0c-4cd9-b4b1-cf3c76b7fe7d",
+        "45aecaba-a659-490a-8f12-92adfda79c15",
+        "5cfc4e09-a765-4f4e-93d5-8a9650f051f8",
+        "304ff502-eb6f-46b5-8110-c75a483c23e0",
+        "1662f0bb-a9a6-415a-b1a7-19ba113d7a52",
+        "8bbd0490-452c-4bee-a70f-213558e0bc65",
+        "e39fcf85-bea2-49fa-8a8e-c69c5f2e29ae",
+        "1bbdd6ba-9ae8-4cd3-8815-ef992c56cb63",
+        "100e638c-77cf-4f1e-8194-5a26171f645a",
+        "91b8316c-96ae-41da-9c14-42e1f778c0a8"
+      ],
+      "tenant_id": "13a12b25d3cf4275905e2a6b9878a619",
+      "audited": false,
+      "shared": true,
+      "id": "89d7ef67-4cb8-485f-83ac-14085e616137",
+      "description": ""
+    },
+    {
+      "name": "any-shared",
+      "firewall_rules": ["b35ab1c6-309d-4690-b16c-0343a535651c"],
+      "tenant_id": "3fdcdc95fc88431597700dbb20be37c6",
+      "audited": false,
+      "shared": true,
+      "id": "a0a3a1b1-d985-4507-b785-311f8e981fa6",
+      "description": ""
+    },
+    {
+      "name": "production",
+      "firewall_rules": ["5dbe3498-b230-4b34-9915-7bcc22bed99c"],
+      "tenant_id": "94eb5f2fd9ed471992e2c5c2313b0703",
+      "audited": false,
+      "shared": true,
+      "id": "a23d0af2-3124-49cf-ae04-02c175eda549",
+      "description": "production"
+    },
+    {
+      "name": "PolProdStdDmz1",
+      "firewall_rules": [
+        "3178c9f6-f017-462b-b93f-715e11247c30",
+        "2b775a98-9813-48e0-8f32-a04dfc176872",
+        "a5a7e990-fbe4-429b-a55c-35df087b6f80",
+        "6ca67373-b89e-492d-94c6-1c40765800ce",
+        "bf93dda9-6f42-42cf-852f-689b6facf5b4",
+        "e3bd91ee-1337-4d73-9484-836a0fb5869b"
+      ],
+      "tenant_id": "3345a933109049779647ff02ca498f3a",
+      "audited": false,
+      "shared": true,
+      "id": "afc19c5c-d136-4dbf-b614-c0b784a4f68d",
+      "description": ""
+    },
+    {
+      "name": "ALL",
+      "firewall_rules": [
+        "43bfdc83-5f76-407d-b851-5803d4e23f0b",
+        "316965f2-4242-4c56-8e34-22f4ff1992a3",
+        "1fb6cbde-4446-4bef-9eac-cc6b76afc565",
+        "a3da3767-608d-493d-b15a-1793d66891c8",
+        "6f58413b-3667-41f6-93b4-eef813632aee",
+        "a28bdf75-894f-4af5-9063-e2fcee4cb01d",
+        "0ed005c7-2d89-43a1-8aaf-714d44858173",
+        "710e513c-df2b-4c78-8572-bd9701f5b108",
+        "016922c5-7810-41cb-ae2c-04bbd87b3b24",
+        "22d6ade0-0f0d-473a-9cec-4b5ba22db8e4",
+        "7ed0e62c-848d-4e4e-baa7-eea7e9c3c3ec",
+        "05a34244-0922-4a6d-b551-c95c500f2194",
+        "9d40ac55-0802-4590-aa89-8199dab7038f",
+        "3d1f3c70-44e1-4c6e-9253-53421976d707",
+        "4d22985f-ad50-459d-af00-eea902900e41",
+        "dd16596d-065d-4a3a-bb75-054ab7acf54f",
+        "33228008-6dba-4270-9c55-3d8752472795",
+        "46ea5a1c-8b4b-4eaf-b9c2-767efa8bc2ae",
+        "3b3c3136-d914-46ae-ace3-726f638ed1d5",
+        "2c3f8fce-3d05-405a-8249-1d3843b8a62d",
+        "23106a5d-556e-4e78-af13-1d0c9280b2e2",
+        "40e342d6-86fc-4205-b306-e9dcd816b958",
+        "bf290614-8ab0-487f-811f-4474a51a40d3",
+        "08b91c69-310d-4d55-bea1-ffe0d95e150b",
+        "8e9509ff-93cb-442d-92c6-1cfb79b9243c",
+        "019bd1b9-2f2b-4cfa-b645-6eb779d4622e",
+        "4f7fd6e2-7ac5-4a46-8e3d-c4dcdde8a3f0",
+        "4fd8fc8b-c449-457d-8526-6ba23f6f299d",
+        "e2a96758-70ba-499c-bd97-6d8ee55610ed",
+        "ade798f5-862a-442b-8168-f39a06030535"
+      ],
+      "tenant_id": "b6e174b62a964db7bf897a38b92fc217",
+      "audited": false,
+      "shared": true,
+      "id": "e0f918c2-7a10-45d1-a5f9-9b2a2026bf3e",
+      "description": ""
+    },
+    {
+      "name": "Pre-Prod",
+      "firewall_rules": [
+        "fd124f42-f064-4259-b840-1ca05203c6b7",
+        "f03bd950-6c56-4f5e-a307-45967078f507"
+      ],
+      "tenant_id": "80cf934d6ffb4ef5b244f1c512ad1e61",
+      "audited": false,
+      "shared": true,
+      "id": "e2a5fb51-698c-4898-87e8-f1eee6b50919",
+      "description": ""
+    },
+    {
+      "name": "ports VM ouverts",
+      "firewall_rules": ["c5535724-8ed8-4e50-933a-17e37b06994d"],
+      "tenant_id": "66165eac36f846099ab3f667f0c05229",
+      "audited": false,
+      "shared": true,
+      "id": "e5b8e392-1e70-4948-a6a4-b3726b528059",
+      "description": "ouverture de tous les ports du projet stagiaires"
+    },
+    {
+      "name": "www",
+      "firewall_rules": [
+        "75452b36-268e-4e75-aaf4-f0e7ed50bc97",
+        "c9e77ca0-1bc8-497d-904d-948107873dc6",
+        "67004fb6-9111-441f-a3c1-b94b08bbd496",
+        "80965cc0-2d60-48e8-8fe9-78be016f10b6",
+        "41c72886-f39d-450e-b4b5-818ebddf17d5",
+        "c854fab5-bdaf-4a86-9359-78de93e5df01",
+        "350288f9-4aea-4e13-b434-91141e5e5960",
+        "03d2a6ad-633f-431a-8463-4370d06a22c8"
+      ],
+      "tenant_id": "9145d91459d248b1b02fdaca97c6a75d",
+      "audited": false,
+      "shared": true,
+      "id": "f2b08c1e-aa81-4668-8ae1-1401bcb0576c",
+      "description": ""
+    },
+    {
+      "name": "fw-policy",
+      "firewall_rules": [
+        "32ea5280-b601-4531-903f-ddef6dd1b733",
+        "f6f39ac3-0bda-47ff-b8b9-f089a5440e19",
+        "dad47cfb-893f-4d7c-8e40-c7a86bcda175",
+        "1d089edc-ae35-4c60-b6af-79b69e2f3247",
+        "eac689d5-ce70-4d4a-bf43-5d1416ebb770",
+        "3c1318de-e095-4870-a2ec-3091fee81683",
+        "beb6249b-5e98-4c25-a356-d45f5b0cae29",
+        "b4b2362e-0d16-42ef-b8e4-9de56ca00c84",
+        "72c159d0-4777-4468-9136-543ba42d18f0"
+      ],
+      "tenant_id": "94eb5f2fd9ed471992e2c5c2313b0703",
+      "audited": false,
+      "shared": true,
+      "id": "f66e862e-9982-465e-a5af-79d61ca9c6eb",
+      "description": ""
+    }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_rule_create_request.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_rule_create_request.json 
b/apis/openstack-neutron/src/test/resources/firewall_rule_create_request.json
new file mode 100644
index 0000000..5dcacfe
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_rule_create_request.json
@@ -0,0 +1,12 @@
+{
+  "firewall_rule": {
+    "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+    "name": "jclouds-fw-rule_group-52-e8b_port-22",
+    "shared": false,
+    "protocol": "tcp",
+    "destination_ip_address": "192.168.0.117",
+    "destination_port": "22",
+    "action": "allow",
+    "enabled": true
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_rule_create_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_rule_create_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_rule_create_response.json
new file mode 100644
index 0000000..eb835f2
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_rule_create_response.json
@@ -0,0 +1,19 @@
+{
+  "firewall_rule": {
+    "protocol": "tcp",
+    "description": "",
+    "source_port": null,
+    "source_ip_address": null,
+    "destination_ip_address": "192.168.0.117",
+    "firewall_policy_id": null,
+    "position": null,
+    "destination_port": "22",
+    "id": "59585143-e819-48c9-944d-f03e0f049dba",
+    "name": "jclouds-fw-rule_group-52-e8b_port-22",
+    "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+    "enabled": true,
+    "action": "allow",
+    "ip_version": 4,
+    "shared": false
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_rule_get_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_rule_get_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_rule_get_response.json
new file mode 100644
index 0000000..860d6b1
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_rule_get_response.json
@@ -0,0 +1,19 @@
+{
+  "firewall_rule": {
+    "protocol": "tcp",
+    "description": "jclouds test fw rule",
+    "source_port": null,
+    "source_ip_address": null,
+    "destination_ip_address": "192.168.0.1",
+    "firewall_policy_id": null,
+    "position": null,
+    "destination_port": "22",
+    "id": "736b1686-3301-4a3d-9eaf-15e3c2682edc",
+    "name": 
"jclouds-test-org.jclouds.openstack.neutron.v2.extensions.fwaasapilivetest-fw-rule-22",
+    "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+    "enabled": true,
+    "action": "allow",
+    "ip_version": 4,
+    "shared": false
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_rule_update_request.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_rule_update_request.json 
b/apis/openstack-neutron/src/test/resources/firewall_rule_update_request.json
new file mode 100644
index 0000000..9850b8b
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_rule_update_request.json
@@ -0,0 +1,6 @@
+{
+  "firewall_rule": {
+    "shared": false,
+    "enabled": false
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_rule_update_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_rule_update_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_rule_update_response.json
new file mode 100644
index 0000000..0ba9c1f
--- /dev/null
+++ 
b/apis/openstack-neutron/src/test/resources/firewall_rule_update_response.json
@@ -0,0 +1,19 @@
+{
+  "firewall_rule": {
+    "protocol": "tcp",
+    "description": "jclouds test fw rule",
+    "source_port": null,
+    "source_ip_address": null,
+    "destination_ip_address": "192.168.0.1",
+    "firewall_policy_id": null,
+    "position": null,
+    "destination_port": "22",
+    "id": "736b1686-3301-4a3d-9eaf-15e3c2682edc",
+    "name": 
"jclouds-test-org.jclouds.openstack.neutron.v2.extensions.fwaasapilivetest-fw-rule-22-updated",
+    "tenant_id": "3e00d5716204446c8d3c47a466eec25a",
+    "enabled": false,
+    "action": "allow",
+    "ip_version": 4,
+    "shared": false
+  }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_update_request.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_update_request.json 
b/apis/openstack-neutron/src/test/resources/firewall_update_request.json
new file mode 100644
index 0000000..58021f7
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_update_request.json
@@ -0,0 +1,5 @@
+{
+  "firewall": {
+    "admin_state_up": false
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/289cce04/apis/openstack-neutron/src/test/resources/firewall_update_response.json
----------------------------------------------------------------------
diff --git 
a/apis/openstack-neutron/src/test/resources/firewall_update_response.json 
b/apis/openstack-neutron/src/test/resources/firewall_update_response.json
new file mode 100644
index 0000000..cc9635f
--- /dev/null
+++ b/apis/openstack-neutron/src/test/resources/firewall_update_response.json
@@ -0,0 +1,11 @@
+{
+  "firewall": {
+    "admin_state_up": false,
+    "description": "",
+    "firewall_policy_id": "c69933c1-b472-44f9-8226-30dc4ffd454c",
+    "id": "3b0ef8f4-82c7-44d4-a4fb-6177f9a21977",
+    "name": "",
+    "status": "PENDING_UPDATE",
+    "tenant_id": "45977fa2dbd7482098dd68d0d8970117"
+  }
+}
\ No newline at end of file

Reply via email to