def test_update_app_poor_health():
    """ Tests updating an app with an automatic rollback due to poor health.
    """
    app_id = uuid.uuid4().hex
    app_def = readiness_and_health_app()
    app_def['id'] = app_id

    with marathon_on_marathon():
        client = marathon.create_client()
        client.add_app(app_def)
        shakedown.deployment_wait()

        # start with 1
        tasks = client.get_tasks(app_id)
        assert len(tasks) == 1

        # provides a testing delay to rollback from
        app_def['healthChecks'][0]['path'] = '/non-existant'
        app_def['instances'] = 2
        deployment_id = client.update_app(app_id, app_def)
        # 2 min wait
        try:
            shakedown.deployment_wait()
        except:
            client.rollback_deployment(deployment_id)
            shakedown.deployment_wait()

        tasks = client.get_tasks(app_id)
        assert len(tasks) == 1
def test_update_app_poor_health():
    """ Tests updating an app with an automatic rollback due to poor health.
    """
    app_id = uuid.uuid4().hex
    app_def = readiness_and_health_app()
    app_def['id'] = app_id

    client = marathon.create_client()
    client.add_app(app_def)
    shakedown.deployment_wait()

    # start with 1
    tasks = client.get_tasks(app_id)
    assert len(tasks) == 1

    # provides a testing delay to rollback from
    app_def['healthChecks'][0]['path'] = '/non-existant'
    app_def['instances'] = 2
    deployment_id = client.update_app(app_id, app_def)
    # 2 min wait
    try:
        shakedown.deployment_wait()
    except:
        client.rollback_deployment(deployment_id)
        shakedown.deployment_wait()

    tasks = client.get_tasks(app_id)
    assert len(tasks) == 1
def test_update_app_rollback():
    """ Tests updating an app then rolling back the update.
    """
    app_id = uuid.uuid4().hex
    app_def = readiness_and_health_app()
    app_def['id'] = app_id

    with marathon_on_marathon():
        client = marathon.create_client()
        client.add_app(app_def)
        shakedown.deployment_wait()

        # start with 1
        tasks = client.get_tasks(app_id)
        assert len(tasks) == 1

        app_def['instances'] = 2
        client.update_app(app_id, app_def)
        shakedown.deployment_wait()

        # update works to 2
        tasks = client.get_tasks(app_id)
        assert len(tasks) == 2

        # provides a testing delay to rollback from
        app_def['readinessChecks'][0]['intervalSeconds'] = 30
        app_def['instances'] = 1
        deployment_id = client.update_app(app_id, app_def)
        client.rollback_deployment(deployment_id)

        shakedown.deployment_wait()
        # update to 1 instance is rollback to 2
        tasks = client.get_tasks(app_id)
        assert len(tasks) == 2
def test_update_app_rollback():
    """ Tests updating an app then rolling back the update.
    """
    app_id = uuid.uuid4().hex
    app_def = readiness_and_health_app()
    app_def['id'] = app_id

    client = marathon.create_client()
    client.add_app(app_def)
    shakedown.deployment_wait()

    # start with 1
    tasks = client.get_tasks(app_id)
    assert len(tasks) == 1

    app_def['instances'] = 2
    client.update_app(app_id, app_def)
    shakedown.deployment_wait()

    # update works to 2
    tasks = client.get_tasks(app_id)
    assert len(tasks) == 2

    # provides a testing delay to rollback from
    app_def['readinessChecks'][0]['intervalSeconds'] = 30
    app_def['instances'] = 1
    deployment_id = client.update_app(app_id, app_def)
    client.rollback_deployment(deployment_id)

    shakedown.deployment_wait()
    # update to 1 instance is rollback to 2
    tasks = client.get_tasks(app_id)
    assert len(tasks) == 2