def test_get_healthy_marathon_instances_for_short_app_id_considers_none_start_time_unhealthy():
    fake_task = _make_fake_task("/service.instance.foo.bar", started_at=None)
    mock_result = mock.Mock(alive=True)
    fake_task.health_check_results = [mock_result]
    fakes = [fake_task]
    actual = check_marathon_services_replication.filter_healthy_marathon_instances_for_short_app_id(
        all_tasks=fakes, app_id="service.instance"
    )
    assert actual == 0
def test_filter_healthy_marathon_instances_for_short_app_id_correctly_counts_alive_tasks():
    fakes = []
    for i in range(0, 4):
        fake_task = _make_fake_task(f"/service.instance.foo{i}.bar{i}")
        mock_result = mock.Mock(alive=i % 2 == 0)
        fake_task.health_check_results = [mock_result]
        fakes.append(fake_task)
    actual = check_marathon_services_replication.filter_healthy_marathon_instances_for_short_app_id(
        app_id="service.instance", all_tasks=fakes
    )
    assert actual == 2
def test_filter_healthy_marathon_instances_for_short_app_id_considers_new_tasks_not_healthy_yet():
    one_minute = timedelta(minutes=1)
    fakes = []
    for i in range(0, 4):
        fake_task = _make_fake_task(
            f"/service.instance.foo{i}.bar{i}",
            # when i == 0, produces a task that has just started (not healthy yet)
            # otherwise produces a task that was started over a minute ago (healthy)
            started_at=datetime.now(timezone.utc) - one_minute * i,
        )

        mock_result = mock.Mock(alive=True)
        fake_task.health_check_results = [mock_result]
        fakes.append(fake_task)
    actual = check_marathon_services_replication.filter_healthy_marathon_instances_for_short_app_id(
        all_tasks=fakes, app_id="service.instance"
    )
    assert actual == 3