def test_failed_worker_is_replaced(popen: Popen, config: Dict[str, Any]):
    worker_config = config.get("worker")
    queue_name = worker_config.get("queue_name")
    worker_name = worker_config.get("worker_name")
    worker = initialize_worker(queue_name, worker_name, config)
    assert worker is not None
    assert worker.running is False
    assert worker.workers_count == 0

    proc1 = MagicMock()
    proc2 = MagicMock()

    popen.side_effect = [proc1, proc2]
    proc1.is_running.return_value = True
    proc2.is_running.return_value = True

    try:
        worker.start()
        assert worker.running is True
        assert worker.workers_count == 1
        popen.assert_called_with(ANY,
                                 stdout=None,
                                 stderr=None,
                                 shell=False,
                                 cwd=tempfile.tempdir)
        proc1.is_running.return_value = False
        time.sleep(0.2)
        assert worker.workers_count == 1
        assert worker._processes[0] == proc2
    finally:
        worker.stop()
        assert worker.running is False
        assert worker.workers_count == 0
def test_initialize_worker(popen: Popen, config: Dict[str, Any]):
    worker_config = config.get("worker")
    queue_name = worker_config.get("queue_name")
    worker_name = worker_config.get("worker_name")
    worker = initialize_worker(queue_name, worker_name, config)
    assert worker is not None
    assert worker.running is False
    assert worker.workers_count == 0

    try:
        worker.start()
        assert worker.running is True
        assert worker.workers_count == 1
        popen.assert_called_with(ANY,
                                 stdout=None,
                                 stderr=None,
                                 shell=False,
                                 cwd=tempfile.tempdir)
    finally:
        worker.stop()
        assert worker.running is False
        assert worker.workers_count == 0