nova/nova/tests/unit/objects/test_ec2.py

278 lines
10 KiB
Python

# Copyright (C) 2014, Red Hat, Inc.
#
# 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 import db
from nova import objects
from nova.objects import ec2 as ec2_obj
from nova.tests.unit.objects import test_objects
fake_map = {
'created_at': None,
'updated_at': None,
'deleted_at': None,
'deleted': 0,
'id': 1,
'uuid': 'fake-uuid-2',
}
class _TestEC2InstanceMapping(object):
@staticmethod
def _compare(test, db, obj):
for field, value in db.items():
test.assertEqual(db[field], obj[field])
def test_create(self):
imap = ec2_obj.EC2InstanceMapping(context=self.context)
imap.uuid = 'fake-uuid-2'
with mock.patch.object(db, 'ec2_instance_create') as create:
create.return_value = fake_map
imap.create()
self.assertEqual(self.context, imap._context)
imap._context = None
self._compare(self, fake_map, imap)
def test_get_by_uuid(self):
with mock.patch.object(db, 'ec2_instance_get_by_uuid') as get:
get.return_value = fake_map
imap = ec2_obj.EC2InstanceMapping.get_by_uuid(self.context,
'fake-uuid-2')
self._compare(self, fake_map, imap)
def test_get_by_ec2_id(self):
with mock.patch.object(db, 'ec2_instance_get_by_id') as get:
get.return_value = fake_map
imap = ec2_obj.EC2InstanceMapping.get_by_id(self.context, 1)
self._compare(self, fake_map, imap)
class TestEC2InstanceMapping(test_objects._LocalTest, _TestEC2InstanceMapping):
pass
class TestRemoteEC2InstanceMapping(test_objects._RemoteTest,
_TestEC2InstanceMapping):
pass
class _TestEC2VolumeMapping(object):
@staticmethod
def _compare(test, db, obj):
for field, value in db.items():
test.assertEqual(db[field], obj[field])
def test_create(self):
vmap = ec2_obj.EC2VolumeMapping(context=self.context)
vmap.uuid = 'fake-uuid-2'
with mock.patch.object(db, 'ec2_volume_create') as create:
create.return_value = fake_map
vmap.create()
self.assertEqual(self.context, vmap._context)
vmap._context = None
self._compare(self, fake_map, vmap)
def test_get_by_uuid(self):
with mock.patch.object(db, 'ec2_volume_get_by_uuid') as get:
get.return_value = fake_map
vmap = ec2_obj.EC2VolumeMapping.get_by_uuid(self.context,
'fake-uuid-2')
self._compare(self, fake_map, vmap)
def test_get_by_ec2_id(self):
with mock.patch.object(db, 'ec2_volume_get_by_id') as get:
get.return_value = fake_map
vmap = ec2_obj.EC2VolumeMapping.get_by_id(self.context, 1)
self._compare(self, fake_map, vmap)
class TestEC2VolumeMapping(test_objects._LocalTest, _TestEC2VolumeMapping):
pass
class TestRemoteEC2VolumeMapping(test_objects._RemoteTest,
_TestEC2VolumeMapping):
pass
class _TestEC2SnapshotMapping(object):
@staticmethod
def _compare(test, db, obj):
for field, value in db.items():
test.assertEqual(db[field], obj[field])
def test_create(self):
smap = ec2_obj.EC2SnapshotMapping(context=self.context)
smap.uuid = 'fake-uuid-2'
with mock.patch.object(db, 'ec2_snapshot_create') as create:
create.return_value = fake_map
smap.create()
self.assertEqual(self.context, smap._context)
smap._context = None
self._compare(self, fake_map, smap)
def test_get_by_uuid(self):
with mock.patch.object(db, 'ec2_snapshot_get_by_uuid') as get:
get.return_value = fake_map
smap = ec2_obj.EC2SnapshotMapping.get_by_uuid(self.context,
'fake-uuid-2')
self._compare(self, fake_map, smap)
def test_get_by_ec2_id(self):
with mock.patch.object(db, 'ec2_snapshot_get_by_ec2_id') as get:
get.return_value = fake_map
smap = ec2_obj.EC2SnapshotMapping.get_by_id(self.context, 1)
self._compare(self, fake_map, smap)
class TestEC2SnapshotMapping(test_objects._LocalTest, _TestEC2SnapshotMapping):
pass
class TestRemoteEC2SnapshotMapping(test_objects._RemoteTest,
_TestEC2SnapshotMapping):
pass
class _TestS3ImageMapping(object):
@staticmethod
def _compare(test, db, obj):
for field, value in db.items():
test.assertEqual(db[field], obj[field])
def test_create(self):
s3imap = ec2_obj.S3ImageMapping(context=self.context)
s3imap.uuid = 'fake-uuid-2'
with mock.patch.object(db, 's3_image_create') as create:
create.return_value = fake_map
s3imap.create()
self.assertEqual(self.context, s3imap._context)
s3imap._context = None
self._compare(self, fake_map, s3imap)
def test_get_by_uuid(self):
with mock.patch.object(db, 's3_image_get_by_uuid') as get:
get.return_value = fake_map
s3imap = ec2_obj.S3ImageMapping.get_by_uuid(self.context,
'fake-uuid-2')
self._compare(self, fake_map, s3imap)
def test_get_by_s3_id(self):
with mock.patch.object(db, 's3_image_get') as get:
get.return_value = fake_map
s3imap = ec2_obj.S3ImageMapping.get_by_id(self.context, 1)
self._compare(self, fake_map, s3imap)
class TestS3ImageMapping(test_objects._LocalTest, _TestS3ImageMapping):
pass
class TestRemoteS3ImageMapping(test_objects._RemoteTest, _TestS3ImageMapping):
pass
class _TestEC2Ids(object):
@mock.patch('nova.api.ec2.ec2utils.image_type')
@mock.patch('nova.api.ec2.ec2utils.glance_id_to_ec2_id')
@mock.patch('nova.api.ec2.ec2utils.id_to_ec2_inst_id')
def test_get_by_instance(self, mock_inst, mock_glance, mock_type):
mock_inst.return_value = 'fake-ec2-inst-id'
mock_glance.side_effect = ['fake-ec2-ami-id',
'fake-ec2-kernel-id',
'fake-ec2-ramdisk-id']
mock_type.side_effect = [mock.sentinel.ec2_kernel_type,
mock.sentinel.ec2_ramdisk_type]
inst = objects.Instance(uuid='fake-uuid', image_ref='fake-image-id',
kernel_id='fake-kernel-id',
ramdisk_id='fake-ramdisk-id')
result = ec2_obj.EC2Ids.get_by_instance(self.context, inst)
self.assertEqual('fake-ec2-inst-id', result.instance_id)
self.assertEqual('fake-ec2-ami-id', result.ami_id)
self.assertEqual('fake-ec2-kernel-id', result.kernel_id)
self.assertEqual('fake-ec2-ramdisk-id', result.ramdisk_id)
@mock.patch('nova.api.ec2.ec2utils.glance_id_to_ec2_id')
@mock.patch('nova.api.ec2.ec2utils.id_to_ec2_inst_id')
def test_get_by_instance_no_image_ref(self, mock_inst, mock_glance):
mock_inst.return_value = 'fake-ec2-inst-id'
mock_glance.return_value = None
inst = objects.Instance(uuid='fake-uuid', image_ref=None,
kernel_id=None, ramdisk_id=None)
result = ec2_obj.EC2Ids.get_by_instance(self.context, inst)
self.assertEqual('fake-ec2-inst-id', result.instance_id)
self.assertIsNone(result.ami_id)
self.assertIsNone(result.kernel_id)
self.assertIsNone(result.ramdisk_id)
@mock.patch('nova.api.ec2.ec2utils.image_type')
@mock.patch('nova.api.ec2.ec2utils.glance_id_to_ec2_id')
@mock.patch('nova.api.ec2.ec2utils.id_to_ec2_inst_id')
def test_get_by_instance_no_kernel_id(self, mock_inst, mock_glance,
mock_type):
mock_inst.return_value = 'fake-ec2-inst-id'
mock_glance.side_effect = ['fake-ec2-ami-id',
'fake-ec2-ramdisk-id']
mock_type.return_value = mock.sentinel.ec2_ramdisk_type
inst = objects.Instance(uuid='fake-uuid', image_ref='fake-image-id',
kernel_id=None, ramdisk_id='fake-ramdisk-id')
result = ec2_obj.EC2Ids.get_by_instance(self.context, inst)
self.assertEqual('fake-ec2-inst-id', result.instance_id)
self.assertEqual('fake-ec2-ami-id', result.ami_id)
self.assertIsNone(result.kernel_id)
self.assertEqual('fake-ec2-ramdisk-id', result.ramdisk_id)
@mock.patch('nova.api.ec2.ec2utils.image_type')
@mock.patch('nova.api.ec2.ec2utils.glance_id_to_ec2_id')
@mock.patch('nova.api.ec2.ec2utils.id_to_ec2_inst_id')
def test_get_by_instance_no_ramdisk_id(self, mock_inst, mock_glance,
mock_type):
mock_inst.return_value = 'fake-ec2-inst-id'
mock_glance.side_effect = ['fake-ec2-ami-id',
'fake-ec2-kernel-id']
mock_type.return_value = mock.sentinel.ec2_kernel_type
inst = objects.Instance(uuid='fake-uuid', image_ref='fake-image-id',
kernel_id='fake-kernel-id', ramdisk_id=None)
result = ec2_obj.EC2Ids.get_by_instance(self.context, inst)
self.assertEqual('fake-ec2-inst-id', result.instance_id)
self.assertEqual('fake-ec2-ami-id', result.ami_id)
self.assertEqual('fake-ec2-kernel-id', result.kernel_id)
self.assertIsNone(result.ramdisk_id)
class TestEC2Ids(test_objects._LocalTest, _TestEC2Ids):
pass
class TestRemoteEC2Ids(test_objects._RemoteTest, _TestEC2Ids):
pass