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:
liusheng
2017-08-03 09:16:06 +08:00
parent 2dc155534f
commit 018ca895e7
4 changed files with 259 additions and 0 deletions

View 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']))

View 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'])

View File

@@ -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'

View 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)