def test_new_project_network_setup_no_id(self):
        """
        No project id given, should do nothing.
        """
        setup_neutron_cache('RegionOne', 'test_project_id')
        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={'roles': ['admin']})

        data = {
            'setup_network': True,
            'region': 'RegionOne',
        }

        action = NewProjectDefaultNetworkAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEqual(action.valid, True)

        action.post_approve()
        self.assertEqual(action.valid, False)

        self.assertEqual(action.action.cache, {})

        global neutron_cache
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['networks']), 0)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['routers']), 0)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['subnets']), 0)
    def test_new_project_network_setup(self):
        """
        Base case, setup network after a new project, no issues.
        """
        setup_neutron_cache('RegionOne', 'test_project_id')
        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={'roles': ['admin']})

        data = {
            'setup_network': True,
            'region': 'RegionOne',
        }

        action = NewProjectDefaultNetworkAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEqual(action.valid, True)

        # Now we add the project data as this is where the project
        # would be created:
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_identity_cache(projects=[project])

        task.cache = {'project_id': "test_project_id"}

        action.post_approve()
        self.assertEqual(action.valid, True)

        self.assertEqual(
            action.action.cache, {
                'network_id': 'net_id_0',
                'port_id': 'port_id_3',
                'router_id': 'router_id_2',
                'subnet_id': 'subnet_id_1'
            })

        global neutron_cache
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['networks']), 1)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['routers']), 1)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['subnets']), 1)
    def test_new_project_network_setup_fail(self):
        """
        Should fail, but on re_approve will continue where it left off.
        """
        setup_neutron_cache('RegionOne', 'test_project_id')
        global neutron_cache
        task = Task.objects.create(ip_address="0.0.0.0",
                                   keystone_user={'roles': ['admin']})

        data = {
            'setup_network': True,
            'region': 'RegionOne',
        }

        action = NewProjectDefaultNetworkAction(data, task=task, order=1)

        action.pre_approve()
        self.assertEqual(action.valid, True)

        neutron_cache['RegionOne']['test_project_id']['routers'] = []

        # Now we add the project data as this is where the project
        # would be created:
        project = mock.Mock()
        project.id = 'test_project_id'
        project.name = 'test_project'
        project.domain = 'default'
        project.roles = {}

        setup_identity_cache(projects=[project])

        task.cache = {'project_id': "test_project_id"}

        try:
            action.post_approve()
            self.fail("Shouldn't get here.")
        except Exception:
            pass

        self.assertEqual(action.action.cache, {
            'network_id': 'net_id_0',
            'subnet_id': 'subnet_id_1'
        })

        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['networks']), 1)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['subnets']), 1)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['routers']), 0)

        neutron_cache['RegionOne']['test_project_id']['routers'] = {}

        action.post_approve()

        self.assertEqual(
            action.action.cache, {
                'network_id': 'net_id_0',
                'port_id': 'port_id_3',
                'router_id': 'router_id_2',
                'subnet_id': 'subnet_id_1'
            })

        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['networks']), 1)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['routers']), 1)
        self.assertEqual(
            len(neutron_cache['RegionOne']['test_project_id']['subnets']), 1)