Beispiel #1
0
 def delete(self, context, network_id):
     if network_id == -1:
         raise exception.NetworkInUse(network_id=network_id)
     for i, network in enumerate(self.networks):
         if network['id'] == network_id:
             del self.networks[0]
             return True
     raise exception.NetworkNotFoundForUUID(uuid=network_id)
Beispiel #2
0
class NetworksTestV21(test.NoDBTestCase):
    validation_error = exception.ValidationError

    def setUp(self):
        super(NetworksTestV21, self).setUp()
        self.fake_network_api = FakeNetworkAPI()
        self._setup()
        fakes.stub_out_networking(self.stubs)
        fakes.stub_out_rate_limiting(self.stubs)
        self.new_network = copy.deepcopy(NEW_NETWORK)
        self.req = fakes.HTTPRequest.blank('')
        self.admin_req = fakes.HTTPRequest.blank('', use_admin_context=True)

    def _setup(self):
        self.controller = networks_v21.NetworkController(self.fake_network_api)

    def _check_status(self, res, method, code):
        self.assertEqual(method.wsgi_code, code)

    @staticmethod
    def network_uuid_to_id(network):
        network['id'] = network['uuid']
        del network['uuid']

    def test_network_list_all_as_user(self):
        self.maxDiff = None
        res_dict = self.controller.index(self.req)
        self.assertEqual(res_dict, {'networks': []})

        project_id = self.req.environ["nova.context"].project_id
        cxt = self.req.environ["nova.context"]
        uuid = FAKE_NETWORKS[0]['uuid']
        self.fake_network_api.associate(context=cxt,
                                        network_uuid=uuid,
                                        project=project_id)
        res_dict = self.controller.index(self.req)
        expected = [copy.deepcopy(FAKE_USER_NETWORKS[0])]
        for network in expected:
            self.network_uuid_to_id(network)
        self.assertEqual({'networks': expected}, res_dict)

    def test_network_list_all_as_admin(self):
        res_dict = self.controller.index(self.admin_req)
        expected = copy.deepcopy(FAKE_NETWORKS)
        for network in expected:
            self.network_uuid_to_id(network)
        self.assertEqual({'networks': expected}, res_dict)

    def test_network_disassociate(self):
        uuid = FAKE_NETWORKS[0]['uuid']
        res = self.controller._disassociate_host_and_project(
            self.req, uuid, {'disassociate': None})
        self._check_status(res, self.controller._disassociate_host_and_project,
                           202)
        self.assertIsNone(self.fake_network_api.networks[0]['project_id'])
        self.assertIsNone(self.fake_network_api.networks[0]['host'])

    def test_network_disassociate_not_found(self):
        self.assertRaises(webob.exc.HTTPNotFound,
                          self.controller._disassociate_host_and_project,
                          self.req, 100, {'disassociate': None})

    def test_network_get_as_user(self):
        uuid = FAKE_USER_NETWORKS[0]['uuid']
        res_dict = self.controller.show(self.req, uuid)
        expected = {'network': copy.deepcopy(FAKE_USER_NETWORKS[0])}
        self.network_uuid_to_id(expected['network'])
        self.assertEqual(expected, res_dict)

    def test_network_get_as_admin(self):
        uuid = FAKE_NETWORKS[0]['uuid']
        res_dict = self.controller.show(self.admin_req, uuid)
        expected = {'network': copy.deepcopy(FAKE_NETWORKS[0])}
        self.network_uuid_to_id(expected['network'])
        self.assertEqual(expected, res_dict)

    def test_network_get_not_found(self):
        self.assertRaises(webob.exc.HTTPNotFound, self.controller.show,
                          self.req, 100)

    def test_network_delete(self):
        res = self.controller.delete(self.req, 1)
        self._check_status(res, self.controller.delete, 202)

    def test_network_delete_not_found(self):
        self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
                          self.req, 100)

    def test_network_delete_in_use(self):
        self.assertRaises(webob.exc.HTTPConflict, self.controller.delete,
                          self.req, -1)

    def test_network_add(self):
        uuid = FAKE_NETWORKS[1]['uuid']
        res = self.controller.add(self.req, body={'id': uuid})
        self._check_status(res, self.controller.add, 202)
        res_dict = self.controller.show(self.admin_req, uuid)
        self.assertEqual(res_dict['network']['project_id'], 'fake')

    @mock.patch('nova.tests.unit.api.openstack.compute.contrib.test_networks.'
                'FakeNetworkAPI.add_network_to_project',
                side_effect=exception.NoMoreNetworks)
    def test_network_add_no_more_networks_fail(self, mock_add):
        uuid = FAKE_NETWORKS[1]['uuid']
        self.assertRaises(webob.exc.HTTPBadRequest,
                          self.controller.add,
                          self.req,
                          body={'id': uuid})

    @mock.patch('nova.tests.unit.api.openstack.compute.contrib.test_networks.'
                'FakeNetworkAPI.add_network_to_project',
                side_effect=exception.NetworkNotFoundForUUID(uuid='fake_uuid'))
    def test_network_add_network_not_found_networks_fail(self, mock_add):
        uuid = FAKE_NETWORKS[1]['uuid']
        self.assertRaises(webob.exc.HTTPBadRequest,
                          self.controller.add,
                          self.req,
                          body={'id': uuid})

    def test_network_add_network_without_body(self):
        self.assertRaises(self.validation_error,
                          self.controller.add,
                          self.req,
                          body=None)

    def test_network_add_network_with_invalid_id(self):
        self.assertRaises(exception.ValidationError,
                          self.controller.add,
                          self.req,
                          body={'id': 123})

    def test_network_add_network_with_extra_arg(self):
        uuid = FAKE_NETWORKS[1]['uuid']
        self.assertRaises(exception.ValidationError,
                          self.controller.add,
                          self.req,
                          body={
                              'id': uuid,
                              'extra_arg': 123
                          })

    def test_network_add_network_with_none_id(self):
        res = self.controller.add(self.req, body={'id': None})
        self._check_status(res, self.controller.add, 202)

    def test_network_create(self):
        res_dict = self.controller.create(self.req, body=self.new_network)
        self.assertIn('network', res_dict)
        uuid = res_dict['network']['id']
        res_dict = self.controller.show(self.req, uuid)
        self.assertTrue(res_dict['network']['label'].startswith(
            NEW_NETWORK['network']['label']))

    def test_network_create_large(self):
        self.new_network['network']['cidr'] = '128.0.0.0/4'
        res_dict = self.controller.create(self.req, body=self.new_network)
        self.assertEqual(res_dict['network']['cidr'],
                         self.new_network['network']['cidr'])

    def test_network_neutron_disassociate_not_implemented(self):
        uuid = FAKE_NETWORKS[1]['uuid']
        self.flags(network_api_class='nova.network.neutronv2.api.API')
        controller = networks.NetworkController()
        self.assertRaises(webob.exc.HTTPNotImplemented,
                          controller._disassociate_host_and_project, self.req,
                          uuid, {'disassociate': None})
Beispiel #3
0
 def network_get_by_uuid(self, context, network_uuid):
     raise exception.NetworkNotFoundForUUID(uuid=network_uuid)