Repository: jclouds-labs-openstack
Updated Branches:
  refs/heads/master c9ff49a1b -> 57a9087fe


http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java
new file mode 100644
index 0000000..19fa1cf
--- /dev/null
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java
@@ -0,0 +1,192 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jclouds.openstack.neutron.v2_0.extensions;
+
+import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
+import org.jclouds.openstack.neutron.v2_0.domain.Network;
+import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
+import org.jclouds.openstack.neutron.v2_0.domain.Port;
+import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
+import org.jclouds.openstack.neutron.v2_0.domain.Router;
+import org.jclouds.openstack.neutron.v2_0.domain.RouterInterface;
+import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
+import org.jclouds.openstack.neutron.v2_0.features.NetworkApi;
+import org.jclouds.openstack.neutron.v2_0.features.PortApi;
+import org.jclouds.openstack.neutron.v2_0.features.SubnetApi;
+import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
+import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
+import org.jclouds.openstack.neutron.v2_0.options.CreateRouterOptions;
+import org.jclouds.openstack.neutron.v2_0.options.UpdateRouterOptions;
+import org.testng.annotations.Test;
+
+import java.util.Set;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+/**
+ * Tests parsing and Guice wiring of RouterApi
+ *
+ * @author Nick Livens
+ */
+@Test(groups = "live", testName = "RouterApiLiveTest")
+public class RouterApiLiveTest extends BaseNeutronApiLiveTest {
+
+   public void testGetAndListRouters() {
+      for (String zone : api.getConfiguredZones()) {
+         Set<? extends ReferenceWithName> references = 
api.getRouterExtensionForZone(zone).get().list().concat().toSet();
+         Set<? extends Router> routers = 
api.getRouterExtensionForZone(zone).get().listInDetail().concat().toSet();
+
+         assertNotNull(references);
+         assertNotNull(routers);
+         assertEquals(references.size(), routers.size());
+
+         for (Router router : routers) {
+            assertNotNull(router.getName());
+            
assertTrue(references.contains(ReferenceWithName.builder().id(router.getId()).tenantId(router.getTenantId()).name(router.getName()).build()));
+
+            Router retrievedRouter = 
api.getRouterExtensionForZone(zone).get().get(router.getId());
+            assertEquals(router, retrievedRouter);
+         }
+      }
+   }
+
+   public void testCreateUpdateAndDeleteRouter() {
+      for (String zone : api.getConfiguredZones()) {
+         RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
+         NetworkApi networkApi = api.getNetworkApiForZone(zone);
+         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
+
+         Network network = 
networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test").external(true).networkType(NetworkType.LOCAL).build());
+         assertNotNull(network);
+
+         Subnet subnet = subnetApi.create(network.getId(), 4, 
"192.168.0.0/16");
+         assertNotNull(subnet);
+
+         Router ref = 
routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test")
+            
.externalGatewayInfo(ExternalGatewayInfo.builder().networkId(network.getId()).build()).build());
+         assertNotNull(ref);
+
+         Router router = routerApi.get(ref.getId());
+
+         assertEquals(router.getId(), ref.getId());
+         assertEquals(router.getName(), "jclouds-router-test");
+         assertEquals(router.getExternalGatewayInfo().getNetworkId(), 
network.getId());
+         assertTrue(routerApi.update(router.getId(), 
UpdateRouterOptions.builder().name("jclouds-router-test-rename").build()));
+
+         router = routerApi.get(ref.getId());
+
+         assertEquals(router.getId(), ref.getId());
+         assertEquals(router.getName(), "jclouds-router-test-rename");
+
+         ReferenceWithName ref2 = 
routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test2")
+            
.externalGatewayInfo(ExternalGatewayInfo.builder().networkId(network.getId()).build()).build());
+         assertNotNull(ref2);
+
+         assertTrue(routerApi.delete(ref.getId()));
+         assertTrue(routerApi.delete(ref2.getId()));
+         assertTrue(subnetApi.delete(subnet.getId()));
+         assertTrue(networkApi.delete(network.getId()));
+      }
+   }
+
+   public void testCreateAndDeleteRouterInterfaceForSubnet() {
+      for (String zone : api.getConfiguredZones()) {
+         RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
+         NetworkApi networkApi = api.getNetworkApiForZone(zone);
+         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
+
+         Network network = 
networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test").external(true).networkType(NetworkType.LOCAL).build());
+         assertNotNull(network);
+
+         Subnet subnet = subnetApi.create(network.getId(), 4, 
"192.168.0.0/16");
+         assertNotNull(subnet);
+
+         Network network2 = 
networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test2").external(true).networkType(NetworkType.LOCAL).build());
+         assertNotNull(network2);
+
+         Subnet subnet2 = subnetApi.create(network2.getId(), 4, 
"192.169.0.0/16");
+         assertNotNull(subnet2);
+
+         Router router = 
routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test").build());
+         assertNotNull(router);
+
+         RouterInterface routerInterface = 
routerApi.addInterfaceForSubnet(router.getId(), subnet.getId());
+         assertNotNull(routerInterface);
+
+         RouterInterface routerInterface2 = 
routerApi.addInterfaceForSubnet(router.getId(), subnet2.getId());
+         assertNotNull(routerInterface2);
+
+         assertTrue(routerApi.removeInterfaceForSubnet(router.getId(), 
subnet.getId()));
+         assertTrue(routerApi.removeInterfaceForSubnet(router.getId(), 
subnet2.getId()));
+         assertTrue(routerApi.delete(router.getId()));
+         assertTrue(subnetApi.delete(subnet.getId()));
+         assertTrue(networkApi.delete(network.getId()));
+         assertTrue(subnetApi.delete(subnet2.getId()));
+         assertTrue(networkApi.delete(network2.getId()));
+      }
+   }
+
+   public void testCreateAndDeleteRouterInterfaceForPort() {
+      for (String zone : api.getConfiguredZones()) {
+         RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
+         NetworkApi networkApi = api.getNetworkApiForZone(zone);
+         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
+         PortApi portApi = api.getPortApiForZone(zone);
+
+         Network network = 
networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test").external(true).networkType(NetworkType.LOCAL).build());
+         assertNotNull(network);
+
+         Subnet subnet = subnetApi.create(network.getId(), 4, 
"192.168.0.0/16");
+         assertNotNull(subnet);
+
+         Network network2 = 
networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test2").external(true).networkType(NetworkType.LOCAL).build());
+         assertNotNull(network2);
+
+         Subnet subnet2 = subnetApi.create(network2.getId(), 4, 
"192.169.0.0/16");
+         assertNotNull(subnet2);
+
+         Port port = portApi.create(network.getId());
+         assertNotNull(port);
+
+         Port port2 = portApi.create(network2.getId());
+         assertNotNull(port2);
+
+         Router router = 
routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test").build());
+         assertNotNull(router);
+
+         RouterInterface routerInterface = 
routerApi.addInterfaceForPort(router.getId(), port.getId());
+         assertNotNull(routerInterface);
+
+         RouterInterface routerInterface2 = 
routerApi.addInterfaceForPort(router.getId(), port2.getId());
+         assertNotNull(routerInterface2);
+
+         assertTrue(routerApi.removeInterfaceForPort(router.getId(), 
port.getId()));
+         assertTrue(routerApi.removeInterfaceForPort(router.getId(), 
port2.getId()));
+         assertTrue(routerApi.delete(router.getId()));
+         assertTrue(subnetApi.delete(subnet.getId()));
+         assertTrue(networkApi.delete(network.getId()));
+         assertTrue(subnetApi.delete(subnet2.getId()));
+         assertTrue(networkApi.delete(network2.getId()));
+
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
index e8e1f79..6950a89 100644
--- 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
@@ -16,7 +16,9 @@
  */
 package org.jclouds.openstack.neutron.v2_0.features;
 
+import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
 import org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork;
 import org.jclouds.openstack.neutron.v2_0.domain.Network;
 import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
@@ -25,6 +27,8 @@ import 
org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
 import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkBulkOptions;
 import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
 import org.jclouds.openstack.neutron.v2_0.options.UpdateNetworkOptions;
+import org.jclouds.openstack.neutron.v2_0.util.PredicateUtil;
+import org.testng.annotations.Test;
 
 import java.util.Set;
 
@@ -37,6 +41,7 @@ import static org.testng.Assert.assertTrue;
  *
  * @author Nick Livens
  */
+@Test(groups = "live", testName = "NetworkApiLiveTest")
 public class NetworkApiLiveTest extends BaseNeutronApiLiveTest {
 
    public void testGetAndListNetworks() {
@@ -107,7 +112,8 @@ public class NetworkApiLiveTest extends 
BaseNeutronApiLiveTest {
          assertEquals(nets.size(), 3);
 
          for (Network net : nets) {
-            assertTrue(existingNets.contains(net));
+            Predicate<Network> idEqualsPredicate = 
PredicateUtil.createIdEqualsPredicate(net.getId());
+            assertEquals(1, Sets.filter(existingNets, 
idEqualsPredicate).size());
             assertTrue(networkApi.delete(net.getId()));
          }
       }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
index 7aed04c..1a368b3 100644
--- 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
@@ -16,31 +16,37 @@
  */
 package org.jclouds.openstack.neutron.v2_0.features;
 
-import com.google.common.collect.ImmutableSet;
+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 java.util.Set;
+
 import org.jclouds.openstack.neutron.v2_0.domain.BulkPort;
 import org.jclouds.openstack.neutron.v2_0.domain.IP;
 import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
 import org.jclouds.openstack.neutron.v2_0.domain.Port;
+import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
 import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
 import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
 import org.jclouds.openstack.neutron.v2_0.options.CreatePortBulkOptions;
 import org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions;
 import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions;
 import org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions;
+import org.jclouds.openstack.neutron.v2_0.util.PredicateUtil;
+import org.testng.annotations.Test;
 
-import java.util.Set;
-
-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 com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 
 /**
  * Tests PortApi in combination with the Network & SubnetApi
  *
  * @author Nick Livens
  */
+@Test(groups = "live", testName = "PortApiLiveTest")
 public class PortApiLiveTest extends BaseNeutronApiLiveTest {
 
    public void testGetAndListPorts() {
@@ -134,7 +140,8 @@ public class PortApiLiveTest extends BaseNeutronApiLiveTest 
{
          assertEquals(ports.size(), 4);
 
          for (Port port : ports) {
-            assertTrue(existingPorts.contains(port));
+            Predicate<Port> idEqualsPredicate = 
PredicateUtil.createIdEqualsPredicate(port.getId());
+            assertEquals(1, Sets.filter(existingPorts, 
idEqualsPredicate).size());
             assertTrue(portApi.delete(port.getId()));
          }
          assertTrue(subnetApi.delete(ipv4SubnetId));

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
index 549114c..bd3574f 100644
--- 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
@@ -16,8 +16,12 @@
  */
 package org.jclouds.openstack.neutron.v2_0.features;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
 import org.jclouds.openstack.neutron.v2_0.domain.AllocationPool;
 import org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet;
 import org.jclouds.openstack.neutron.v2_0.domain.HostRoute;
@@ -29,18 +33,20 @@ import 
org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
 import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetBulkOptions;
 import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions;
 import org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions;
+import org.jclouds.openstack.neutron.v2_0.util.PredicateUtil;
+import org.testng.annotations.Test;
 
-import java.util.Set;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 
 /**
  * Tests subnet api in combination with the network api
  *
  * @author Nick Livens
  */
+@Test(groups = "live", testName = "SubnetApiLiveTest")
 public class SubnetApiLiveTest extends BaseNeutronApiLiveTest {
 
    public void testGetAndListSubnets() {
@@ -124,7 +130,8 @@ public class SubnetApiLiveTest extends 
BaseNeutronApiLiveTest {
          assertEquals(subnets.size(), 3);
 
          for (Subnet net : subnets) {
-            assertTrue(existingSubnets.contains(net));
+            Predicate<Subnet> idEqualsPredicate = 
PredicateUtil.createIdEqualsPredicate(net.getId());
+            assertEquals(1, Sets.filter(existingSubnets, 
idEqualsPredicate).size());
             assertTrue(subnetApi.delete(net.getId()));
          }
          assertTrue(networkApi.delete(networkId));

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java
new file mode 100644
index 0000000..59b829f
--- /dev/null
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jclouds.openstack.neutron.v2_0.parse;
+
+import org.jclouds.json.BaseItemParserTest;
+import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
+import org.jclouds.openstack.neutron.v2_0.domain.Router;
+import org.jclouds.openstack.neutron.v2_0.domain.State;
+import org.jclouds.rest.annotations.SelectJson;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+/**
+ * @author Nick Livens
+ */
+@Test(groups = "unit", testName = "ParseRouterTest")
+public class ParseRouterTest extends BaseItemParserTest<Router> {
+
+   @Override
+   public String resource() {
+      return "/router.json";
+   }
+
+   @Override
+   @SelectJson("router")
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Router expected() {
+      return Router.builder()
+         
.externalGatewayInfo(ExternalGatewayInfo.builder().networkId("624312ff-d14b-4ba3-9834-1c78d23d574d").build())
+         .state(State.ACTIVE)
+         .name("jclouds-wibble")
+         .tenantId("1234567890")
+         .id("16dba3bc-f3fa-4775-afdc-237e12c72f6a")
+         .build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java
new file mode 100644
index 0000000..a034fb5
--- /dev/null
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jclouds.openstack.neutron.v2_0.util;
+
+import java.lang.reflect.Field;
+
+/**
+ * @author Nick Livens
+ */
+public class ClassUtil {
+
+    public static Field findField(Class clazz, String fieldName) {
+        Field fieldToFind = null;
+        if (clazz.getSuperclass() != null)
+            fieldToFind = findField(clazz.getSuperclass(), fieldName);
+
+        if (fieldToFind != null)
+            return fieldToFind;
+
+        for (Field field : clazz.getDeclaredFields()) {
+            if (field.getName().equals(fieldName))
+                return field;
+        }
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java
----------------------------------------------------------------------
diff --git 
a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java
 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java
new file mode 100644
index 0000000..27bef32
--- /dev/null
+++ 
b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  jclouds licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jclouds.openstack.neutron.v2_0.util;
+
+import com.google.common.base.Predicate;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.lang.reflect.Field;
+
+/**
+ * @author Nick Livens
+ */
+public class PredicateUtil {
+
+    public static <T> Predicate<T> createIdEqualsPredicate(final String id) {
+        return new Predicate<T>() {
+            @Override
+            public boolean apply(@Nullable T input) {
+                if (input == null) return false;
+
+                try {
+                    Class clazz = input.getClass();
+                    Field field = ClassUtil.findField(clazz, "id");
+                    field.setAccessible(true);
+                    String value = (String) field.get(input);
+                    field.setAccessible(false);
+                    return value != null && value.equals(id);
+                } catch (IllegalAccessException iae) {
+                    return false;
+                }
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/resources/list_routers.json
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/test/resources/list_routers.json 
b/openstack-neutron/src/test/resources/list_routers.json
new file mode 100644
index 0000000..0e5b95d
--- /dev/null
+++ b/openstack-neutron/src/test/resources/list_routers.json
@@ -0,0 +1,74 @@
+{"routers":[
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"16dba3bc-f3fa-4775-afdc-237e12c72f6a"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"wibble",
+        "tenant_id":"1234567890",
+        "id":"1a104cf5-cb18-4d35-9407-2fd2646d9d0b"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"31083ae2-420d-48b2-ac98-9f7a4fd8dbdc"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"49c6d6fa-ff2a-459d-b975-75a8d31c9a89"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"wibble",
+        "tenant_id":"1234567890",
+        "id":"5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"5d51d012-3491-4db7-b1b5-6f254015015d"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"wibble",
+        "tenant_id":"1234567890",
+        "id":"5f9cf7dc-22ca-4097-8e49-1cc8b23faf17"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"6319ecad-6bff-48b2-9b53-02ede8cb7588"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"6ba4c788-661f-49ab-9bf8-5f10cbbb2f57"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"74ed170b-5069-4353-ab38-9719766dc57e"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"wibble",
+        "tenant_id":"1234567890",
+        "id":"b71fcac1-e864-4031-8c5b-edbecd9ece36"
+    },
+    {
+        "status":"ACTIVE",
+        "name":"jclouds-test",
+        "tenant_id":"1234567890",
+        "id":"c7681895-d84d-4650-9ca0-82c72036b855"
+    }
+]}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/57a9087f/openstack-neutron/src/test/resources/router.json
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/test/resources/router.json 
b/openstack-neutron/src/test/resources/router.json
new file mode 100644
index 0000000..0b45db9
--- /dev/null
+++ b/openstack-neutron/src/test/resources/router.json
@@ -0,0 +1,7 @@
+{"router":{
+    "status":"ACTIVE",
+    
"external_gateway_info":{"network_id":"624312ff-d14b-4ba3-9834-1c78d23d574d"},
+    "name":"jclouds-wibble",
+    "tenant_id":"1234567890",
+    "id":"16dba3bc-f3fa-4775-afdc-237e12c72f6a"
+}}
\ No newline at end of file

Reply via email to