Improve tests for Node and Port DB objects.
- Prevented overlaping asserts by separating sequencial tests to several small ones. - Added tests for updating and destroying a port. - Added more assertions to node reservation tests. Change-Id: I1f67d24ae1938546c3b6e93caf89013d18b090f3
This commit is contained in:
@@ -202,8 +202,7 @@ class Connection(api.Connection):
|
||||
query = add_uuid_filter(query, node)
|
||||
|
||||
print "Updating with %s." % values
|
||||
count = query.update(values,
|
||||
synchronize_session='fetch')
|
||||
count = query.update(values, synchronize_session='fetch')
|
||||
if count != 1:
|
||||
raise exception.NodeNotFound(node=node)
|
||||
ref = query.one()
|
||||
|
||||
@@ -31,22 +31,34 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
super(DbNodeTestCase, self).setUp()
|
||||
self.dbapi = dbapi.get_instance()
|
||||
|
||||
def _create_test_node(self, **kwargs):
|
||||
n = utils.get_test_node(**kwargs)
|
||||
self.dbapi.create_node(n)
|
||||
return n
|
||||
|
||||
def _create_many_test_nodes(self):
|
||||
uuids = []
|
||||
for i in xrange(1, 6):
|
||||
n = self._create_test_node(id=i, uuid=uuidutils.generate_uuid())
|
||||
uuids.append(n['uuid'])
|
||||
uuids.sort()
|
||||
return uuids
|
||||
|
||||
def test_create_node(self):
|
||||
n = utils.get_test_node()
|
||||
self.dbapi.create_node(n)
|
||||
self._create_test_node()
|
||||
|
||||
def test_get_node(self):
|
||||
n = utils.get_test_node()
|
||||
self.dbapi.create_node(n)
|
||||
|
||||
# test get-by-id
|
||||
def test_get_node_by_id(self):
|
||||
n = self._create_test_node()
|
||||
res = self.dbapi.get_node(n['id'])
|
||||
self.assertEqual(n['uuid'], res['uuid'])
|
||||
|
||||
# test get-by-uuid
|
||||
def test_get_node_by_uuid(self):
|
||||
n = self._create_test_node()
|
||||
|
||||
res = self.dbapi.get_node(n['uuid'])
|
||||
self.assertEqual(n['id'], res['id'])
|
||||
|
||||
def test_get_node_that_does_not_exist(self):
|
||||
self.assertRaises(exception.NodeNotFound,
|
||||
self.dbapi.get_node, 99)
|
||||
self.assertRaises(exception.NodeNotFound,
|
||||
@@ -56,8 +68,7 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
self.dbapi.get_node, 'not-a-uuid')
|
||||
|
||||
def test_get_node_by_instance(self):
|
||||
n = utils.get_test_node()
|
||||
self.dbapi.create_node(n)
|
||||
n = self._create_test_node()
|
||||
|
||||
res = self.dbapi.get_node_by_instance(n['instance_uuid'])
|
||||
self.assertEqual(n['uuid'], res['uuid'])
|
||||
@@ -67,16 +78,14 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
'12345678-9999-0000-aaaa-123456789012')
|
||||
|
||||
def test_destroy_node(self):
|
||||
n = utils.get_test_node()
|
||||
self.dbapi.create_node(n)
|
||||
n = self._create_test_node()
|
||||
|
||||
self.dbapi.destroy_node(n['id'])
|
||||
self.assertRaises(exception.NodeNotFound,
|
||||
self.dbapi.destroy_node, n['id'])
|
||||
|
||||
def test_update_node(self):
|
||||
n = utils.get_test_node()
|
||||
self.dbapi.create_node(n)
|
||||
n = self._create_test_node()
|
||||
|
||||
old_state = n['task_state']
|
||||
new_state = 'TESTSTATE'
|
||||
@@ -86,12 +95,10 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
self.assertEqual(new_state, res['task_state'])
|
||||
|
||||
def test_reserve_one_node(self):
|
||||
n = utils.get_test_node()
|
||||
n = self._create_test_node()
|
||||
uuid = n['uuid']
|
||||
self.dbapi.create_node(n)
|
||||
|
||||
r1 = 'fake-reservation'
|
||||
r2 = 'another-reservation'
|
||||
|
||||
# reserve the node
|
||||
self.dbapi.reserve_nodes(r1, [uuid])
|
||||
@@ -100,6 +107,28 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
res = self.dbapi.get_node(uuid)
|
||||
self.assertEqual(r1, res['reservation'])
|
||||
|
||||
def test_release_reservation(self):
|
||||
n = self._create_test_node()
|
||||
uuid = n['uuid']
|
||||
|
||||
r1 = 'fake-reservation'
|
||||
self.dbapi.reserve_nodes(r1, [uuid])
|
||||
|
||||
# release reservation
|
||||
self.dbapi.release_nodes(r1, [uuid])
|
||||
res = self.dbapi.get_node(uuid)
|
||||
self.assertEqual(None, res['reservation'])
|
||||
|
||||
def test_reservation_of_reserved_node_fails(self):
|
||||
n = self._create_test_node()
|
||||
uuid = n['uuid']
|
||||
|
||||
r1 = 'fake-reservation'
|
||||
r2 = 'another-reservation'
|
||||
|
||||
# reserve the node
|
||||
self.dbapi.reserve_nodes(r1, [uuid])
|
||||
|
||||
# another host fails to reserve or release
|
||||
self.assertRaises(exception.NodeLocked,
|
||||
self.dbapi.reserve_nodes,
|
||||
@@ -108,10 +137,15 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
self.dbapi.release_nodes,
|
||||
r2, [uuid])
|
||||
|
||||
# release reservation
|
||||
def test_reservation_after_release(self):
|
||||
n = self._create_test_node()
|
||||
uuid = n['uuid']
|
||||
|
||||
r1 = 'fake-reservation'
|
||||
r2 = 'another-reservation'
|
||||
|
||||
self.dbapi.reserve_nodes(r1, [uuid])
|
||||
self.dbapi.release_nodes(r1, [uuid])
|
||||
res = self.dbapi.get_node(uuid)
|
||||
self.assertEqual(None, res['reservation'])
|
||||
|
||||
# another host succeeds
|
||||
self.dbapi.reserve_nodes(r2, [uuid])
|
||||
@@ -119,20 +153,23 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
self.assertEqual(r2, res['reservation'])
|
||||
|
||||
def test_reserve_many_nodes(self):
|
||||
uuids = []
|
||||
for i in xrange(1, 6):
|
||||
n = utils.get_test_node(id=i, uuid=uuidutils.generate_uuid())
|
||||
self.dbapi.create_node(n)
|
||||
uuids.append(n['uuid'])
|
||||
uuids = self._create_many_test_nodes()
|
||||
r1 = 'first-reservation'
|
||||
|
||||
self.dbapi.reserve_nodes(r1, uuids)
|
||||
|
||||
for uuid in uuids:
|
||||
res = self.dbapi.get_node(uuid)
|
||||
self.assertEqual(r1, res['reservation'])
|
||||
|
||||
def test_reserve_overlaping_ranges_fails(self):
|
||||
uuids = self._create_many_test_nodes()
|
||||
|
||||
uuids.sort()
|
||||
r1 = 'first-reservation'
|
||||
r2 = 'second-reservation'
|
||||
|
||||
# nodes 1,2,3: r1. nodes 4,5: unreseved
|
||||
self.dbapi.reserve_nodes(r1, uuids[:3])
|
||||
|
||||
# overlapping ranges fail
|
||||
self.assertRaises(exception.NodeLocked,
|
||||
self.dbapi.reserve_nodes,
|
||||
r2, uuids)
|
||||
@@ -140,14 +177,46 @@ class DbNodeTestCase(base.DbTestCase):
|
||||
self.dbapi.reserve_nodes,
|
||||
r2, uuids[2:])
|
||||
|
||||
# non-overlapping range succeeds
|
||||
def test_reserve_non_overlaping_ranges(self):
|
||||
uuids = self._create_many_test_nodes()
|
||||
|
||||
r1 = 'first-reservation'
|
||||
r2 = 'second-reservation'
|
||||
|
||||
self.dbapi.reserve_nodes(r1, uuids[:3])
|
||||
self.dbapi.reserve_nodes(r2, uuids[3:])
|
||||
|
||||
for i in range(0, len(uuids)):
|
||||
res = self.dbapi.get_node(uuids[i])
|
||||
|
||||
reservation = r1 if i < 3 else r2
|
||||
self.assertEqual(reservation, res['reservation'])
|
||||
|
||||
def test_release_overlaping_ranges_fails(self):
|
||||
uuids = self._create_many_test_nodes()
|
||||
|
||||
r1 = 'first-reservation'
|
||||
r2 = 'second-reservation'
|
||||
|
||||
self.dbapi.reserve_nodes(r1, uuids[:3])
|
||||
self.dbapi.reserve_nodes(r2, uuids[3:])
|
||||
|
||||
# overlapping release fails
|
||||
self.assertRaises(exception.NodeLocked,
|
||||
self.dbapi.release_nodes,
|
||||
r1, uuids)
|
||||
|
||||
# non-overlapping release succeeds
|
||||
def test_release_non_ranges(self):
|
||||
uuids = self._create_many_test_nodes()
|
||||
|
||||
r1 = 'first-reservation'
|
||||
r2 = 'second-reservation'
|
||||
|
||||
self.dbapi.reserve_nodes(r1, uuids[:3])
|
||||
self.dbapi.reserve_nodes(r2, uuids[3:])
|
||||
|
||||
self.dbapi.release_nodes(r1, uuids[:3])
|
||||
self.dbapi.release_nodes(r2, uuids[3:])
|
||||
|
||||
for uuid in uuids:
|
||||
res = self.dbapi.get_node(uuid)
|
||||
self.assertEqual(None, res['reservation'])
|
||||
|
||||
@@ -26,32 +26,25 @@ from ironic.tests.db import utils
|
||||
class DbPortTestCase(base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
# This method creates a port for every test and
|
||||
# replaces a test for creating a port.
|
||||
super(DbPortTestCase, self).setUp()
|
||||
self.dbapi = dbapi.get_instance()
|
||||
self.n = None
|
||||
self.p = None
|
||||
|
||||
def _init(self):
|
||||
self.n = utils.get_test_node()
|
||||
self.p = utils.get_test_port()
|
||||
self.dbapi.create_node(self.n)
|
||||
self.dbapi.create_port(self.p)
|
||||
|
||||
def test_create_port(self):
|
||||
self._init()
|
||||
|
||||
def test_get_port(self):
|
||||
self._init()
|
||||
|
||||
# test get-by-id
|
||||
def test_get_port_by_id(self):
|
||||
res = self.dbapi.get_port(self.p['id'])
|
||||
self.assertEqual(self.p['address'], res['address'])
|
||||
|
||||
# test get-by-uuid
|
||||
def test_get_port_by_uuid(self):
|
||||
res = self.dbapi.get_port(self.p['uuid'])
|
||||
self.assertEqual(self.p['id'], res['id'])
|
||||
|
||||
# test get-by-address
|
||||
def test_get_port_by_address(self):
|
||||
res = self.dbapi.get_port(self.p['address'])
|
||||
self.assertEqual(self.p['id'], res['id'])
|
||||
|
||||
@@ -62,21 +55,32 @@ class DbPortTestCase(base.DbTestCase):
|
||||
self.assertRaises(exception.InvalidMAC,
|
||||
self.dbapi.get_port, 'not-a-mac')
|
||||
|
||||
def test_get_ports_by_node(self):
|
||||
self._init()
|
||||
|
||||
# test get-by-node-id
|
||||
def test_get_ports_by_node_id(self):
|
||||
res = self.dbapi.get_ports_by_node(self.n['id'])
|
||||
self.assertEqual(self.p['address'], res[0]['address'])
|
||||
|
||||
# test get-by-node-uuid
|
||||
def test_get_ports_by_node_uuid(self):
|
||||
res = self.dbapi.get_ports_by_node(self.n['uuid'])
|
||||
self.assertEqual(self.p['address'], res[0]['address'])
|
||||
|
||||
# same tests, but fail
|
||||
def test_get_ports_by_node_that_does_not_exist(self):
|
||||
res = self.dbapi.get_ports_by_node(99)
|
||||
self.assertEqual(0, len(res))
|
||||
|
||||
res = self.dbapi.get_ports_by_node(
|
||||
'12345678-9999-0000-aaaa-123456789012')
|
||||
self.assertEqual(0, len(res))
|
||||
|
||||
def test_destroy_port(self):
|
||||
self.dbapi.destroy_port(self.p['id'])
|
||||
self.assertRaises(exception.PortNotFound,
|
||||
self.dbapi.destroy_port, self.p['id'])
|
||||
|
||||
def test_update_port(self):
|
||||
old_address = self.p['address']
|
||||
new_address = 'ff.ee.dd.cc.bb.aa'
|
||||
|
||||
self.assertNotEqual(old_address, new_address)
|
||||
|
||||
res = self.dbapi.update_port(self.p['id'], {'address': new_address})
|
||||
self.assertEqual(new_address, res['address'])
|
||||
|
||||
Reference in New Issue
Block a user