| test_create_router_external_network   | 2             | Ensures that a router can be created that is connected to |
 |                                       |               | both external and private internal networks               |
 +---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_router_with_ext_port      | 2             | Ensures that a router can be created by an 'admin' user   |
+|                                       |               | with a port to an external network                        |
++---------------------------------------+---------------+-----------------------------------------------------------+
 
 create_router_tests.py - CreateRouterNegativeTests
 --------------------------------------------------
 
 from snaps.openstack.create_router import RouterSettings, OpenStackRouter
 from snaps.openstack.create_security_group import OpenStackSecurityGroup
 from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
-from snaps.openstack.utils import neutron_utils, settings_utils
+from snaps.openstack.utils import neutron_utils, settings_utils, keystone_utils
 
 __author__ = 'mmakati'
 
 
         self.check_router_recreation(router, router_settings)
 
+    def test_create_router_with_ext_port(self):
+        """
+        Test creation of a router with a port to an external network as an
+        'admin' user.
+        """
+        port_settings = [
+            create_network.PortConfig(
+                name=self.guid + '-port1',
+                network_name=self.ext_net_name)]
+
+        router_settings = RouterConfig(
+            name=self.guid + '-pub-router', port_settings=port_settings)
+        self.router_creator = create_router.OpenStackRouter(
+            self.admin_os_creds, router_settings)
+        self.router_creator.create()
+
+        admin_neutron = neutron_utils.neutron_client(
+            self.admin_os_creds, self.admin_os_session)
+        admin_keystone = keystone_utils.keystone_client(
+            self.admin_os_creds, self.admin_os_session)
+        router = neutron_utils.get_router(
+            admin_neutron, admin_keystone, router_settings=router_settings,
+            project_name=self.admin_os_creds.project_name)
+
+        self.assertIsNotNone(router)
+        self.assertEquals(router, self.router_creator.get_router())
+
+        ext_net = neutron_utils.get_network(
+            admin_neutron, admin_keystone, network_name=self.ext_net_name)
+
+        self.assertIsNotNone(ext_net)
+        self.assertIsNotNone(router.port_subnets)
+        for port, subnets in router.port_subnets:
+            self.assertIsNotNone(subnets)
+            self.assertIsNotNone(port)
+            self.assertEqual(ext_net.id, port.network_id)
+            for subnet in subnets:
+                self.assertIsNotNone(subnet)
+                self.assertEqual(ext_net.id, subnet.network_id)
+
     def check_router_recreation(self, router, orig_settings):
         """
         Validates the derived RouterConfig with the original