|
20 | 20 |
|
21 | 21 | from tests.test_ha import Config |
22 | 22 | from .test_etcd import etcd_read, etcd_write, socket_getaddrinfo |
23 | | -from .test_ha import get_cluster_initialized_with_leader |
| 23 | +from .test_ha import DCSError, get_cluster_initialized_with_leader |
24 | 24 |
|
25 | 25 | SYSID = '12345678901' |
26 | 26 |
|
@@ -299,6 +299,30 @@ def test_resolve_multisite_leader(self, check_transition, disconnected_operation |
299 | 299 | check_transition.assert_called_with(leader=False, note="Failed to update multisite leader status") |
300 | 300 |
|
301 | 301 | # the leader is someone else |
| 302 | + self.multisite._release = True |
| 303 | + self.multisite._failover_target = 'foo' |
| 304 | + self.multisite._failover_timeout = 9999999999 |
| 305 | + self.multisite._set_standby_config = Mock(return_value=True) |
| 306 | + self.multisite.name = 'foo' |
| 307 | + self.multisite._has_leader = True |
| 308 | + self.multisite._resolve_multisite_leader() |
| 309 | + check_transition.assert_called_with(leader=False, note="Lost leader lock to leader") |
| 310 | + self.assertIsNone(self.multisite._failover_target) |
| 311 | + self.assertIsNone(self.multisite._failover_timeout) |
| 312 | + |
| 313 | + # DCS errors |
| 314 | + self.multisite.dcs.get_cluster = Mock(side_effect=DCSError('foo'), return_value=c) |
| 315 | + disconnected_operation.reset_mock() |
| 316 | + self.multisite._has_leader = True |
| 317 | + self.multisite.name = 'blah' |
| 318 | + self.multisite._resolve_multisite_leader() |
| 319 | + |
| 320 | + self.assertEqual(self.multisite._dcs_error, 'Multi site DCS cannot be reached') |
| 321 | + disconnected_operation.assert_called_once() |
| 322 | + self.assertFalse(self.multisite._has_leader) |
| 323 | + self.multisite.on_change.assert_called_once() |
| 324 | + |
| 325 | + |
302 | 326 |
|
303 | 327 |
|
304 | 328 |
|
|
0 commit comments