Merge "Remove unit test for etcd api"

This commit is contained in:
Zuul 2019-02-13 04:43:28 +00:00 committed by Gerrit Code Review
commit 0622e15840
12 changed files with 2 additions and 1923 deletions

View File

@ -11,23 +11,15 @@
# under the License.
"""Tests for manipulating Capsule via the DB API"""
import json
import etcd
from etcd import Client as etcd_client
import mock
from oslo_config import cfg
from oslo_utils import uuidutils
import six
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcdapi
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
CONF = zun.conf.CONF
@ -166,195 +158,3 @@ class SqlDbCapsuleTestCase(base.DbTestCase):
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_capsule, self.context,
capsule.id, {'uuid': ''})
class EtcdDbCapsuleTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbCapsuleTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_capsule(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_capsule(context=self.context)
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_capsule,
context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_capsule_by_uuid(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
capsule = utils.create_test_capsule(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
capsule.as_dict())
res = dbapi.get_capsule_by_uuid(self.context,
capsule.uuid)
self.assertEqual(capsule.id, res.id)
self.assertEqual(capsule.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_capsule_by_meta_name(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
capsule = utils.create_test_capsule(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[capsule.as_dict()])
res = dbapi.get_capsule_by_meta_name(
self.context, capsule.meta_name)
self.assertEqual(capsule.id, res.id)
self.assertEqual(capsule.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
def test_get_nonexists_capsule(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.CapsuleNotFound,
dbapi.get_capsule_by_uuid,
self.context,
uuidutils.generate_uuid())
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_capsules(self, mock_db_inst, mock_write, mock_read):
uuids = []
capsules = []
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
capsule = utils.create_test_capsule(
uuid=uuidutils.generate_uuid(),
context=self.context,
name='capsule' + str(i))
capsules.append(capsule.as_dict())
uuids.append(six.text_type(capsule['uuid']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
capsules)
res = dbapi.list_capsules(self.context)
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), sorted(res_uuids))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_capsules_sorted(self, mock_db_inst,
mock_write, mock_read):
uuids = []
capsules = []
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
capsule = utils.create_test_capsule(
uuid=uuidutils.generate_uuid(),
context=self.context,
name='capsule' + str(i))
capsules.append(capsule.as_dict())
uuids.append(six.text_type(capsule['uuid']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
capsules)
res = dbapi.list_capsules(self.context, sort_key='uuid')
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), res_uuids)
self.assertRaises(exception.InvalidParameterValue,
dbapi.list_capsules,
self.context,
sort_key='foo')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_capsules_with_filters(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
capsule1 = utils.create_test_capsule(
name='capsule1',
uuid=uuidutils.generate_uuid(),
context=self.context)
capsule2 = utils.create_test_capsule(
name='capsule2',
uuid=uuidutils.generate_uuid(),
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[capsule1.as_dict(), capsule2.as_dict()])
res = dbapi.list_capsules(
self.context, filters={'uuid': capsule1.uuid})
self.assertEqual([capsule1.id], [r.id for r in res])
res = dbapi.list_capsules(
self.context, filters={'uuid': capsule2.uuid})
self.assertEqual([capsule2.id], [r.id for r in res])
res = dbapi.list_capsules(
self.context, filters={'uuid': 'unknow-uuid'})
self.assertEqual([], [r.id for r in res])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_capsule_by_uuid(self, mock_db_inst, mock_delete,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
capsule = utils.create_test_capsule(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
capsule.as_dict())
dbapi.destroy_capsule(self.context, capsule.uuid)
mock_delete.assert_called_once_with('/capsules/%s' % capsule.uuid)
@mock.patch.object(etcd_client, 'read')
def test_destroy_non_exists_capsule(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.CapsuleNotFound,
dbapi.destroy_capsule, self.context,
uuidutils.generate_uuid())
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_capsule(self, mock_db_inst,
mock_update, mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
capsule = utils.create_test_capsule(context=self.context)
new_meta_name = 'new_meta_name'
mock_read.side_effect = lambda *args: FakeEtcdResult(
capsule.as_dict())
dbapi.update_capsule(self.context, capsule.uuid,
{'meta_name': new_meta_name})
self.assertEqual(new_meta_name, json.loads(
mock_update.call_args_list[0][0][0].value.decode('utf-8'))
['meta_name'])
@mock.patch.object(etcd_client, 'read')
def test_update_capsule_not_found(self, mock_read):
capsule_uuid = uuidutils.generate_uuid()
new_meta_name = 'new-meta-name'
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.CapsuleNotFound,
dbapi.update_capsule, self.context,
capsule_uuid, {'meta_name': new_meta_name})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_update_capsule_uuid(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
capsule = utils.create_test_capsule(context=self.context)
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_capsule, self.context,
capsule.uuid, {'uuid': ''})

View File

@ -11,22 +11,15 @@
# under the License.
"""Tests for manipulating compute nodes via the DB API"""
import json
import mock
from oslo_config import cfg
from oslo_utils import uuidutils
import six
import etcd
from etcd import Client as etcd_client
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcdapi
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
CONF = zun.conf.CONF
@ -164,166 +157,3 @@ class DbComputeNodeTestCase(base.DbTestCase):
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_compute_node, self.context,
node.uuid, {'uuid': ''})
class EtcdDbComputeNodeTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbComputeNodeTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_compute_node(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_compute_node(context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_compute_node_already_exists(self, mock_write,
mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_compute_node(context=self.context, hostname='123')
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_compute_node,
context=self.context, hostname='123')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_compute_node_by_uuid(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
compute_node = utils.create_test_compute_node(
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
compute_node.as_dict())
res = dbapi.get_compute_node(self.context, compute_node.uuid)
self.assertEqual(compute_node.uuid, res.uuid)
self.assertEqual(compute_node.hostname, res.hostname)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_compute_node_by_name(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
node = utils.create_test_compute_node(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
node.as_dict())
res = dbapi.get_compute_node(self.context, node.hostname)
self.assertEqual(node.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
def test_get_compute_node_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ComputeNodeNotFound,
dbapi.get_compute_node,
self.context, 'fake-ident')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_compute_nodes(self, mock_db_inst, mock_write, mock_read):
hostnames = []
compute_nodes = []
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
res_class = utils.create_test_compute_node(
context=self.context, hostname='class' + str(i))
compute_nodes.append(res_class.as_dict())
hostnames.append(six.text_type(res_class['hostname']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
compute_nodes)
res = dbapi.list_compute_nodes(self.context)
res_names = [r.hostname for r in res]
self.assertEqual(sorted(hostnames), sorted(res_names))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_compute_nodes_sorted(self, mock_db_inst,
mock_write, mock_read):
hostnames = []
compute_nodes = []
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
res_class = utils.create_test_compute_node(
context=self.context, hostname='class' + str(i))
compute_nodes.append(res_class.as_dict())
hostnames.append(six.text_type(res_class['hostname']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
compute_nodes)
res = dbapi.list_compute_nodes(self.context, sort_key='hostname')
res_names = [r.hostname for r in res]
self.assertEqual(sorted(hostnames), res_names)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_compute_node(self, mock_db_inst, mock_delete,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
compute_node = utils.create_test_compute_node(
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
compute_node.as_dict())
dbapi.destroy_compute_node(self.context, compute_node.uuid)
mock_delete.assert_called_once_with(
'/compute_nodes/%s' % compute_node.uuid)
@mock.patch.object(etcd_client, 'read')
def test_destroy_compute_node_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ComputeNodeNotFound,
dbapi.destroy_compute_node,
self.context,
'ca3e2a25-2901-438d-8157-de7ffd68d535')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_compute_node(self, mock_db_inst, mock_update,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
compute_node = utils.create_test_compute_node(
context=self.context)
old_name = compute_node.hostname
new_name = 'new-name'
self.assertNotEqual(old_name, new_name)
mock_read.side_effect = lambda *args: FakeEtcdResult(
compute_node.as_dict())
dbapi.update_compute_node(
self.context, compute_node.uuid, {'hostname': new_name})
self.assertEqual(new_name, json.loads(
mock_update.call_args_list[0][0][0].value)['hostname'])
@mock.patch.object(etcd_client, 'read')
def test_update_compute_node_not_found(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
new_name = 'new-name'
self.assertRaises(exception.ComputeNodeNotFound,
dbapi.update_compute_node,
self.context,
'ca3e2a25-2901-438d-8157-de7ffd68d535',
{'hostname': new_name})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_update_compute_node_uuid(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
compute_node = utils.create_test_compute_node(
context=self.context)
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_compute_node,
self.context, compute_node.uuid,
{'uuid': ''})

View File

@ -11,24 +11,15 @@
# under the License.
"""Tests for manipulating Containers via the DB API"""
import mock
import etcd
from etcd import Client as etcd_client
from oslo_config import cfg
from oslo_serialization import jsonutils as json
from oslo_utils import uuidutils
import six
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcdapi
from zun.db.etcd.api import EtcdAPI as etcd_api
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
CONF = zun.conf.CONF
@ -244,304 +235,3 @@ class DbContainerTestCase(base.DbTestCase):
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_container, self.context,
container.id, {'uuid': ''})
class EtcdDbContainerTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbContainerTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_container(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_container(context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_container_already_exists(self, mock_write, mock_read):
CONF.set_override("unique_container_name_scope", "",
group="compute")
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_container(context=self.context)
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_container,
context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_container_by_uuid(self, mock_inst, mock_write, mock_read):
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container = utils.create_test_container(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
container.as_dict())
res = dbapi.get_container_by_uuid(self.context,
container.uuid)
self.assertEqual(container.id, res.id)
self.assertEqual(container.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_container_by_name(self, mock_inst, mock_write, mock_read):
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container = utils.create_test_container(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[container.as_dict()])
res = dbapi.get_container_by_name(
self.context, container.name)
self.assertEqual(container.id, res.id)
self.assertEqual(container.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_container_that_does_not_exist(self, mock_inst, mock_read):
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ContainerNotFound,
dbapi.get_container_by_uuid,
self.context,
uuidutils.generate_uuid())
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_containers(self, mock_inst, mock_write, mock_read):
uuids = []
containers = []
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
container = utils.create_test_container(
uuid=uuidutils.generate_uuid(),
context=self.context,
name='cont' + str(i))
containers.append(container.as_dict())
uuids.append(six.text_type(container['uuid']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
containers)
res = dbapi.list_containers(self.context)
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), sorted(res_uuids))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_containers_sorted(self, mock_inst, mock_write, mock_read):
uuids = []
containers = []
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(5):
container = utils.create_test_container(
uuid=uuidutils.generate_uuid(),
context=self.context,
name='cont' + str(i))
containers.append(container.as_dict())
uuids.append(six.text_type(container.uuid))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
containers)
res = dbapi.list_containers(self.context, sort_key='uuid')
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), res_uuids)
self.assertRaises(exception.InvalidParameterValue,
dbapi.list_containers,
self.context,
sort_key='foo')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_containers_with_filters(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container1 = utils.create_test_container(
name='container-one',
uuid=uuidutils.generate_uuid(),
context=self.context)
container2 = utils.create_test_container(
name='container-two',
uuid=uuidutils.generate_uuid(),
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[container1.as_dict(), container2.as_dict()])
res = dbapi.list_containers(
self.context, filters={'name': 'container-one'})
self.assertEqual([container1.id], [r.id for r in res])
res = dbapi.list_containers(
self.context, filters={'name': 'container-two'})
self.assertEqual([container2.id], [r.id for r in res])
res = dbapi.list_containers(
self.context, filters={'name': 'container-three'})
self.assertEqual([], [r.id for r in res])
res = dbapi.list_containers(
self.context,
filters={'name': container1.name})
self.assertEqual([container1.id], [r.id for r in res])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_container(self, mock_inst, mock_delete,
mock_write, mock_read):
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container = utils.create_test_container(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
container.as_dict())
dbapi.destroy_container(self.context, container.uuid)
mock_delete.assert_called_once_with('/containers/%s' % container.uuid)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_container_by_uuid(self, mock_inst, mock_delete,
mock_write, mock_read):
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container = utils.create_test_container(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
container.as_dict())
dbapi.destroy_container(self.context, container.uuid)
mock_delete.assert_called_once_with('/containers/%s' % container.uuid)
@mock.patch.object(etcd_client, 'read')
def test_destroy_container_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ContainerNotFound,
dbapi.destroy_container, self.context,
uuidutils.generate_uuid())
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_container(self, mock_inst, mock_update,
mock_write, mock_read):
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container = utils.create_test_container(context=self.context)
new_image = 'new-image'
mock_read.side_effect = lambda *args: FakeEtcdResult(
container.as_dict())
dbapi.update_container(self.context, container.uuid,
{'image': new_image})
self.assertEqual(new_image, json.loads(
mock_update.call_args_list[0][0][0].value)['image'])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_container_with_the_same_name(self, mock_inst, mock_update,
mock_write, mock_read):
CONF.set_override("unique_container_name_scope", "project",
group="compute")
mock_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
container1 = utils.create_test_container(
name='container-one',
uuid=uuidutils.generate_uuid(),
context=self.context)
container2 = utils.create_test_container(
name='container-two',
uuid=uuidutils.generate_uuid(),
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[container1.as_dict(), container2.as_dict()])
self.assertRaises(exception.ContainerAlreadyExists,
dbapi.update_container, self.context,
container2.uuid, {'name': 'container-one'})
@mock.patch.object(etcd_client, 'read')
def test_update_container_not_found(self, mock_read):
container_uuid = uuidutils.generate_uuid()
new_image = 'new-image'
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ContainerNotFound,
dbapi.update_container, self.context,
container_uuid, {'image': new_image})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_update_container_uuid(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
container = utils.create_test_container(context=self.context)
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_container, self.context,
container.id, {'uuid': ''})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_api, 'list_containers')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_create_container_already_exists_in_project_name_space(
self, mock_db_inst, mock_list_containers, mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
mock_list_containers.return_value = []
CONF.set_override("unique_container_name_scope", "project",
group="compute")
container1 = utils.create_test_container(
context=self.context, name='cont1')
mock_list_containers.return_value = [container1]
with self.assertRaisesRegex(exception.ContainerAlreadyExists,
'A container with name.*'):
utils.create_test_container(uuid=uuidutils.generate_uuid(),
context=self.context,
name='cont1')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_api, 'list_containers')
def test_create_container_already_exists_in_global_name_space(
self, mock_list_containers, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
mock_list_containers.return_value = []
CONF.set_override("unique_container_name_scope", "global",
group="compute")
container1 = utils.create_test_container(
context=self.context, name='cont1')
self.context.project_id = 'fake_project_1'
self.context.user_id = 'fake_user_1'
mock_list_containers.return_value = [container1]
with self.assertRaisesRegex(exception.ContainerAlreadyExists,
'A container with name.*'):
utils.create_test_container(uuid=uuidutils.generate_uuid(),
context=self.context,
name='cont1')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_api, 'list_containers')
def test_create_container_already_exists_in_default_name_space(
self, mock_list_containers, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
mock_list_containers.return_value = []
CONF.set_override("unique_container_name_scope", "",
group="compute")
container1 = utils.create_test_container(
context=self.context, name='cont1',
uuid=uuidutils.generate_uuid())
mock_list_containers.return_value = [container1]
self.context.project_id = 'fake_project_1'
self.context.user_id = 'fake_user_1'
utils.create_test_container(
context=self.context, name='cont1', uuid=uuidutils.generate_uuid())

View File

@ -11,24 +11,16 @@
# under the License.
"""Tests for manipulating Container Actions via the DB API"""
from datetime import datetime
from datetime import timedelta
import etcd
from etcd import Client as etcd_client
import mock
from oslo_config import cfg
from oslo_utils import timeutils
from oslo_utils import uuidutils
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcdapi
from zun.db.etcd.api import EtcdAPI as etcd_api
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
CONF = zun.conf.CONF
@ -228,239 +220,3 @@ class DbContainerActionTestCase(_DBContainerActionBase):
self._assertEqualOrderedListOfObjects([event3, event2, event1], events,
['container_uuid', 'request_id'])
class EtcdDbContainerActionTestCase(_DBContainerActionBase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbContainerActionTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_container_action_start(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid = uuidutils.generate_uuid()
action_values = self._create_action_values(uuid)
action = dbapi.action_start(self.context, action_values)
ignored_keys = self.IGNORED_FIELDS + ['finish_time', 'uuid']
self._assertEqualObjects(action_values, action.as_dict(), ignored_keys)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[action.as_dict()])
action['start_time'] = datetime.isoformat(action['start_time'])
self._assertActionSaved(action.as_dict(), uuid)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_container_actions_get_by_container(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid1 = uuidutils.generate_uuid()
expected = []
action_values = self._create_action_values(uuid1)
action = dbapi.action_start(self.context, action_values)
action['start_time'] = datetime.isoformat(action['start_time'])
expected.append(action)
action_values['action'] = 'test-action'
action = dbapi.action_start(self.context, action_values)
action['start_time'] = datetime.isoformat(action['start_time'])
expected.append(action)
# Create an other container action.
uuid2 = uuidutils.generate_uuid()
action_values = self._create_action_values(uuid2, 'test-action')
dbapi.action_start(self.context, action_values)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
expected)
actions = dbapi.actions_get(self.context, uuid1)
self._assertEqualListsOfObjects(expected, actions)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_container_action_get_by_container_and_request(self, mock_write,
mock_read):
"""Ensure we can get an action by container UUID and request_id"""
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid1 = uuidutils.generate_uuid()
action_values = self._create_action_values(uuid1)
action = dbapi.action_start(self.context, action_values)
request_id = action_values['request_id']
# An other action using a different req id
action_values['action'] = 'test-action'
action_values['request_id'] = 'req-00000000-7522-4d99-7ff-111111111111'
dbapi.action_start(self.context, action_values)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([action])
action = dbapi.action_get_by_request_id(self.context, uuid1,
request_id)
self.assertEqual('create_container', action['action'])
self.assertEqual(self.context.request_id, action['request_id'])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_api, '_action_get_by_request_id')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_container_action_event_start(self, mock_db_inst,
mock__action_get_by_request_id,
mock_write, mock_read):
"""Create a container action event."""
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid = uuidutils.generate_uuid()
action_values = self._create_action_values(uuid)
action = dbapi.action_start(self.context, action_values)
event_values = self._create_event_values(uuid)
mock__action_get_by_request_id.return_value = action
mock_read.side_effect = etcd.EtcdKeyNotFound
event = dbapi.action_event_start(self.context, event_values)
ignored_keys = self.IGNORED_FIELDS + ['finish_time', 'traceback',
'result', 'action_uuid',
'request_id', 'container_uuid',
'uuid']
self._assertEqualObjects(event_values, event, ignored_keys)
event['start_time'] = datetime.isoformat(event['start_time'])
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([event])
self._assertActionEventSaved(event, action['uuid'])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_container_action_event_start_without_action(self, mock_write,
mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid = uuidutils.generate_uuid()
event_values = self._create_event_values(uuid)
self.assertRaises(exception.ContainerActionNotFound,
dbapi.action_event_start, self.context, event_values)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(etcd_api, '_action_get_by_request_id')
@mock.patch.object(etcd_api, '_get_event_by_name')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_container_action_event_finish_success(
self, mock_db_inst, mock_get_event_by_name,
mock__action_get_by_request_id,
mock_update, mock_write, mock_read):
"""Finish a container action event."""
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid = uuidutils.generate_uuid()
action = dbapi.action_start(self.context,
self._create_action_values(uuid))
event_values = self._create_event_values(uuid)
event_values['action_uuid'] = action['uuid']
mock__action_get_by_request_id.return_value = action
mock_read.side_effect = etcd.EtcdKeyNotFound
event = dbapi.action_event_start(self.context, event_values)
event_values = {
'finish_time': timeutils.utcnow() + timedelta(seconds=5),
'result': 'Success'
}
event_values = self._create_event_values(uuid, extra=event_values)
mock__action_get_by_request_id.return_value = action
mock_get_event_by_name.return_value = event
mock_read.side_effect = lambda *args: FakeEtcdResult(event)
event = dbapi.action_event_finish(self.context, event_values)
event['start_time'] = datetime.isoformat(event['start_time'])
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([event])
self._assertActionEventSaved(event, action['uuid'])
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult([action])
action = dbapi.action_get_by_request_id(self.context, uuid,
self.context.request_id)
self.assertNotEqual('Error', action['message'])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_container_action_event_finish_without_action(self, mock_write,
mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid = uuidutils.generate_uuid()
event_values = {
'finish_time': timeutils.utcnow() + timedelta(seconds=5),
'result': 'Success'
}
event_values = self._create_event_values(uuid, extra=event_values)
self.assertRaises(exception.ContainerActionNotFound,
dbapi.action_event_finish,
self.context, event_values)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_api, '_action_get_by_request_id')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_container_action_events_get_in_order(
self, mock_db_inst, mock__action_get_by_request_id,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
uuid1 = uuidutils.generate_uuid()
action = dbapi.action_start(self.context,
self._create_action_values(uuid1))
extra1 = {
'action_uuid': action['uuid'],
'created_at': timeutils.utcnow()
}
extra2 = {
'action_uuid': action['uuid'],
'created_at': timeutils.utcnow() + timedelta(seconds=5)
}
event_val1 = self._create_event_values(uuid1, 'fake1', extra=extra1)
event_val2 = self._create_event_values(uuid1, 'fake2', extra=extra1)
event_val3 = self._create_event_values(uuid1, 'fake3', extra=extra2)
mock__action_get_by_request_id.return_value = action
mock_read.side_effect = etcd.EtcdKeyNotFound
event1 = dbapi.action_event_start(self.context, event_val1)
event1['start_time'] = datetime.isoformat(event1['start_time'])
mock__action_get_by_request_id.return_value = action
mock_read.side_effect = etcd.EtcdKeyNotFound
event2 = dbapi.action_event_start(self.context, event_val2)
event2['start_time'] = datetime.isoformat(event2['start_time'])
mock__action_get_by_request_id.return_value = action
mock_read.side_effect = etcd.EtcdKeyNotFound
event3 = dbapi.action_event_start(self.context, event_val3)
event3['start_time'] = datetime.isoformat(event3['start_time'])
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[event1, event2, event3])
events = dbapi.action_events_get(self.context, action['uuid'])
self.assertEqual(3, len(events))
self._assertEqualOrderedListOfObjects([event3, event2, event1], events,
['container_uuid', 'request_id'])

View File

@ -11,20 +11,13 @@
# under the License.
"""Tests for manipulating Images via the DB API"""
import mock
import etcd
from etcd import Client as etcd_client
from oslo_config import cfg
from oslo_serialization import jsonutils as json
from oslo_utils import uuidutils
import six
from zun.common import exception
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
class DbImageTestCase(base.DbTestCase):
@ -148,173 +141,3 @@ class DbImageTestCase(base.DbTestCase):
self.assertRaises(exception.InvalidParameterValue,
self.dbapi.update_image, image.id,
{'uuid': ''})
class EtcdDbImageTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbImageTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_pull_image(self, mock_get, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_image(context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_pull_image_duplicate_repo(self, mock_get,
mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_image(context=self.context,
repo="ubuntu:latest")
utils.create_test_image(context=self.context,
repo="ubuntu:14.04")
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_pull_image_duplicate_tag(self, mock_get,
mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_image(context=self.context,
repo="ubuntu:latest")
utils.create_test_image(context=self.context,
repo="centos:14.04")
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_pull_image_already_exists(self, mock_get,
mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_image(context=self.context,
repo="ubuntu:latest")
mock_get.return_value = mock.MagicMock()
self.assertRaises(exception.ResourceExists,
utils.create_test_image,
context=self.context, repo="ubuntu:latest")
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_get_image_by_uuid(self, mock_get, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
image = utils.create_test_image(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(image.as_dict())
res = self.dbapi.get_image_by_uuid(self.context, image.uuid)
self.assertEqual(image.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_get_image_that_does_not_exist(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ImageNotFound,
self.dbapi.get_image_by_uuid, self.context,
'db09ecea-7d63-4638-ae88-b8581f796e86')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_list_images(self, mock_get, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
uuids = []
images = []
for i in range(1, 6):
image = utils.create_test_image(context=self.context,
repo='testrepo' + str(i))
images.append(image.as_dict())
uuids.append(image.uuid)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(images)
res = self.dbapi.list_images(self.context)
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), sorted(res_uuids))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_list_images_sorted(self, mock_get, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
uuids = []
images = []
for i in range(1, 6):
image = utils.create_test_image(context=self.context,
repo='testrepo' + str(i))
images.append(image.as_dict())
uuids.append(image.uuid)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(images)
res = self.dbapi.list_images(self.context, sort_key='uuid')
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), res_uuids)
self.assertRaises(exception.InvalidParameterValue,
self.dbapi.list_images,
self.context, sort_key='foo')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_list_images_with_filters(self, mock_get, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
image1 = utils.create_test_image(
context=self.context, repo='imageone',
uuid=uuidutils.generate_uuid())
image2 = utils.create_test_image(
context=self.context, repo='imagetwo',
uuid=uuidutils.generate_uuid())
images = [image1.as_dict(), image2.as_dict()]
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(images)
res = self.dbapi.list_images(self.context,
filters={'repo': 'imageone'})
self.assertEqual([image1.uuid], [r.uuid for r in res])
res = self.dbapi.list_images(self.context,
filters={'repo': 'imagetwo'})
self.assertEqual([image2.uuid], [r.uuid for r in res])
res = self.dbapi.list_images(self.context,
filters={'repo': 'foo'})
self.assertEqual([], [r.uuid for r in res])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_update_image(self, mock_get, mock_update, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
image = utils.create_test_image(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(image.as_dict())
self.dbapi.update_image(image.uuid, {'tag': 'newtag'})
self.assertEqual('newtag', json.loads(
mock_update.call_args_list[0][0][0].value)['tag'])
@mock.patch.object(etcd_client, 'read')
def test_update_image_not_found(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ImageNotFound, self.dbapi.update_image,
'db09ecea-7d63-4638-ae88-b8581f796e86',
{'tag': 'newtag'})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch('zun.db.etcd.api.EtcdAPI.get_image_by_repo_and_tag')
def test_update_image_uuid(self, mock_get, mock_write, mock_read):
mock_get.return_value = None
mock_read.side_effect = etcd.EtcdKeyNotFound
image = utils.create_test_image(context=self.context)
self.assertRaises(exception.InvalidParameterValue,
self.dbapi.update_image, image.uuid,
{'uuid': 'newuuid'})

View File

@ -11,18 +11,11 @@
# under the License.
"""Tests for manipulating pci device via the DB API"""
import mock
import etcd
from etcd import Client as etcd_client
from oslo_config import cfg
from zun.common import context
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import models
from zun.objects import fields as z_fields
from zun.tests.unit.db import base
from zun.tests import uuidsentinel
@ -200,87 +193,3 @@ class DbPciDeviceTestCase(base.DbTestCase, base.ModelsObjectComparatorMixin):
dbapi.destroy_pci_device,
v1['compute_node_uuid'],
v1['address'])
fake_values = {'id': 1,
'uuid': 'bd45ca46351e64f91d5c32',
'compute_node_uuid': 'ef5ef3492b57c8b9bc0556a',
'address': 'fake_addr',
'vendor_id': 'fake_vendor',
'product_id': 'fake_product',
'dev_type': 'VF',
'dev_id': 'fake_dev_id',
'lable': 'fake_label',
'status': 'in-use',
'request_id': 'fake_request_id',
'extra_info': '',
'parent_addr': '11:22',
'container_uuid': 'Id64c317ff78e95af2fc046e9630d7ae016df9f2'}
class EtcdDbPciDeviceTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbPciDeviceTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_update_pci_device(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
values = fake_values
pcidevice = models.PciDevice(values)
updated = self.dbapi.update_pci_device(values['compute_node_uuid'],
values['address'], values)
self.assertEqual(pcidevice.as_dict(), updated.as_dict())
@mock.patch.object(etcd_client, 'read')
def test_list_pci_device(self, mock_read):
res = self.dbapi.list_pci_devices()
mock_read.assert_called_with('/pcidevices')
self.assertEqual([], res)
@mock.patch('zun.db.etcd.api.EtcdAPI.get_pci_device_by_addr')
@mock.patch.object(etcd_client, 'delete')
def test_destroy_pci_device(self, mock_delete, mock_get):
self.dbapi.destroy_pci_device('1', 'fake_address')
mock_delete.assert_called()
@mock.patch('zun.db.etcd.api.EtcdAPI.list_pci_devices')
def test_get_all_pci_device_by_container_uuid(self, mock_list):
filters = {'container_uuid': 'Id64c317ff78e95af2fc'}
mock_list.return_value = [models.PciDevice(fake_values)]
self.dbapi.get_all_pci_device_by_container_uuid('Id64c317ff78e95af2fc')
mock_list.assert_called_with(filters=filters)
@mock.patch('zun.db.etcd.api.EtcdAPI.list_pci_devices')
def test_get_all_pci_device_by_parent_addr(self, mock_list):
filters = {'compute_node_uuid': 'ef5ef3492b57c8b9bc0556a',
'parent_addr': '11:22'}
mock_list.return_value = [models.PciDevice(fake_values)]
self.dbapi.get_all_pci_device_by_parent_addr('ef5ef3492b57c8b9bc0556a',
'11:22')
mock_list.assert_called_with(filters=filters)
@mock.patch('zun.db.etcd.api.EtcdAPI.list_pci_devices')
def test_get_all_pci_device_by_node(self, mock_list):
filters = {'compute_node_uuid': 'ef5ef3492b57c8b9bc0556a'}
mock_list.return_value = [models.PciDevice(fake_values)]
self.dbapi.get_all_pci_device_by_node('ef5ef3492b57c8b9bc0556a')
mock_list.assert_called_with(filters=filters)
@mock.patch('zun.db.etcd.api.EtcdAPI.list_pci_devices')
def test_get_pci_device_by_id(self, mock_list):
filters = {'id': '1'}
mock_list.return_value = [models.PciDevice(fake_values)]
self.dbapi.get_pci_device_by_id('1')
mock_list.assert_called_with(filters=filters)
@mock.patch('zun.db.etcd.api.EtcdAPI.list_pci_devices')
def test_get_pci_device_by_addr(self, mock_list):
filters = {'compute_node_uuid': 'ef5ef3492b57c8b9bc0556a',
'address': 'fake_addr'}
mock_list.return_value = [models.PciDevice(fake_values)]
self.dbapi.get_pci_device_by_addr('ef5ef3492b57c8b9bc0556a',
'fake_addr')
mock_list.assert_called_with(filters=filters)

View File

@ -11,19 +11,11 @@
# under the License.
"""Tests for manipulating Quota via the DB API"""
import json
import etcd
from etcd import Client as etcd_client
import mock
from oslo_config import cfg
from zun.common import consts
from zun.common import context
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcdapi
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
@ -114,95 +106,3 @@ class DBQuotaClassesTestCase(base.DbTestCase):
self.ctx, quota_class.class_name,
quota_class.resource)
self.assertEqual(updated_quota_class.hard_limit, 200)
class EtcdDbQuotaClassTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbQuotaClassTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_quota_class(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_quota_class(context=self.context)
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_quota_class,
context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_get_quota_class(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota_class = utils.create_test_quota_class(context=self.context)
mock_read.side_effect = lambda *args: utils.FakeEtcdResult(
quota_class.as_dict())
res = dbapi.quota_class_get(self.context, quota_class.class_name,
quota_class.resource)
self.assertEqual(quota_class.hard_limit, res.hard_limit)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_get_quota_class_by_default(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota_class_1 = utils.create_test_quota_class(
context=self.context, resource='fake_resource_1', hard_limit=10)
quota_class_2 = utils.create_test_quota_class(
context=self.context, resource='fake_resource_2', hard_limit=10)
quota_classes = [quota_class_1, quota_class_2]
mock_read.side_effect = lambda *args: utils.FakeEtcdMultipleResult(
[quota_class_1.as_dict(), quota_class_2.as_dict()])
res = dbapi.quota_class_get_default(self.context)
self.assertEqual([qc.resource for qc in res],
[qc.resource for qc in quota_classes])
self.assertEqual([q.hard_limit for q in res],
[q.hard_limit for q in quota_classes])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_get_quota_class_by_cls_name(self, mock_db_inst,
mock_write, mock_read):
cls_name = 'fake_class_name'
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota_class_1 = utils.create_test_quota_class(
context=self.context, class_name=cls_name,
resource='fake_resource_1', hard_limit=10)
quota_class_2 = utils.create_test_quota_class(
context=self.context, class_name=cls_name,
resource='fake_resource_2', hard_limit=10)
quota_classes = [quota_class_1, quota_class_2]
mock_read.side_effect = lambda *args: utils.FakeEtcdMultipleResult(
[quota_class_1.as_dict(), quota_class_2.as_dict()])
res = dbapi.quota_class_get_all_by_name(self.context, cls_name)
self.assertEqual([qc.resource for qc in res],
[qc.resource for qc in quota_classes])
self.assertEqual([q.hard_limit for q in res],
[q.hard_limit for q in quota_classes])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_update_quota_class(self, mock_db_inst, mock_update,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota_class = utils.create_test_quota_class(context=self.context)
new_hard_limit = 60
mock_read.side_effect = lambda *args: utils.FakeEtcdResult(
quota_class.as_dict())
dbapi.quota_class_update(self.context, quota_class.class_name,
quota_class.resource, new_hard_limit)
self.assertEqual(new_hard_limit,
json.loads(mock_update.call_args_list[0][0][0].
value.decode('utf-8'))['hard_limit'])

View File

@ -11,18 +11,11 @@
# under the License.
"""Tests for manipulating Quota via the DB API"""
import json
import etcd
from etcd import Client as etcd_client
import mock
from oslo_config import cfg
from zun.common import context
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcdapi
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
@ -92,93 +85,3 @@ class DBQuotaTestCase(base.DbTestCase):
updated_quota = dbapi.quota_get(self.ctx, quota.project_id,
quota.resource)
self.assertEqual(updated_quota.hard_limit, 200)
class EtcdDbQuotaTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbQuotaTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_quota(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_quota(context=self.context)
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_quota,
context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_get_quota(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota = utils.create_test_quota(context=self.context)
mock_read.side_effect = lambda *args: utils.FakeEtcdResult(
quota.as_dict())
res = dbapi.quota_get(self.context, quota.project_id,
quota.resource)
self.assertEqual(quota.hard_limit, res.hard_limit)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_get_all_project_quota(self, mock_db_inst,
mock_write, mock_read):
prj_id = 'fake_project_id'
resources = ['fake_resource_1', 'fake_resource_2']
hard_limits = [10, 20]
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota_1 = utils.create_test_quota(
context=self.context, project_id=prj_id,
resource=resources[0], hard_limit=hard_limits[0])
quota_2 = utils.create_test_quota(
context=self.context, project_id=prj_id,
resource=resources[1], hard_limit=hard_limits[1])
quotas = [quota_1, quota_2]
mock_read.side_effect = lambda *args: utils.FakeEtcdMultipleResult(
[quota_1.as_dict(), quota_2.as_dict()])
res = dbapi.quota_get_all_by_project(self.context, prj_id)
self.assertEqual([q.resource for q in res],
[q.resource for q in quotas])
self.assertEqual([q.hard_limit for q in res],
[q.hard_limit for q in quotas])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_destroy_quota(self, mock_db_inst, mock_delete,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota = utils.create_test_quota(context=self.context)
mock_read.side_effect = lambda *args: utils.FakeEtcdResult(
quota.as_dict())
dbapi.quota_destroy(
self.context, quota.project_id, quota.resource)
mock_delete.assert_called_once_with(
'/quotas/{}/{}' . format(quota.project_id, quota.resource))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, '_get_dbdriver_instance')
def test_update_quota(self, mock_db_inst, mock_update,
mock_write, mock_read):
mock_db_inst.return_value = etcdapi.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
quota = utils.create_test_quota(context=self.context)
new_hard_limit = 60
mock_read.side_effect = lambda *args: utils.FakeEtcdResult(
quota.as_dict())
dbapi.quota_update(self.context, quota.project_id, quota.resource,
new_hard_limit)
self.assertEqual(new_hard_limit,
json.loads(mock_update.call_args_list[0][0][0].
value.decode('utf-8'))['hard_limit'])

View File

@ -11,23 +11,14 @@
# under the License.
"""Tests for manipulating resource classes via the DB API"""
import mock
import etcd
from etcd import Client as etcd_client
from oslo_config import cfg
from oslo_serialization import jsonutils as json
from oslo_utils import uuidutils
import six
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcd_api
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
CONF = zun.conf.CONF
@ -123,168 +114,3 @@ class DbResourceClassTestCase(base.DbTestCase):
self.assertRaises(exception.ResourceClassNotFound,
dbapi.update_resource_class, self.context,
bad_id, {'name': new_name})
class EtcdDbResourceClassTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbResourceClassTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_resource_class(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_resource_class(context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_resource_class_already_exists(self, mock_write,
mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_resource_class(context=self.context, name='123')
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_resource_class,
context=self.context, name='123')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_resource_class_by_uuid(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
resource_class = utils.create_test_resource_class(
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
resource_class.as_dict())
res = dbapi.get_resource_class(self.context, resource_class.uuid)
self.assertEqual(resource_class.uuid, res.uuid)
self.assertEqual(resource_class.name, res.name)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_resource_class_by_name(self, mock_db_inst,
mock_write, mock_read):
mock_db_inst.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
rcs = utils.create_test_resource_class(context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[rcs.as_dict()])
res = dbapi.get_resource_class(self.context, rcs.name)
self.assertEqual(rcs.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
def test_get_resource_class_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ResourceClassNotFound,
dbapi.get_resource_class,
self.context, 'fake-ident')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_resource_classes(self, mock_ins, mock_write, mock_read):
names = []
resource_classes = []
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
res_class = utils.create_test_resource_class(
context=self.context, name='class' + str(i))
resource_classes.append(res_class.as_dict())
names.append(six.text_type(res_class['name']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
resource_classes)
res = dbapi.list_resource_classes(self.context)
res_names = [r.name for r in res]
self.assertEqual(sorted(names), sorted(res_names))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_resource_classes_sorted(self, mock_ins,
mock_write, mock_read):
names = []
resource_classes = []
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(1, 6):
res_class = utils.create_test_resource_class(
context=self.context, name='class' + str(i))
resource_classes.append(res_class.as_dict())
names.append(six.text_type(res_class['name']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
resource_classes)
res = dbapi.list_resource_classes(self.context, sort_key='name')
res_names = [r.name for r in res]
self.assertEqual(sorted(names), res_names)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_resource_class(self, mock_ins, mock_delete,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
resource_class = utils.create_test_resource_class(
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
resource_class.as_dict())
dbapi.destroy_resource_class(self.context, resource_class.uuid)
mock_delete.assert_called_once_with(
'/resource_classes/%s' % resource_class.uuid)
@mock.patch.object(etcd_client, 'read')
def test_destroy_resource_class_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ResourceClassNotFound,
dbapi.destroy_resource_class,
self.context,
'ca3e2a25-2901-438d-8157-de7ffd68d535')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_resource_class(self, mock_ins, mock_update,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
resource_class = utils.create_test_resource_class(
context=self.context)
old_name = resource_class.name
new_name = 'new-name'
self.assertNotEqual(old_name, new_name)
mock_read.side_effect = lambda *args: FakeEtcdResult(
resource_class.as_dict())
dbapi.update_resource_class(
self.context, resource_class.uuid, {'name': new_name})
self.assertEqual(new_name, json.loads(
mock_update.call_args_list[0][0][0].value)['name'])
@mock.patch.object(etcd_client, 'read')
def test_update_resource_class_not_found(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
new_name = 'new-name'
self.assertRaises(exception.ResourceClassNotFound,
dbapi.update_resource_class,
self.context,
'ca3e2a25-2901-438d-8157-de7ffd68d535',
{'name': new_name})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_resource_class_uuid(self, mock_ins, mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
resource_class = utils.create_test_resource_class(
context=self.context)
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_resource_class,
self.context, resource_class.uuid,
{'uuid': ''})

View File

@ -10,23 +10,14 @@
# License for the specific language governing permissions and limitations
# under the License.
import json
import etcd
from etcd import Client as etcd_client
import mock
from oslo_config import cfg
from oslo_utils import uuidutils
import six
from zun.common import exception
import zun.conf
from zun.db import api as dbapi
from zun.db.etcd import api as etcd_api
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
CONF = zun.conf.CONF
@ -176,192 +167,3 @@ class DbVolumeMappingTestCase(base.DbTestCase):
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_volume_mapping, self.context,
volume_mapping.id, {'uuid': ''})
class EtcdDbVolumeMappingTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbVolumeMappingTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_volume_mapping(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_volume_mapping(context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_volume_mapping_already_exists(self, mock_write,
mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_volume_mapping(context=self.context)
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_volume_mapping,
context=self.context)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_volume_mapping_by_uuid(self, mock_ins, mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
volume_mapping = utils.create_test_volume_mapping(
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
volume_mapping.as_dict())
res = dbapi.get_volume_mapping_by_uuid(self.context,
volume_mapping.uuid)
self.assertEqual(volume_mapping.id, res.id)
self.assertEqual(volume_mapping.uuid, res.uuid)
@mock.patch.object(etcd_client, 'read')
def test_get_volume_mapping_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.VolumeMappingNotFound,
dbapi.get_volume_mapping_by_uuid,
self.context,
uuidutils.generate_uuid())
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_volume_mappings(self, mock_ins, mock_write, mock_read):
uuids = []
volume_mappings = []
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(0, 6):
volume_mapping = utils.create_test_volume_mapping(
uuid=uuidutils.generate_uuid(),
context=self.context,
name='volume_mapping' + str(i))
volume_mappings.append(volume_mapping.as_dict())
uuids.append(six.text_type(volume_mapping['uuid']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
volume_mappings)
res = dbapi.list_volume_mappings(self.context)
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), sorted(res_uuids))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_volume_mappings_sorted(self, mock_ins,
mock_write, mock_read):
uuids = []
volume_mappings = []
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
for i in range(0, 6):
volume_mapping = utils.create_test_volume_mapping(
uuid=uuidutils.generate_uuid(),
context=self.context,
name='volume_mapping' + str(i))
volume_mappings.append(volume_mapping.as_dict())
uuids.append(six.text_type(volume_mapping['uuid']))
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
volume_mappings)
res = dbapi.list_volume_mappings(self.context, sort_key='uuid')
res_uuids = [r.uuid for r in res]
self.assertEqual(sorted(uuids), res_uuids)
self.assertRaises(exception.InvalidParameterValue,
dbapi.list_volume_mappings,
self.context,
sort_key='wrong_key')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_volume_mappings_with_filters(self, mock_ins,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
volume_mapping1 = utils.create_test_volume_mapping(
name='volume_mapping1',
uuid=uuidutils.generate_uuid(),
context=self.context)
volume_mapping2 = utils.create_test_volume_mapping(
name='volume_mapping2',
uuid=uuidutils.generate_uuid(),
context=self.context,)
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[volume_mapping1.as_dict(), volume_mapping2.as_dict()])
res = dbapi.list_volume_mappings(
self.context, filters={'uuid': volume_mapping1.uuid})
self.assertEqual([volume_mapping1.id], [r.id for r in res])
res = dbapi.list_volume_mappings(
self.context, filters={'uuid': volume_mapping2.uuid})
self.assertEqual([volume_mapping2.id], [r.id for r in res])
res = dbapi.list_volume_mappings(
self.context, filters={'uuid': 'unknow-uuid'})
self.assertEqual([], [r.id for r in res])
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_volume_mapping_by_uuid(self, mock_ins, mock_delete,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
volume_mapping = utils.create_test_volume_mapping(
context=self.context)
mock_read.side_effect = lambda *args: FakeEtcdResult(
volume_mapping.as_dict())
dbapi.destroy_volume_mapping(self.context, volume_mapping.uuid)
mock_delete.assert_called_once_with(
'/volume_mappings/%s' % volume_mapping.uuid)
@mock.patch.object(etcd_client, 'read')
def test_destroy_volume_mapping_that_does_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.VolumeMappingNotFound,
dbapi.destroy_volume_mapping, self.context,
uuidutils.generate_uuid())
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_volume_mapping(self, mock_ins, mock_update,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
volume_mapping = utils.create_test_volume_mapping(
context=self.context)
new_conn_info = 'new-conn-info'
mock_read.side_effect = lambda *args: FakeEtcdResult(
volume_mapping.as_dict())
dbapi.update_volume_mapping(self.context, volume_mapping.uuid,
{'container_info': new_conn_info})
self.assertEqual(new_conn_info, json.loads(
mock_update.call_args_list[0][0][0].value.decode('utf-8'))
['container_info'])
@mock.patch.object(etcd_client, 'read')
def test_update_volume_mapping_not_found(self, mock_read):
volume_mapping_uuid = uuidutils.generate_uuid()
new_conn_info = 'new-conn-info'
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.VolumeMappingNotFound,
dbapi.update_volume_mapping, self.context,
volume_mapping_uuid,
{'container_info': new_conn_info})
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_update_volume_mapping_uuid(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
volume_mapping = utils.create_test_volume_mapping(
context=self.context)
self.assertRaises(exception.InvalidParameterValue,
dbapi.update_volume_mapping, self.context,
volume_mapping.uuid, {'uuid': ''})

View File

@ -12,20 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import mock
import etcd
from etcd import Client as etcd_client
from oslo_config import cfg
from oslo_serialization import jsonutils as json
from zun.common import exception
from zun.db import api as dbapi
from zun.db.etcd import api as etcd_api
from zun.tests.unit.db import base
from zun.tests.unit.db import utils
from zun.tests.unit.db.utils import FakeEtcdMultipleResult
from zun.tests.unit.db.utils import FakeEtcdResult
class DbZunServiceTestCase(base.DbTestCase):
@ -128,136 +117,3 @@ class DbZunServiceTestCase(base.DbTestCase):
res = self.dbapi.list_zun_services_by_binary(binary='none')
self.assertEqual(0, len(res))
class EtcdDbZunServiceTestCase(base.DbTestCase):
def setUp(self):
cfg.CONF.set_override('backend', 'etcd', 'database')
super(EtcdDbZunServiceTestCase, self).setUp()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_zun_service(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_zun_service()
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_create_zun_service_already_exists(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
utils.create_test_zun_service()
mock_read.side_effect = lambda *args: None
self.assertRaises(exception.ResourceExists,
utils.create_test_zun_service)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_get_zun_service(self, mock_ins, mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
zun_service = utils.create_test_zun_service()
mock_read.side_effect = lambda *args: FakeEtcdResult(
zun_service.as_dict())
res = dbapi.get_zun_service(
self.context, zun_service.host, zun_service.binary)
self.assertEqual(zun_service.host, res.host)
self.assertEqual(zun_service.binary, res.binary)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
def test_get_zun_service_not_found(self, mock_write, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
zun_service = utils.create_test_zun_service()
res = dbapi.get_zun_service(
self.context, 'wrong_host_name', zun_service.binary)
self.assertIsNone(res)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_zun_services(self, mock_ins, mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
service_1 = utils.create_test_zun_service(host='host_1')
service_2 = utils.create_test_zun_service(host='host_2')
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[service_1.as_dict(), service_2.as_dict()])
res = dbapi.list_zun_services(self.context)
self.assertEqual(2, len(res))
self.assertEqual('host_1', res[0].host)
self.assertEqual('host_2', res[1].host)
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_list_zun_services_by_binary(self, mock_ins,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
service_1 = utils.create_test_zun_service(
host='host_1', binary='binary_1')
service_2 = utils.create_test_zun_service(
host='host_2', binary='binary_2')
mock_read.side_effect = lambda *args: FakeEtcdMultipleResult(
[service_1.as_dict(), service_2.as_dict()])
res = dbapi.list_zun_services_by_binary(
self.context, 'binary_1')
self.assertEqual(1, len(res))
self.assertEqual('host_1', res[0].host)
self.assertEqual('binary_1', res[0].binary)
res = dbapi.list_zun_services_by_binary(
self.context, 'fake-binary')
self.assertEqual(0, len(res))
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_zun_service(self, mock_ins, mock_delete,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
zun_service = utils.create_test_zun_service()
mock_read.side_effect = lambda *args: FakeEtcdResult(
zun_service.as_dict())
dbapi.destroy_zun_service(zun_service.host,
zun_service.binary)
mock_delete.assert_called_once_with(
'/zun_services/%s' % zun_service.host + '_' + zun_service.binary)
@mock.patch.object(etcd_client, 'delete')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_destroy_zun_service_not_exist(self, mock_ins, mock_delete):
mock_ins.return_value = etcd_api.get_backend()
mock_delete.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ZunServiceNotFound,
dbapi.destroy_zun_service,
'host_1', 'binary_1')
@mock.patch.object(etcd_client, 'read')
@mock.patch.object(etcd_client, 'write')
@mock.patch.object(etcd_client, 'update')
@mock.patch.object(dbapi, "_get_dbdriver_instance")
def test_update_zun_service(self, mock_ins, mock_update,
mock_write, mock_read):
mock_ins.return_value = etcd_api.get_backend()
mock_read.side_effect = etcd.EtcdKeyNotFound
service = utils.create_test_zun_service()
new_host = 'new-host'
mock_read.side_effect = lambda *args: FakeEtcdResult(
service.as_dict())
dbapi.update_zun_service(service.host, service.binary,
{'host': new_host})
self.assertEqual(new_host, json.loads(
mock_update.call_args_list[0][0][0].value)['host'])
@mock.patch.object(etcd_client, 'read')
def test_update_zun_service_not_exist(self, mock_read):
mock_read.side_effect = etcd.EtcdKeyNotFound
self.assertRaises(exception.ZunServiceNotFound,
dbapi.update_zun_service,
'host_1', 'binary_1', {'host': 'new-host'})

View File

@ -10,10 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
"""Zun test utilities."""
import mock
from oslo_config import cfg
from oslo_serialization import jsonutils as json
from zun.common import name_generator
from zun.db import api as db_api
@ -421,20 +419,6 @@ def create_test_compute_node(**kwargs):
return dbapi.create_compute_node(kwargs['context'], compute_host)
class FakeEtcdMultipleResult(object):
def __init__(self, value):
self.children = []
for v in value:
res = mock.MagicMock()
res.value = json.dump_as_bytes(v)
self.children.append(res)
class FakeEtcdResult(object):
def __init__(self, value):
self.value = json.dump_as_bytes(value)
def get_test_capsule(**kwargs):
return {
'capsule_version': kwargs.get('capsule_version', 'beta'),