]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Added some more plugin agnostic tests (attachment and negative tests) and some
authorBrad Hall <bhall@nicira.com>
Mon, 27 Jun 2011 23:07:03 +0000 (16:07 -0700)
committerBrad Hall <bhall@nicira.com>
Mon, 27 Jun 2011 23:07:03 +0000 (16:07 -0700)
pep8 fixes.

quantum/cli.py
quantum/plugins/SamplePlugin.py
tests/functional/test_service.py

index 6c653097d035a6d6f6132b977054b33d63d95b3a..5d3d427cb74092d0d6a4fe37fcc190da9a85079d 100644 (file)
@@ -299,7 +299,8 @@ def api_plug_iface(client, *args):
         LOG.error("Failed to plug iface \"%s\" to port \"%s\": %s" % (vid,
           pid, output))
         return
-    print "Plugged interface \"%s\" to port:%s on network:%s" % (vid, pid, nid)
+    print "Plugged interface \"%s\" to port:%s on network:%s" % (vid, pid,
+      nid)
 
 
 def unplug_iface(manager, *args):
@@ -318,7 +319,8 @@ def api_unplug_iface(client, *args):
     output = res.read()
     LOG.debug(output)
     if res.status != 202:
-        LOG.error("Failed to unplug iface from port \"%s\": %s" % (pid, output))
+        LOG.error("Failed to unplug iface from port \"%s\": %s" % (pid,
+          output))
         return
     print "Unplugged interface from port:%s on network:%s" % (pid, nid)
 
index 376456a6c81dae207c152684f9128cd265a68dbb..dcac672f29e7a2959a98e30ab8c37f69f0b0460e 100644 (file)
@@ -374,7 +374,10 @@ class FakePlugin(object):
         # TODO(salvatore-orlando): Validate port state in API?
         self._validate_port_state(port_state)
         ports = net['net-ports']
-        new_port_id = max(ports.keys()) + 1
+        if len(ports.keys()) == 0:
+            new_port_id = 1
+        else:
+            new_port_id = max(ports.keys()) + 1
         new_port_dict = {'port-id': new_port_id,
                          'port-state': port_state,
                          'attachment': None}
@@ -434,3 +437,11 @@ class FakePlugin(object):
         # TODO(salvatore-orlando):
         # Should unplug on port without attachment raise an Error?
         port['attachment'] = None
+
+    def get_interface_details(self, tenant_id, net_id, port_id):
+        """
+        Get Attachment details
+        """
+        print("get_interface_details() called\n")
+        port = self._get_port(tenant_id, net_id, port_id)
+        return port["attachment"]
index 6ed728394a993457eba14ca8ca78d14d94dd03f1..12c648615bfd3e0bd0150aba733a72250fbda545 100644 (file)
@@ -17,7 +17,7 @@
 #    under the License.
 
 import gettext
-import simplejson
+import json
 import sys
 import unittest
 
@@ -50,10 +50,10 @@ class QuantumTest(unittest.TestCase):
     def setUp(self):
         self.client = MiniClient(HOST, PORT, USE_SSL)
 
-    def create_network(self, data):
+    def create_network(self, data, tenant_id=TENANT_ID):
         content_type = "application/" + FORMAT
         body = Serializer().serialize(data, content_type)
-        res = self.client.do_request(TENANT_ID, 'POST', "/networks." + FORMAT,
+        res = self.client.do_request(tenant_id, 'POST', "/networks." + FORMAT,
           body=body)
         self.assertEqual(res.status, 200, "bad response: %s" % res.read())
 
@@ -63,23 +63,46 @@ class QuantumTest(unittest.TestCase):
         res = self.client.do_request(TENANT_ID, 'GET', "/networks." + FORMAT)
         self.assertEqual(res.status, 200, "bad response: %s" % res.read())
 
+    def test_getNonexistentNetwork(self):
+        # TODO(bgh): parse exception and make sure it is NetworkNotFound
+        try:
+            res = self.client.do_request(TENANT_ID, 'GET',
+              "/networks/%s.%s" % ("8675309", "xml"))
+            self.assertEqual(res.status, 400)
+        except Exception, e:
+            print "Caught exception: %s" % (str(e))
+
+    def test_deleteNonexistentNetwork(self):
+        # TODO(bgh): parse exception and make sure it is NetworkNotFound
+        try:
+            res = self.client.do_request(TENANT_ID, 'DELETE',
+              "/networks/%s.%s" % ("8675309", "xml"))
+            self.assertEqual(res.status, 400)
+        except Exception, e:
+            print "Caught exception: %s" % (str(e))
+
     def test_createNetwork(self):
         self.create_network(test_network1_data)
 
     def test_createPort(self):
         self.create_network(test_network1_data)
         res = self.client.do_request(TENANT_ID, 'GET', "/networks." + FORMAT)
-        resdict = simplejson.loads(res.read())
+        resdict = json.loads(res.read())
         for n in resdict["networks"]:
             net_id = n["id"]
 
             # Step 1 - List Ports for network (should not find any)
             res = self.client.do_request(TENANT_ID, 'GET',
               "/networks/%s/ports.%s" % (net_id, FORMAT))
-            self.assertEqual(res.status, 200, "Bad response: %s" % res.read())
             output = res.read()
-            self.assertTrue(len(output) == 0,
-              "Found unexpected ports: %s" % output)
+            self.assertEqual(res.status, 200, "Bad response: %s" % output)
+            if len(output) > 0:
+                resdict = json.loads(output)
+                self.assertTrue(len(resdict["ports"]) == 0,
+                  "Found unexpected ports: %s" % output)
+            else:
+                self.assertTrue(len(output) == 0,
+                  "Found unexpected ports: %s" % output)
 
             # Step 2 - Create Port for network
             res = self.client.do_request(TENANT_ID, 'POST',
@@ -91,17 +114,59 @@ class QuantumTest(unittest.TestCase):
               "/networks/%s/ports.%s" % (net_id, FORMAT))
             output = res.read()
             self.assertEqual(res.status, 200, "Bad response: %s" % output)
-            resdict = simplejson.loads(output)
+            resdict = json.loads(output)
             ids = []
             for p in resdict["ports"]:
                 ids.append(p["id"])
             self.assertTrue(len(ids) == 1,
               "Didn't find expected # of ports (1): %s" % ids)
 
+    def test_getAttachment(self):
+        self.create_network(test_network1_data)
+        res = self.client.do_request(TENANT_ID, 'GET', "/networks." + FORMAT)
+        resdict = json.loads(res.read())
+        for n in resdict["networks"]:
+            net_id = n["id"]
+
+            # Step 1 - Create Port for network and attempt to get the
+            # attachment (even though there isn't one)
+            res = self.client.do_request(TENANT_ID, 'POST',
+              "/networks/%s/ports.%s" % (net_id, FORMAT))
+            output = res.read()
+            self.assertEqual(res.status, 200, "Bad response: %s" % output)
+            resdict = json.loads(output)
+            port_id = resdict["ports"]["port"]["id"]
+
+            res = self.client.do_request(TENANT_ID, 'GET',
+              "/networks/%s/ports/%s/attachment.%s" % (net_id, port_id,
+                FORMAT))
+            output = res.read()
+            self.assertEqual(res.status, 200, "Bad response: %s" % output)
+
+            # Step 2 - Add an attachment
+            data = {'port': {'attachment-id': 'fudd'}}
+            content_type = "application/" + FORMAT
+            body = Serializer().serialize(data, content_type)
+            res = self.client.do_request(TENANT_ID, 'PUT',
+              "/networks/%s/ports/%s/attachment.%s" % (net_id, port_id,
+                FORMAT), body=body)
+            output = res.read()
+            self.assertEqual(res.status, 202, "Bad response: %s" % output)
+
+            # Step 3 - Fetch the attachment
+            res = self.client.do_request(TENANT_ID, 'GET',
+              "/networks/%s/ports/%s/attachment.%s" % (net_id, port_id,
+                FORMAT))
+            output = res.read()
+            self.assertEqual(res.status, 200, "Bad response: %s" % output)
+            resdict = json.loads(output)
+            attachment = resdict["attachment"]
+            self.assertEqual(attachment, "fudd", "Attachment: %s" % attachment)
+
     def test_renameNetwork(self):
         self.create_network(test_network1_data)
         res = self.client.do_request(TENANT_ID, 'GET', "/networks." + FORMAT)
-        resdict = simplejson.loads(res.read())
+        resdict = json.loads(res.read())
         net_id = resdict["networks"][0]["id"]
 
         data = test_network1_data.copy()
@@ -110,20 +175,41 @@ class QuantumTest(unittest.TestCase):
         body = Serializer().serialize(data, content_type)
         res = self.client.do_request(TENANT_ID, 'PUT',
           "/networks/%s.%s" % (net_id, FORMAT), body=body)
-        resdict = simplejson.loads(res.read())
+        resdict = json.loads(res.read())
         self.assertTrue(resdict["networks"]["network"]["id"] == net_id,
           "Network_rename: renamed network has a different uuid")
         self.assertTrue(
             resdict["networks"]["network"]["name"] == "test_renamed",
             "Network rename didn't take effect")
 
-    def delete_networks(self):
-        # Remove all the networks created on the tenant
-        res = self.client.do_request(TENANT_ID, 'GET', "/networks." + FORMAT)
-        resdict = simplejson.loads(res.read())
+    def test_createNetworkOnMultipleTenants(self):
+        # Create the same network on multiple tenants
+        self.create_network(test_network1_data, "tenant1")
+        self.create_network(test_network1_data, "tenant2")
+
+    def delete_networks(self, tenant_id=TENANT_ID):
+        # Remove all the networks created on the tenant (including ports and
+        # attachments)
+        res = self.client.do_request(tenant_id, 'GET',
+          "/networks." + FORMAT)
+        resdict = json.loads(res.read())
         for n in resdict["networks"]:
             net_id = n["id"]
-            res = self.client.do_request(TENANT_ID, 'DELETE',
+            # Delete all the ports
+            res = self.client.do_request(tenant_id, 'GET',
+              "/networks/%s/ports.%s" % (net_id, FORMAT))
+            output = res.read()
+            self.assertEqual(res.status, 200, "Bad response: %s" % output)
+            resdict = json.loads(output)
+            ids = []
+            for p in resdict["ports"]:
+                res = self.client.do_request(tenant_id, 'DELETE',
+                  "/networks/%s/ports/%s/attachment.%s" % (net_id, p["id"],
+                    FORMAT))
+                res = self.client.do_request(tenant_id, 'DELETE',
+                  "/networks/%s/ports/%s.%s" % (net_id, p["id"], FORMAT))
+            # Now, remove the network
+            res = self.client.do_request(tenant_id, 'DELETE',
               "/networks/" + net_id + "." + FORMAT)
             self.assertEqual(res.status, 202)