| test_create_delete_router             | 2             | Ensures that a router can be deleted via the              |
 |                                       |               | OpenStackRouter.clean() method                            |
 +---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_with_internal_sub         | 2             | Ensures that a router can be joined to a subnet created by|
+|                                       |               | the same user who created the subnet                      |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_create_with_invalid_internal_sub | 2             | Ensures that a router cannot be created when attempting to|
+|                                       |               | join a subnet created by the admin user                   |
++---------------------------------------+---------------+-----------------------------------------------------------+
 | test_create_router_admin_state_false  | 2             | Ensures that a router can created with                    |
 |                                       |               | admin_state_up = False                                    |
 +---------------------------------------+---------------+-----------------------------------------------------------+
 
 from snaps.openstack import create_network
 from snaps.openstack import create_router
 from snaps.openstack.create_network import OpenStackNetwork
-from snaps.openstack.create_router import RouterSettings, OpenStackRouter
+from snaps.openstack.create_router import (RouterSettings, OpenStackRouter,
+    RouterCreationError)
 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, keystone_utils
         # Should not raise an exception
         self.router_creator.clean()
 
+    def test_create_with_internal_sub(self):
+        """
+        Test internal_subnets works.
+        """
+        network_settings1 = NetworkConfig(
+            name=self.guid + '-pub-net1',
+            subnet_settings=[
+                create_network.SubnetConfig(
+                    cidr=cidr1, name=self.guid + '-pub-subnet1',
+                    gateway_ip=static_gateway_ip1)])
+        self.network_creator1 = OpenStackNetwork(self.os_creds,
+                                                 network_settings1)
+
+        self.network_creator1.create()
+        self.router_settings = RouterConfig(
+            name=self.guid + '-pub-router', external_gateway=self.ext_net_name,
+            internal_subnets=[network_settings1.subnet_settings[0].name])
+
+        self.router_creator = create_router.OpenStackRouter(
+            self.os_creds, self.router_settings)
+        created_router = self.router_creator.create()
+        self.assertIsNotNone(created_router)
+
+    def test_create_with_invalid_internal_sub(self):
+        """
+        Test adding an internal subnet owned by admin which should fail.
+        """
+        network_settings1 = NetworkConfig(
+            name=self.guid + '-pub-net1',
+            subnet_settings=[
+                create_network.SubnetConfig(
+                    cidr=cidr1, name=self.guid + '-pub-subnet1',
+                    gateway_ip=static_gateway_ip1)])
+        self.network_creator1 = OpenStackNetwork(self.admin_os_creds,
+                                                 network_settings1)
+
+        self.network_creator1.create()
+        self.router_settings = RouterConfig(
+            name=self.guid + '-pub-router', external_gateway=self.ext_net_name,
+            internal_subnets=[network_settings1.subnet_settings[0].name])
+
+        self.router_creator = create_router.OpenStackRouter(
+            self.os_creds, self.router_settings)
+
+        with self.assertRaises(RouterCreationError):
+            created_router = self.router_creator.create()
+
     def test_create_router_admin_state_false(self):
         """
         Test creation of a basic router with admin state down.
 
                          retrieve
     :return: a SNAPS-OO Subnet domain object or None
     """
-    project = None
-    if project_name:
-        project = keystone_utils.get_project(
-            keystone, project_name=project_name)
-    if project:
-        sub_filter = {'name': subnet_name, 'project_id': project.id}
-        subnets = neutron.list_subnets(**sub_filter)
-        for subnet in subnets['subnets']:
-            return Subnet(**subnet)
-    else:
-        sub_filter = {'name': subnet_name}
-        subnets = neutron.list_subnets(**sub_filter)
-        for subnet in subnets['subnets']:
-            return Subnet(**subnet)
+    sub_filter = {'name': subnet_name}
+    subnets = neutron.list_subnets(**sub_filter)
+    for subnet in subnets['subnets']:
+        subnet = Subnet(**subnet)
+        if project_name:
+            project = keystone_utils.get_project_by_id(
+                keystone, subnet.project_id)
+            if project:
+                return subnet
+        else:
+            return subnet
 
 
 def get_subnet_by_id(neutron, subnet_id):