diff options
Diffstat (limited to 'ironic/tests')
-rw-r--r-- | ironic/tests/unit/common/test_hash_ring.py | 45 | ||||
-rw-r--r-- | ironic/tests/unit/conductor/test_rpcapi.py | 6 |
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') |