Add API tests for server group
This change add some tests for server groups Partially Implements: bp server-group-api-extension Change-Id: Ib532d401a5e421a1bebe286a4eda83601a06c7fe
This commit is contained in:
79
mogan/tests/functional/api/v1/test_server_groups.py
Normal file
79
mogan/tests/functional/api/v1/test_server_groups.py
Normal file
@@ -0,0 +1,79 @@
|
||||
# Copyright 2017 Huawei Technologies Co., Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import random
|
||||
import six
|
||||
|
||||
from mogan.tests.functional.api import v1 as v1_test
|
||||
|
||||
|
||||
class TestServerGroup(v1_test.APITestV1):
|
||||
def setUp(self):
|
||||
super(TestServerGroup, self).setUp()
|
||||
self.headers = self.gen_headers(self.context, roles="admin")
|
||||
|
||||
def _prepare_server_groups(self):
|
||||
server_groups = []
|
||||
for i in six.moves.xrange(4):
|
||||
body = {"name": "test_sg" + str(i),
|
||||
"policies": [random.choice(['anti-affinity', 'affinity'])]}
|
||||
resp = self.post_json('/server_groups', body,
|
||||
headers=self.headers,
|
||||
status=201)
|
||||
server_groups.append(resp.json)
|
||||
return server_groups
|
||||
|
||||
def test_server_group_post(self):
|
||||
body = {"name": "test_server_group",
|
||||
"policies": ['anti-affinity']}
|
||||
resp = self.post_json(
|
||||
'/server_groups', body, headers=self.headers, status=201)
|
||||
resp = resp.json
|
||||
self.assertEqual('test_server_group', resp['name'])
|
||||
self.assertEqual(['anti-affinity'], resp['policies'])
|
||||
self.assertEqual([], resp['members'])
|
||||
self.assertIn('uuid', resp)
|
||||
self.assertIn('links', resp)
|
||||
self.assertIn('project_id', resp)
|
||||
self.assertIn('user_id', resp)
|
||||
self.assertIn('updated_at', resp)
|
||||
self.assertIn('created_at', resp)
|
||||
|
||||
def test_server_group_get_all(self):
|
||||
self._prepare_server_groups()
|
||||
resp = self.get_json('/server_groups', headers=self.headers)
|
||||
self.assertEqual(4, len(resp['server_groups']))
|
||||
|
||||
def test_server_group_get_one(self):
|
||||
sgs = self._prepare_server_groups()
|
||||
resp = self.get_json('/server_groups/' + sgs[0]['uuid'],
|
||||
headers=self.headers)
|
||||
self.assertEqual('test_sg0', resp['name'])
|
||||
self.assertEqual([], resp['members'])
|
||||
self.assertIn('policies', resp)
|
||||
self.assertIn('uuid', resp)
|
||||
self.assertIn('links', resp)
|
||||
self.assertIn('project_id', resp)
|
||||
self.assertIn('user_id', resp)
|
||||
self.assertIn('updated_at', resp)
|
||||
self.assertIn('created_at', resp)
|
||||
|
||||
def test_server_group_delete(self):
|
||||
sgs = self._prepare_server_groups()
|
||||
resp = self.get_json('/server_groups', headers=self.headers)
|
||||
self.assertEqual(4, len(resp['server_groups']))
|
||||
self.delete('/server_groups/' + sgs[0]['uuid'],
|
||||
headers=self.headers, status=204)
|
||||
resp = self.get_json('/server_groups', headers=self.headers)
|
||||
self.assertEqual(3, len(resp['server_groups']))
|
||||
75
mogan/tests/tempest/api/test_server_groups.py
Normal file
75
mogan/tests/tempest/api/test_server_groups.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# Copyright 2017 Huawei Technologies Co., Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
|
||||
from mogan.tests.tempest.api import base
|
||||
|
||||
|
||||
class BaremetalComputeAPIServerGroupsTest(base.BaseBaremetalComputeTest):
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(BaremetalComputeAPIServerGroupsTest, cls).resource_setup()
|
||||
sg_body = {
|
||||
"name": "tempest-test-server_group",
|
||||
"policies": ["anti-affinity"]
|
||||
}
|
||||
cls.server_group = cls.baremetal_compute_client.create_server_group(
|
||||
**sg_body)
|
||||
|
||||
@classmethod
|
||||
def resource_cleanup(cls):
|
||||
super(BaremetalComputeAPIServerGroupsTest, cls).resource_cleanup()
|
||||
cls.baremetal_compute_client.delete_server_group(
|
||||
cls.server_group['uuid'])
|
||||
|
||||
@decorators.idempotent_id('7fd1b48d-54ad-4848-8653-02d313e99cb7')
|
||||
def test_server_group_create(self):
|
||||
sg_body = {
|
||||
"name": "test-server-group",
|
||||
"policies": ["anti-affinity"]
|
||||
}
|
||||
server_group = self.baremetal_compute_client.create_server_group(
|
||||
**sg_body)
|
||||
self.assertEqual("test-server-group", server_group['name'])
|
||||
self.assertItemsEqual(["anti-affinity"], server_group['policies'])
|
||||
self.baremetal_compute_client.delete_server_group(server_group['uuid'])
|
||||
|
||||
@decorators.idempotent_id('e174bcb7-d7fc-467a-8343-a27dd8b2e13c')
|
||||
def test_server_group_show(self):
|
||||
server_group = self.baremetal_compute_client.show_server_group(
|
||||
self.server_group['uuid'])
|
||||
self.assertEqual("tempest-test-server_group", server_group['name'])
|
||||
self.assertItemsEqual(["anti-affinity"], server_group['policies'])
|
||||
|
||||
@decorators.idempotent_id('b71d790b-92da-4625-8fea-eb79ff4a7a57')
|
||||
def test_server_groups_list(self):
|
||||
server_groups = self.baremetal_compute_client.list_server_groups()
|
||||
self.assertEqual(1, len(server_groups))
|
||||
server_group = server_groups[0]
|
||||
self.assertEqual("tempest-test-server_group", server_group['name'])
|
||||
self.assertItemsEqual(["anti-affinity"], server_group['policies'])
|
||||
|
||||
@decorators.idempotent_id('d14b8011-ce6e-4454-b94d-06b5d5c1ed83')
|
||||
def test_server_group_delete(self):
|
||||
sg_body = {
|
||||
"name": "test-server-group-delete",
|
||||
"policies": ["anti-affinity"]
|
||||
}
|
||||
server_group = self.baremetal_compute_client.create_server_group(
|
||||
**sg_body)
|
||||
self.baremetal_compute_client.delete_server_group(server_group['uuid'])
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.baremetal_compute_client.show_server_group,
|
||||
server_group['uuid'])
|
||||
@@ -264,6 +264,36 @@ class BaremetalComputeClient(rest_client.RestClient):
|
||||
body = self.deserialize(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_server_groups(self):
|
||||
uri = '%s/server_groups' % self.uri_prefix
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
body = self.deserialize(body)['server_groups']
|
||||
return rest_client.ResponseBodyList(resp, body)
|
||||
|
||||
def show_server_group(self, sg_uuid):
|
||||
uri = '%s/server_groups/%s' % (self.uri_prefix, sg_uuid)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
body = self.deserialize(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_server_group(self, sg_uuid):
|
||||
uri = "%s/server_groups/%s" % (self.uri_prefix, sg_uuid)
|
||||
resp, body = self.delete(uri)
|
||||
self.expected_success(204, resp.status)
|
||||
if body:
|
||||
body = self.deserialize(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def create_server_group(self, **kwargs):
|
||||
uri = "%s/server_groups" % self.uri_prefix
|
||||
body = self.serialize(kwargs)
|
||||
resp, body = self.post(uri, body)
|
||||
self.expected_success(201, resp.status)
|
||||
body = self.deserialize(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
|
||||
class BaremetalNodeClient(rest_client.RestClient):
|
||||
version = '1'
|
||||
|
||||
75
mogan/tests/unit/objects/test_server_group.py
Normal file
75
mogan/tests/unit/objects/test_server_group.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import mock
|
||||
from oslo_context import context
|
||||
|
||||
from mogan import objects
|
||||
from mogan.tests.unit.db import base
|
||||
from mogan.tests.unit.db import utils
|
||||
|
||||
|
||||
class TestServerGroupObject(base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestServerGroupObject, self).setUp()
|
||||
self.ctxt = context.get_admin_context()
|
||||
self.fake_db_server_group = utils.get_test_server_group(
|
||||
user_id=None, project_id=None)
|
||||
|
||||
def test_get_by_uuid(self):
|
||||
uuid = self.fake_db_server_group['uuid']
|
||||
with mock.patch.object(self.dbapi, 'server_group_get',
|
||||
autospec=True) as mock_server_group_get:
|
||||
mock_server_group_get.return_value = self.fake_db_server_group
|
||||
server_group = objects.ServerGroup.get_by_uuid(self.context, uuid)
|
||||
mock_server_group_get.assert_called_once_with(self.context, uuid)
|
||||
self.assertEqual(self.context, server_group._context)
|
||||
|
||||
def test_create(self):
|
||||
with mock.patch.object(self.dbapi, 'server_group_create',
|
||||
autospec=True) as mock_server_group_create:
|
||||
mock_server_group_create.return_value = self.fake_db_server_group
|
||||
server_group = objects.ServerGroup(self.context,
|
||||
**self.fake_db_server_group)
|
||||
values = server_group.obj_get_changes()
|
||||
policies = values.pop('policies', None)
|
||||
members = values.pop('members', None)
|
||||
server_group.create()
|
||||
mock_server_group_create.assert_called_once_with(
|
||||
self.context, values, policies=policies, members=members)
|
||||
self.assertEqual(self.fake_db_server_group['uuid'],
|
||||
server_group['uuid'])
|
||||
|
||||
def test_delete(self):
|
||||
sg_uuid = self.fake_db_server_group['uuid']
|
||||
with mock.patch.object(self.dbapi, 'server_group_delete',
|
||||
autospec=True) as mock_server_group_delete:
|
||||
server_group = objects.ServerGroup(self.context,
|
||||
**self.fake_db_server_group)
|
||||
server_group.destroy()
|
||||
mock_server_group_delete.assert_called_once_with(
|
||||
self.context, sg_uuid)
|
||||
|
||||
def test_save(self):
|
||||
sg_uuid = self.fake_db_server_group['uuid']
|
||||
with mock.patch.object(self.dbapi, 'server_group_update',
|
||||
autospec=True) as mock_server_group_update:
|
||||
server_group = objects.ServerGroup(self.context,
|
||||
**self.fake_db_server_group)
|
||||
server_group.name = 'new_sg'
|
||||
updates = server_group.obj_get_changes()
|
||||
server_group.save(self.context)
|
||||
mock_server_group_update.return_value = self.fake_db_server_group
|
||||
mock_server_group_update.assert_called_once_with(
|
||||
self.context, sg_uuid, updates)
|
||||
Reference in New Issue
Block a user