nova/nova/tests/unit/objects/test_tag.py

116 lines
3.7 KiB
Python

# 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 nova.objects import tag
from nova.tests.unit.objects import test_objects
RESOURCE_ID = '123'
TAG_NAME1 = 'fake-tag1'
TAG_NAME2 = 'fake-tag2'
fake_tag1 = {
'resource_id': RESOURCE_ID,
'tag': TAG_NAME1,
}
fake_tag2 = {
'resource_id': RESOURCE_ID,
'tag': TAG_NAME1,
}
fake_tag_list = [fake_tag1, fake_tag2]
def _get_tag(resource_id, tag_name, context=None):
t = tag.Tag(context=context)
t.resource_id = resource_id
t.tag = tag_name
return t
class _TestTagObject(object):
@mock.patch('nova.db.api.instance_tag_add')
def test_create(self, tag_add):
tag_add.return_value = fake_tag1
tag_obj = _get_tag(RESOURCE_ID, TAG_NAME1, context=self.context)
tag_obj.create()
tag_add.assert_called_once_with(self.context, RESOURCE_ID, TAG_NAME1)
self.compare_obj(tag_obj, fake_tag1)
@mock.patch('nova.db.api.instance_tag_delete')
def test_destroy(self, tag_delete):
tag.Tag.destroy(self.context, RESOURCE_ID, TAG_NAME1)
tag_delete.assert_called_once_with(self.context,
RESOURCE_ID, TAG_NAME1)
@mock.patch('nova.db.api.instance_tag_exists')
def test_exists(self, instance_tag_exists):
tag.Tag.exists(self.context, RESOURCE_ID, TAG_NAME1)
instance_tag_exists.assert_called_once_with(
self.context, RESOURCE_ID, TAG_NAME1)
class TestMigrationObject(test_objects._LocalTest,
_TestTagObject):
pass
class TestRemoteMigrationObject(test_objects._RemoteTest,
_TestTagObject):
pass
class _TestTagList(object):
def _compare_tag_list(self, tag_list, tag_list_obj):
self.assertEqual(len(tag_list), len(tag_list_obj))
for obj, fake in zip(tag_list_obj, tag_list):
self.assertIsInstance(obj, tag.Tag)
self.assertEqual(obj.tag, fake['tag'])
self.assertEqual(obj.resource_id, fake['resource_id'])
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
def test_get_by_resource_id(self, get_by_inst):
get_by_inst.return_value = fake_tag_list
tag_list_obj = tag.TagList.get_by_resource_id(
self.context, RESOURCE_ID)
get_by_inst.assert_called_once_with(self.context, RESOURCE_ID)
self._compare_tag_list(fake_tag_list, tag_list_obj)
@mock.patch('nova.db.api.instance_tag_set')
def test_create(self, tag_set):
tag_set.return_value = fake_tag_list
tag_list_obj = tag.TagList.create(
self.context, RESOURCE_ID, [TAG_NAME1, TAG_NAME2])
tag_set.assert_called_once_with(self.context,
RESOURCE_ID, [TAG_NAME1, TAG_NAME2])
self._compare_tag_list(fake_tag_list, tag_list_obj)
@mock.patch('nova.db.api.instance_tag_delete_all')
def test_destroy(self, tag_delete_all):
tag.TagList.destroy(self.context, RESOURCE_ID)
tag_delete_all.assert_called_once_with(self.context, RESOURCE_ID)
class TestTagList(test_objects._LocalTest, _TestTagList):
pass
class TestTagListRemote(test_objects._RemoteTest, _TestTagList):
pass