示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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()