def test_coordinator_offline(self): crd = self.get_coordinator.return_value crd.start.side_effect = tooz_coordination.ToozConnectionError('err') agent = coordination.Coordinator() self.assertRaises(tooz_coordination.ToozError, agent.start) self.assertFalse(agent.started)
def test_coordinator_lock(self): crd = self.get_coordinator.return_value crd.get_lock.side_effect = lambda n: MockToozLock(n) agent1 = coordination.Coordinator() agent1.start() agent2 = coordination.Coordinator() agent2.start() lock_string = 'lock' expected_lock = lock_string.encode('ascii') self.assertNotIn(expected_lock, MockToozLock.active_locks) with agent1.get_lock(lock_string): self.assertIn(expected_lock, MockToozLock.active_locks) self.assertRaises(Locked, agent1.get_lock(lock_string).acquire) self.assertRaises(Locked, agent2.get_lock(lock_string).acquire) self.assertNotIn(expected_lock, MockToozLock.active_locks)
def test_coordinator_start(self): crd = self.get_coordinator.return_value agent = coordination.Coordinator() agent.start() self.assertTrue(self.get_coordinator.called) self.assertTrue(crd.start.called) self.assertTrue(agent.started)
def test_coordinator_stop(self): crd = self.get_coordinator.return_value agent = coordination.Coordinator() agent.start() self.assertIsNotNone(agent.coordinator) agent.stop() self.assertTrue(crd.stop.called) self.assertIsNone(agent.coordinator)
def test_coordinator_start_with_heartbeat(self, requires_beating): mock_start_heartbeat = mock.Mock( loopingcall, 'FixedIntervalLoopingCall').return_value self.mock_object(loopingcall, 'FixedIntervalLoopingCall', mock.Mock(return_value=mock_start_heartbeat)) crd = self.get_coordinator.return_value crd.requires_beating = requires_beating agent = coordination.Coordinator() agent.start() self.assertTrue(self.get_coordinator.called) self.assertTrue(crd.start.called) self.assertEqual(requires_beating, mock_start_heartbeat.start.called)
def test_coordinator_reconnect(self): start_online = iter([True] + [False] * 5 + [True]) heartbeat_online = iter((False, True, True)) def raiser(cond): if not cond: raise tooz_coordination.ToozConnectionError('err') crd = self.get_coordinator.return_value crd.start.side_effect = lambda *_: raiser(next(start_online)) crd.heartbeat.side_effect = lambda *_: raiser(next(heartbeat_online)) agent = coordination.Coordinator() agent.start() self.assertRaises(tooz_coordination.ToozConnectionError, agent._heartbeat) self.assertEqual(1, self.get_coordinator.call_count) agent._reconnect() self.assertEqual(7, self.get_coordinator.call_count) agent._heartbeat()