116 lines
3.7 KiB
Python
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.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.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.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.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.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.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
|