def test_heartbeat_disconnects_unresponsive_slave(self, slave_alive, seconds_since_last_heartbeat):
        last_heartbeat_time = self._mock_current_datetime - timedelta(seconds=seconds_since_last_heartbeat)
        master = ClusterMaster()

        mock_slave = Mock()
        self.patch('app.master.cluster_master.Slave', new=lambda *args: mock_slave)
        master.connect_slave('slave_url', 1)

        mock_slave.is_alive.return_value = slave_alive
        mock_slave.get_last_heartbeat_time.return_value = last_heartbeat_time

        master._disconnect_non_heartbeating_slaves()
        if slave_alive and seconds_since_last_heartbeat == 1000:
            self.assertEqual(mock_slave.mark_dead.call_count, 1, 'master disconnects unresponsive slave')
        else:
            self.assertEqual(mock_slave.mark_dead.call_count, 0,
                             'master should not disconnect a dead or responsive slave')