コード例 #1
0
    def test_delete_reservation_provider(self, kss_req):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"
        get_json_mock = {
            'resource_providers': [{
                'uuid': rp_uuid,
                'name': rp_name,
                'generation': 0,
                'parent_provider_uuid': host_uuid
            }]
        }
        mock_call1 = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(get_json_mock))
        mock_call2 = fake_requests.FakeResponse(200)
        kss_req.side_effect = [mock_call1, mock_call2]

        self.client.delete_reservation_provider(host_name)

        expected_url_get = "/resource_providers?name=%s" % rp_name
        self._assert_keystone_called_any(kss_req, expected_url_get, 'GET')

        expected_url_post = "/resource_providers/%s" % rp_uuid
        self._assert_keystone_called_any(kss_req, expected_url_post, 'DELETE')
コード例 #2
0
    def test_create_reservation_provider(self, kss_req):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"
        get_json_mock = {
            'resource_providers': [{
                'uuid': host_uuid,
                'name': host_name,
                'generation': 0,
                'parent_provider_uuid': None
            }]
        }
        post_json_mock = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        mock_call1 = fake_requests.FakeResponse(
            200, content=json.dumps(get_json_mock))
        mock_call2 = fake_requests.FakeResponse(
            200, content=json.dumps(post_json_mock))
        kss_req.side_effect = [mock_call1, mock_call2]

        self.client.create_reservation_provider(host_name)

        expected_url_get = "/resource_providers?name=%s" % host_name
        kss_req.assert_any_call(expected_url_get,
                                'GET',
                                endpoint_filter={
                                    'service_type': 'placement',
                                    'interface': 'public'
                                },
                                headers={'accept': 'application/json'},
                                microversion=PLACEMENT_MICROVERSION,
                                raise_exc=False)

        expected_url_post = "/resource_providers"
        kss_req.assert_any_call(expected_url_post,
                                'POST',
                                endpoint_filter={
                                    'service_type': 'placement',
                                    'interface': 'public'
                                },
                                json={
                                    'name': 'blazar_compute-1',
                                    'parent_provider_uuid': host_uuid
                                },
                                headers={'accept': 'application/json'},
                                microversion=PLACEMENT_MICROVERSION,
                                raise_exc=False)
コード例 #3
0
    def test_create_resource_provider(self, kss_req):
        rp_name = 'Blazar'
        rp_uuid = uuidutils.generate_uuid()
        parent_uuid = uuidutils.generate_uuid()

        mock_json_data = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': parent_uuid
        }

        kss_req.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_json_data))

        result = self.client.create_resource_provider(rp_name,
                                                      rp_uuid=rp_uuid,
                                                      parent_uuid=parent_uuid)

        expected_url = '/resource_providers'
        expected_data = {
            'uuid': rp_uuid,
            'name': rp_name,
            'parent_provider_uuid': parent_uuid
        }
        self._assert_keystone_called_once(kss_req,
                                          expected_url,
                                          'POST',
                                          json=expected_data)
        self.assertEqual(mock_json_data, result)
コード例 #4
0
 def test_put(self, kss_req):
     kss_req.return_value = fake_requests.FakeResponse(200)
     url = '/resource_providers'
     data = {'name': 'unicorn'}
     resp = self.client.put(url, data)
     self.assertEqual(200, resp.status_code)
     self._assert_keystone_called_once(kss_req, url, 'PUT', json=data)
コード例 #5
0
    def test_create_resource_provider(self, kss_req):
        rp_name = 'Blazar'
        rp_uuid = uuidutils.generate_uuid()
        parent_uuid = uuidutils.generate_uuid()

        mock_json_data = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': parent_uuid
        }

        kss_req.return_value = fake_requests.FakeResponse(
            200, content=json.dumps(mock_json_data))

        result = self.client.create_resource_provider(rp_name,
                                                      rp_uuid=rp_uuid,
                                                      parent_uuid=parent_uuid)

        expected_url = '/resource_providers'
        kss_req.assert_called_once_with(expected_url,
                                        'POST',
                                        json={
                                            'uuid': rp_uuid,
                                            'name': rp_name,
                                            'parent_provider_uuid': parent_uuid
                                        },
                                        endpoint_filter={
                                            'service_type': 'placement',
                                            'interface': 'public'
                                        },
                                        headers={'accept': 'application/json'},
                                        microversion=PLACEMENT_MICROVERSION,
                                        raise_exc=False)
        self.assertEqual(mock_json_data, result)
コード例 #6
0
    def test_delete_reservation_inventory(self, kss_req, get_rp):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"

        # Build the mock of current resource provider
        mock_get_rp_json = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        get_rp.return_value = mock_get_rp_json

        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.delete_reservation_inventory(host_name, "curr1")

        expected_url = ('/resource_providers/%s/inventories'
                        '/CUSTOM_RESERVATION_CURR1' % rp_uuid)

        kss_req.assert_called_once_with(expected_url,
                                        'DELETE',
                                        endpoint_filter={
                                            'service_type': 'placement',
                                            'interface': 'public'
                                        },
                                        headers={'accept': 'application/json'},
                                        microversion=PLACEMENT_MICROVERSION,
                                        raise_exc=False)
コード例 #7
0
    def test_delete_reservation_provider_no_rp(self, kss_req):
        host_name = "compute-1"
        rp_name = "blazar_compute-1"
        get_json_mock = {'resource_providers': []}
        mock_call1 = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(get_json_mock))
        mock_call2 = fake_requests.FakeResponse(200)
        kss_req.side_effect = [mock_call1, mock_call2]

        self.client.delete_reservation_provider(host_name)

        expected_url_get = "/resource_providers?name=%s" % rp_name
        self._assert_keystone_called_any(kss_req, expected_url_get, 'GET')

        # Ensure that mock_call2 for delete is not called
        self.assertEqual(kss_req.call_count, 1)
コード例 #8
0
 def test_create_reservation_provider_fail(self, kss_req):
     host_name = "compute-1"
     get_json_mock = {'resource_providers': []}
     kss_req.return_value = fake_requests.FakeResponse(
         200, content=jsonutils.dump_as_bytes(get_json_mock))
     self.assertRaises(exceptions.ResourceProviderNotFound,
                       self.client.create_reservation_provider, host_name)
コード例 #9
0
    def test_get_resource_provider(self, kss_req):
        rp_name = 'blazar'
        rp_uuid = uuidutils.generate_uuid()
        parent_uuid = uuidutils.generate_uuid()

        mock_json_data = {
            'resource_providers': [{
                'uuid': rp_uuid,
                'name': rp_name,
                'generation': 0,
                'parent_provider_uuid': parent_uuid
            }]
        }

        kss_req.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_json_data))

        result = self.client.get_resource_provider(rp_name)

        expected_url = '/resource_providers?name=blazar'
        self._assert_keystone_called_once(kss_req, expected_url, 'GET')
        expected = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': parent_uuid
        }
        self.assertEqual(expected, result)
コード例 #10
0
    def test_delete_reservation_class(self, kss_req):
        rc_name = 'abc-def'
        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.delete_reservation_class(rc_name)

        expected_url = '/resource_classes/CUSTOM_RESERVATION_ABC_DEF'
        self._assert_keystone_called_once(kss_req, expected_url, 'DELETE')
コード例 #11
0
    def test_delete_resource_provider(self, kss_req):
        rp_uuid = uuidutils.generate_uuid()
        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.delete_resource_provider(rp_uuid)

        expected_url = '/resource_providers/' + str(rp_uuid)
        self._assert_keystone_called_once(kss_req, expected_url, 'DELETE')
コード例 #12
0
    def test_create_reservation_class(self, kss_req):
        rc_name = 'abc-def'
        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.create_reservation_class(rc_name)

        expected_url = '/resource_classes'
        expected_data = {'name': 'CUSTOM_RESERVATION_ABC_DEF'}
        self._assert_keystone_called_once(kss_req,
                                          expected_url,
                                          'POST',
                                          json=expected_data)
コード例 #13
0
    def test_get_resource_provider_no_rp(self, kss_req):
        rp_name = 'blazar'

        mock_json_data = {'resource_providers': []}

        kss_req.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_json_data))

        result = self.client.get_resource_provider(rp_name)

        expected_url = '/resource_providers?name=blazar'
        self._assert_keystone_called_once(kss_req, expected_url, 'GET')
        self.assertEqual(None, result)
コード例 #14
0
 def test_delete(self, kss_req):
     kss_req.return_value = fake_requests.FakeResponse(200)
     url = '/resource_providers'
     resp = self.client.delete(url)
     self.assertEqual(200, resp.status_code)
     kss_req.assert_called_once_with(url,
                                     'DELETE',
                                     endpoint_filter={
                                         'service_type': 'placement',
                                         'interface': 'public'
                                     },
                                     headers={'accept': 'application/json'},
                                     microversion=PLACEMENT_MICROVERSION,
                                     raise_exc=False)
コード例 #15
0
    def test_delete_reservation_provider_no_rp(self, kss_req):
        host_name = "compute-1"
        rp_name = "blazar_compute-1"
        get_json_mock = {'resource_providers': []}
        mock_call1 = fake_requests.FakeResponse(
            200, content=json.dumps(get_json_mock))
        mock_call2 = fake_requests.FakeResponse(200)
        kss_req.side_effect = [mock_call1, mock_call2]

        self.client.delete_reservation_provider(host_name)

        expected_url_get = "/resource_providers?name=%s" % rp_name
        kss_req.assert_any_call(expected_url_get,
                                'GET',
                                endpoint_filter={
                                    'service_type': 'placement',
                                    'interface': 'public'
                                },
                                headers={'accept': 'application/json'},
                                microversion=PLACEMENT_MICROVERSION,
                                raise_exc=False)

        # Ensure that mock_call2 for delete is not called
        self.assertEqual(kss_req.call_count, 1)
コード例 #16
0
    def test_delete_reservation_class(self, kss_req):
        rc_name = 'abc-def'
        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.delete_reservation_class(rc_name)

        expected_url = '/resource_classes/CUSTOM_RESERVATION_ABC_DEF'
        kss_req.assert_called_once_with(expected_url,
                                        'DELETE',
                                        endpoint_filter={
                                            'service_type': 'placement',
                                            'interface': 'public'
                                        },
                                        headers={'accept': 'application/json'},
                                        microversion=PLACEMENT_MICROVERSION,
                                        raise_exc=False)
コード例 #17
0
    def test_delete_resource_provider(self, kss_req):
        rp_uuid = uuidutils.generate_uuid()
        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.delete_resource_provider(rp_uuid)

        expected_url = '/resource_providers/' + str(rp_uuid)
        kss_req.assert_called_once_with(expected_url,
                                        'DELETE',
                                        endpoint_filter={
                                            'service_type': 'placement',
                                            'interface': 'public'
                                        },
                                        headers={'accept': 'application/json'},
                                        microversion=PLACEMENT_MICROVERSION,
                                        raise_exc=False)
コード例 #18
0
    def test_delete_reservation_inventory_no_rc(self, kss_req, get_rp):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"

        # Build the mock of current resource provider
        mock_get_rp_json = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        get_rp.return_value = mock_get_rp_json

        # If no reservation class found or if no inventory found,
        # then the placement API returns 404 error.
        kss_req.return_value = fake_requests.FakeResponse(404)
        # Ensure that no error is raised
        self.client.delete_reservation_inventory(host_name, "curr1")
コード例 #19
0
    def test_get_resource_provider_no_rp(self, kss_req):
        rp_name = 'blazar'

        mock_json_data = {'resource_providers': []}

        kss_req.return_value = fake_requests.FakeResponse(
            200, content=json.dumps(mock_json_data))

        result = self.client.get_resource_provider(rp_name)

        expected_url = '/resource_providers?name=blazar'
        kss_req.assert_called_once_with(expected_url,
                                        'GET',
                                        endpoint_filter={
                                            'service_type': 'placement',
                                            'interface': 'public'
                                        },
                                        headers={'accept': 'application/json'},
                                        microversion=PLACEMENT_MICROVERSION,
                                        raise_exc=False)
        self.assertEqual(None, result)
コード例 #20
0
    def test_delete_reservation_inventory(self, kss_req, get_rp):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"

        # Build the mock of current resource provider
        mock_get_rp_json = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        get_rp.return_value = mock_get_rp_json

        kss_req.return_value = fake_requests.FakeResponse(200)

        self.client.delete_reservation_inventory(host_name, "curr1")

        expected_url = ('/resource_providers/%s/inventories'
                        '/CUSTOM_RESERVATION_CURR1' % rp_uuid)

        self._assert_keystone_called_once(kss_req, expected_url, 'DELETE')
コード例 #21
0
    def test_add_reservation_inventory(self, kss_req, client_get, get_rp):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"

        # Build the mock of current resource provider
        mock_get_rp_json = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        get_rp.return_value = mock_get_rp_json

        # Build the mock of "current" inventory for get_inventory()
        curr_gen = 11
        mock_get_inv_json = {
            'inventories': {
                'CUSTOM_RESERVATION_CURR': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 1
                },
            },
            "resource_provider_generation": curr_gen
        }
        client_get.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_get_inv_json))

        # Build the mock of "updated" inventory for update_inventory()
        update_gen = 12
        mock_put_json = {
            'inventories': {
                'CUSTOM_RESERVATION_CURR': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 3
                },
            },
            "resource_provider_generation": update_gen
        }
        kss_req.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_put_json))

        result = self.client.update_reservation_inventory(host_name,
                                                          'curr',
                                                          2,
                                                          additional=True)

        expected_data = {
            'inventories': {
                'CUSTOM_RESERVATION_CURR': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 3
                }
            },
            "resource_provider_generation": curr_gen
        }
        expected_url = '/resource_providers/%s/inventories' % rp_uuid
        self._assert_keystone_called_once(kss_req,
                                          expected_url,
                                          'PUT',
                                          json=expected_data)
        self.assertEqual(mock_put_json, result)
コード例 #22
0
    def test_update_reservation_inventory_no_rp(self, kss_req, client_get,
                                                create_rp, get_rp):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"

        # Build the mock that there is no existing reservation provider
        get_rp.return_value = None

        # Build the mock of created resource provider
        mock_post_rp_json = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        create_rp.return_value = mock_post_rp_json

        # Build the mock of "current" inventory for get_inventory()
        curr_gen = 0
        mock_get_inv_json = {
            'inventories': {},
            "resource_provider_generation": curr_gen
        }
        client_get.return_value = fake_requests.FakeResponse(
            200, content=json.dumps(mock_get_inv_json))

        # Build the mock of "updated" inventory for update_inventory()
        update_gen = 1
        mock_put_json = {
            'inventories': {
                'CUSTOM_RESERVATION_ADD': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 3
                },
            },
            "resource_provider_generation": update_gen
        }
        kss_req.return_value = fake_requests.FakeResponse(
            200, content=json.dumps(mock_put_json))

        result = self.client.update_reservation_inventory(host_name, 'add', 3)

        # Ensure that the create_reservation_provider() is called.
        create_rp.assert_called_once_with(host_name)

        expected_data = {
            'inventories': {
                'CUSTOM_RESERVATION_ADD': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 3
                },
            },
            "resource_provider_generation": curr_gen
        }
        expected_url = '/resource_providers/%s/inventories' % rp_uuid
        kss_req.assert_called_once_with(expected_url,
                                        'PUT',
                                        json=expected_data,
                                        endpoint_filter={
                                            'service_type': 'placement',
                                            'interface': 'public'
                                        },
                                        headers={'accept': 'application/json'},
                                        microversion=PLACEMENT_MICROVERSION,
                                        raise_exc=False)
        self.assertEqual(mock_put_json, result)
コード例 #23
0
 def test_delete_reservation_class_fail(self, kss_req):
     rc_name = 'abc-def'
     # If no reservation class found, the placement API returns 404 error.
     kss_req.return_value = fake_requests.FakeResponse(404)
     # Ensure that no error is raised
     self.client.delete_reservation_class(rc_name)
コード例 #24
0
    def test_create_reservation_class_fail(self, kss_req):
        rc_name = 'abc-def'
        kss_req.return_value = fake_requests.FakeResponse(400)

        self.assertRaises(exceptions.ResourceClassCreationFailed,
                          self.client.create_reservation_class, rc_name)
コード例 #25
0
    def test_update_reservation_inventory_no_rp(self, kss_req, client_get,
                                                create_rp, get_rp):
        host_uuid = uuidutils.generate_uuid()
        host_name = "compute-1"
        rp_uuid = uuidutils.generate_uuid()
        rp_name = "blazar_compute-1"

        # Build the mock that there is no existing reservation provider
        get_rp.return_value = None

        # Build the mock of created resource provider
        mock_post_rp_json = {
            'uuid': rp_uuid,
            'name': rp_name,
            'generation': 0,
            'parent_provider_uuid': host_uuid
        }
        create_rp.return_value = mock_post_rp_json

        # Build the mock of "current" inventory for get_inventory()
        curr_gen = 0
        mock_get_inv_json = {
            'inventories': {},
            "resource_provider_generation": curr_gen
        }
        client_get.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_get_inv_json))

        # Build the mock of "updated" inventory for update_inventory()
        update_gen = 1
        mock_put_json = {
            'inventories': {
                'CUSTOM_RESERVATION_ADD': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 3
                },
            },
            "resource_provider_generation": update_gen
        }
        kss_req.return_value = fake_requests.FakeResponse(
            200, content=jsonutils.dump_as_bytes(mock_put_json))

        result = self.client.update_reservation_inventory(host_name, 'add', 3)

        # Ensure that the create_reservation_provider() is called.
        create_rp.assert_called_once_with(host_name)

        expected_data = {
            'inventories': {
                'CUSTOM_RESERVATION_ADD': {
                    "allocation_ratio": 1.0,
                    "max_unit": 1,
                    "min_unit": 1,
                    "reserved": 0,
                    "step_size": 1,
                    "total": 3
                },
            },
            "resource_provider_generation": curr_gen
        }
        expected_url = '/resource_providers/%s/inventories' % rp_uuid
        self._assert_keystone_called_once(kss_req,
                                          expected_url,
                                          'PUT',
                                          json=expected_data)
        self.assertEqual(mock_put_json, result)
コード例 #26
0
    def test_delete_resource_provider_fail(self, kss_req):
        rp_uuid = uuidutils.generate_uuid()
        kss_req.return_value = fake_requests.FakeResponse(404)

        self.assertRaises(exceptions.ResourceProviderDeletionFailed,
                          self.client.delete_resource_provider, rp_uuid)
コード例 #27
0
    def test_create_resource_provider_fail(self, kss_req):
        rp_name = 'Blazar'
        kss_req.return_value = fake_requests.FakeResponse(404)

        self.assertRaises(exceptions.ResourceProviderCreationFailed,
                          self.client.create_resource_provider, rp_name)
コード例 #28
0
    def test_get_resource_provider_fail(self, kss_req):
        rp_name = 'blazar'
        kss_req.return_value = fake_requests.FakeResponse(404)

        self.assertRaises(exceptions.ResourceProviderRetrievalFailed,
                          self.client.get_resource_provider, rp_name)
コード例 #29
0
 def test_delete(self, kss_req):
     kss_req.return_value = fake_requests.FakeResponse(200)
     url = '/resource_providers'
     resp = self.client.delete(url)
     self.assertEqual(200, resp.status_code)
     self._assert_keystone_called_once(kss_req, url, 'DELETE')