Merge "Test create VM with unaddressed port"
diff --git a/tempest/api/compute/servers/test_create_server.py b/tempest/api/compute/servers/test_create_server.py
index a61f5fb..599141f 100644
--- a/tempest/api/compute/servers/test_create_server.py
+++ b/tempest/api/compute/servers/test_create_server.py
@@ -23,6 +23,7 @@
 from tempest.common.utils.linux import remote_client
 from tempest import config
 from tempest.lib.common.utils import data_utils
+from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
 CONF = config.CONF
@@ -44,6 +45,12 @@
     @classmethod
     def setup_clients(cls):
         super(ServersTestJSON, cls).setup_clients()
+        cls.client = cls.servers_client
+        if CONF.enforce_scope.nova:
+            cls.reader_client = cls.os_project_reader.servers_client
+        else:
+            cls.reader_client = cls.client
+        cls.ports_client = cls.os_primary.ports_client
 
     @classmethod
     def resource_setup(cls):
@@ -153,6 +160,50 @@
         # postfix when checking whether hostname equals self.name.
         self.assertEqual(self.name.lower(), hostname.split(".")[0], msg)
 
+    @decorators.idempotent_id('38b98870-f68d-4192-af36-555dac193ad1')
+    @testtools.skipUnless(
+        utils.is_extension_enabled('ip_allocation', 'network'),
+        'ip_allocation extension is not enabled.')
+    def test_boot_vm_with_unaddressed_port(self):
+        """Test creating VM with unaddressed port
+
+        Verify that a server can be created successfully using a port
+        that has no fixed IP addresses assigned to it.
+        """
+        network = self.get_tenant_network()
+        network_id = network['id']
+
+        # Create a port with no fixed IPs
+        port = self.ports_client.create_port(
+            network_id=network_id,
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__),
+            fixed_ips=[]
+            )
+        port_id = port['port']['id']
+        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
+                        self.ports_client.delete_port, port_id)
+
+        # Verify the port has no fixed IPs
+        self.assertEqual([], port['port']['fixed_ips'])
+
+        # Create a server with unaddressed port
+        server = self.create_test_server(
+            wait_until='ACTIVE',
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__),
+            networks=[
+                {
+                    'port': port_id
+                },
+            ])
+
+        # Verify the port is attached to the server
+        updated_port = self.ports_client.show_port(port_id)['port']
+        self.assertEqual(server['id'], updated_port['device_id'])
+
 
 class ServersTestManualDisk(ServersTestJSON):
     """Test creating server and verifying the server attributes