def test_should_retrigger_lambda_after_starting_draining():
    operations = get_draining_operations(
        get_lambda_event(), "clusterName",
        "arn:aws:ecs:us-east-1:12345:container-instance/"
        "71d70fc9-3235-4490-a475-cfbbfeb1f4e3", "ACTIVE", 1)
    assert 2 == len(operations)
    assert isinstance(operations[1], RetriggerLambdaOperation)
    assert operations[
        1].queue_name == "ecs-asg-drain-container-instances-lambda-events-queue-dev"
    assert operations[1].lambda_event == get_lambda_event(
    )["Records"][0]["body"]
def test_should_start_instance_draining_when_instance_in_not_in_draining_state(
):
    operations = get_draining_operations(
        get_lambda_event(), "clusterName",
        "arn:aws:ecs:us-east-1:12345:container-instance/"
        "71d70fc9-3235-4490-a475-cfbbfeb1f4e3", "ACTIVE", 1)
    assert 2 == len(operations)
    assert isinstance(operations[0], InstanceDrainingOperation)
    assert operations[0].cluster_name == "clusterName"
    assert operations[
        0].container_instance_id == "71d70fc9-3235-4490-a475-cfbbfeb1f4e3"
def test_should_retrigger_lambda_when_instance_in_draining_but_has_running_tasks(
):
    operations = get_draining_operations(
        get_lambda_event(), "clusterName",
        "arn:aws:ecs:us-east-1:12345:container-instance/"
        "71d70fc9-3235-4490-a475-cfbbfeb1f4e3", "DRAINING", 1)
    assert 1 == len(operations)
    assert isinstance(operations[0], RetriggerLambdaOperation)
    assert operations[
        0].queue_name == "ecs-asg-drain-container-instances-lambda-events-queue-dev"
    assert operations[0].lambda_event == get_lambda_event(
    )["Records"][0]["body"]
def test_should_terminate_instance_when_instance_is_drained():
    operations = get_draining_operations(
        get_lambda_event(), "clusterName",
        "arn:aws:ecs:us-east-1:12345:container-instance/"
        "71d70fc9-3235-4490-a475-cfbbfeb1f4e3", "DRAINING", 0)
    assert 1 == len(operations)
    assert isinstance(operations[0], TerminateInstanceOperation)
    assert operations[0].complete_lifecyle_request == {
        "AutoScalingGroupName": "ecs-cluster-asg",
        "LifecycleActionResult": "CONTINUE",
        "LifecycleActionToken": "ac194dfe-b074-4f1c-937b-0002ae8177e3",
        "LifecycleHookName": "asg-drain-before-terminate-hook-dev",
        "InstanceId": "i-0d431729225fba8ce"
    }
def test_should_perform_some_operations_when_instance_exists():
    assert 0 != len(
        get_draining_operations(get_lambda_event(), None,
                                "Container/ArnExists", None, 1))
def test_should_do_nothing_when_instance_does_not_exists():
    assert 0 == len(
        get_draining_operations(get_lambda_event(), None, None, None, 1))