summaryrefslogtreecommitdiff
path: root/ironic/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/tests')
-rw-r--r--ironic/tests/unit/common/test_hash_ring.py45
-rw-r--r--ironic/tests/unit/conductor/test_rpcapi.py6
2 files changed, 33 insertions, 18 deletions
diff --git a/ironic/tests/unit/common/test_hash_ring.py b/ironic/tests/unit/common/test_hash_ring.py
index c87203cca..5ad5ee870 100644
--- a/ironic/tests/unit/common/test_hash_ring.py
+++ b/ironic/tests/unit/common/test_hash_ring.py
@@ -80,28 +80,41 @@ class HashRingManagerTestCase(db_base.DbTestCase):
self.ring_manager.get_ring,
'driver3', '')
- def test_hash_ring_manager_no_refresh(self):
- # If a new conductor is registered after the ring manager is
- # initialized, it won't be seen. Long term this is probably
- # undesirable, but today is the intended behavior.
- self.assertRaises(exception.DriverNotFound,
+ def test_hash_ring_manager_automatic_retry(self):
+ self.assertRaises(exception.TemporaryFailure,
self.ring_manager.get_ring,
'hardware-type', '')
self.register_conductors()
- self.assertRaises(exception.DriverNotFound,
- self.ring_manager.get_ring,
- 'hardware-type', '')
+ self.ring_manager.get_ring('hardware-type', '')
- def test_hash_ring_manager_refresh(self):
+ def test_hash_ring_manager_reset_interval(self):
CONF.set_override('hash_ring_reset_interval', 30)
- # Initialize the ring manager to make _hash_rings not None, then
- # hash ring will refresh only when time interval exceeded.
- self.assertRaises(exception.DriverNotFound,
- self.ring_manager.get_ring,
- 'hardware-type', '')
- self.register_conductors()
+ # Just to simplify calculations
+ CONF.set_override('hash_partition_exponent', 0)
+ c1 = self.dbapi.register_conductor({
+ 'hostname': 'host1',
+ 'drivers': ['driver1', 'driver2'],
+ })
+ c2 = self.dbapi.register_conductor({
+ 'hostname': 'host2',
+ 'drivers': ['driver1'],
+ })
+ self.dbapi.register_conductor_hardware_interfaces(
+ c1.id, 'hardware-type', 'deploy', ['iscsi', 'direct'], 'iscsi')
+
+ ring = self.ring_manager.get_ring('hardware-type', '')
+ self.assertEqual(1, len(ring))
+
+ self.dbapi.register_conductor_hardware_interfaces(
+ c2.id, 'hardware-type', 'deploy', ['iscsi', 'direct'], 'iscsi')
+ ring = self.ring_manager.get_ring('hardware-type', '')
+ # The new conductor is not known yet. Automatic retry does not kick in,
+ # since there is an active conductor for the requested hardware type.
+ self.assertEqual(1, len(ring))
+
self.ring_manager.updated_at = time.time() - 31
- self.ring_manager.get_ring('hardware-type', '')
+ ring = self.ring_manager.get_ring('hardware-type', '')
+ self.assertEqual(2, len(ring))
def test_hash_ring_manager_uncached(self):
ring_mgr = hash_ring.HashRingManager(cache=False,
diff --git a/ironic/tests/unit/conductor/test_rpcapi.py b/ironic/tests/unit/conductor/test_rpcapi.py
index 32302848a..9749c4c92 100644
--- a/ironic/tests/unit/conductor/test_rpcapi.py
+++ b/ironic/tests/unit/conductor/test_rpcapi.py
@@ -130,14 +130,16 @@ class RPCAPITestCase(db_base.DbTestCase):
def test_get_topic_for_driver_unknown_driver(self):
CONF.set_override('host', 'fake-host')
- self.dbapi.register_conductor({
+ c = self.dbapi.register_conductor({
'hostname': 'fake-host',
'drivers': [],
})
+ self.dbapi.register_conductor_hardware_interfaces(
+ c.id, 'fake-driver', 'deploy', ['iscsi', 'direct'], 'iscsi')
rpcapi = conductor_rpcapi.ConductorAPI(topic='fake-topic')
self.assertRaises(exception.DriverNotFound,
rpcapi.get_topic_for_driver,
- 'fake-driver')
+ 'fake-driver-2')
def test_get_topic_for_driver_doesnt_cache(self):
CONF.set_override('host', 'fake-host')