def test_coordinator_lock(self, get_coordinator, heartbeat): crd = get_coordinator.return_value crd.get_lock.side_effect = lambda n: MockToozLock(n) agent1 = coordination.Coordinator() agent1.start() agent2 = coordination.Coordinator() agent2.start() self.assertNotIn('lock', MockToozLock.active_locks) with agent1.get_lock('lock'): self.assertIn('lock', MockToozLock.active_locks) self.assertRaises(Locked, agent1.get_lock('lock').acquire) self.assertRaises(Locked, agent2.get_lock('lock').acquire) self.assertNotIn('lock', MockToozLock.active_locks)
def test_coordinator_offline(self, get_coordinator): crd = 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_start(self, get_coordinator): crd = get_coordinator.return_value agent = coordination.Coordinator() agent.start() self.assertTrue(get_coordinator.called) self.assertTrue(crd.start.called)
def test_coordinator_lock(self, get_coordinator): crd = get_coordinator.return_value crd.get_lock.side_effect = lambda n: MockToozLock(n) agent1 = coordination.Coordinator() agent1.start() agent2 = coordination.Coordinator() agent2.start() lock_name = 'lock' expected_name = lock_name.encode('ascii') self.assertNotIn(expected_name, MockToozLock.active_locks) with agent1.get_lock(lock_name): self.assertIn(expected_name, MockToozLock.active_locks) self.assertRaises(Locked, agent1.get_lock(lock_name).acquire) self.assertRaises(Locked, agent2.get_lock(lock_name).acquire) self.assertNotIn(expected_name, MockToozLock.active_locks)
def test_coordinator_stop(self, get_coordinator): crd = 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(self, get_coordinator, mock_get_file_path, mock_backend_url): crd = get_coordinator.return_value agent = coordination.Coordinator() self.assertIsNone(agent._file_path) agent.start() self.assertTrue(get_coordinator.called) self.assertTrue(crd.start.called) agent.start() crd.start.assert_called_once_with(start_heart=True) mock_get_file_path.assert_called_once_with(mock_backend_url) self.assertEqual(mock_get_file_path.return_value, agent._file_path)
def test_coordinator_reconnect(self, get_coordinator, heartbeat): 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 = 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, get_coordinator.call_count) agent._reconnect() self.assertEqual(7, get_coordinator.call_count) agent._heartbeat()