示例#1
0
def test_paasta_rollback_mark_for_deployment_wrong_cluster(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_list_clusters,
    mock_figure_out_service_name,
    mock_validate_given_instances,
    mock_list_all_instances_for_service,
):

    fake_args = Mock(
        cluster='cluster1',
        instances='instance1',
        commit='123456'
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'
    mock_list_clusters.return_value = ['cluster0', 'cluster2']
    mock_list_all_instances_for_service.return_value = ['instance1', 'instance2']
    mock_validate_given_instances.return_value = [['instance1'], []]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 1

    assert mock_mark_for_deployment.call_count == 0
示例#2
0
def test_paasta_rollback_mark_for_deployment_wrong_cluster(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_list_clusters,
    mock_figure_out_service_name,
    mock_validate_given_instances,
    mock_list_all_instances_for_service,
):

    fake_args = Mock(cluster='cluster1',
                     instances='instance1',
                     commit='123456')

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'
    mock_list_clusters.return_value = ['cluster0', 'cluster2']
    mock_list_all_instances_for_service.return_value = [
        'instance1', 'instance2'
    ]
    mock_validate_given_instances.return_value = [['instance1'], []]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 1

    assert mock_mark_for_deployment.call_count == 0
示例#3
0
def test_paasta_rollback_mark_for_deployment_wrong_deploy_group_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config_for_service,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='test_group,fake_deploy.group',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config_for_service.return_value = [
        MarathonServiceConfig(
            instance='some_other_instance',
            cluster='some_other_cluster',
            service=mock_figure_out_service_name.return_value,
            config_dict={},
            branch_dict={},
        ),
    ]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 1

    assert mock_mark_for_deployment.call_count == 0
示例#4
0
def test_paasta_rollback_mark_for_deployment_simple_invocation(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config,
):

    fake_args = Mock(
        deploy_groups='fake_deploy_groups',
        commit='123456'
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config.return_value = [MarathonServiceConfig(
        service='',
        cluster='',
        instance='',
        branch_dict={},
        config_dict={'deploy_group': 'fake_deploy_groups'},
    )]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit
    )

    assert mock_mark_for_deployment.call_count == 1
示例#5
0
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config.return_value = [
        MarathonServiceConfig(
            service=mock_figure_out_service_name.return_value,
            cluster='',
            instance='',
            config_dict={'deploy_group': 'fake_deploy_group'},
            branch_dict={},
        ),
        MarathonServiceConfig(
            service=mock_figure_out_service_name.return_value,
            cluster='fake_cluster',
            instance='fake_instance',
            config_dict={},
            branch_dict={},
        ),
    ]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_cluster.fake_instance',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_deploy_group',
        ),
    ]

    assert all([x in expected for x in mock_mark_for_deployment.mock_calls])
    assert len(expected) == len(mock_mark_for_deployment.mock_calls)
    assert mock_mark_for_deployment.call_count == 2
示例#6
0
def test_paasta_rollback_mark_for_deployment_multiple_instance_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config_for_service,
):

    fake_args = Mock(
        deploy_groups='cluster.instance1,cluster.instance2',
        commit='123456',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config_for_service.return_value = [
        MarathonServiceConfig(
            instance='instance1',
            cluster='cluster',
            service=mock_figure_out_service_name.return_value,
            config_dict={},
            branch_dict={},
        ),
        MarathonServiceConfig(
            instance='instance2',
            cluster='cluster',
            service=mock_figure_out_service_name.return_value,
            config_dict={},
            branch_dict={},
        ),
    ]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='cluster.instance1',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='cluster.instance2',
        ),
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == 2
示例#7
0
def test_paasta_rollback_mark_for_deployment_simple_invocation(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):

    fake_args = Mock(
        deploy_groups='fake_deploy_groups',
        commit='123456'
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_list_deploy_groups.return_value = ['fake_deploy_groups']

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit
    )

    assert mock_mark_for_deployment.call_count == 1
def test_paasta_rollback_git_sha_was_not_marked_before(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
):
    fake_args, _ = parse_args(
        ["rollback", "-s", "fakeservice", "-k", "abcd" * 10, "-l", "fake_deploy_group1"]
    )

    mock_get_git_shas_for_service.return_value = {
        "fake_sha1": ("20170403T025512", "fake_deploy_group1"),
        "fake_sha2": ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [fake_args.deploy_groups]
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 1
    assert not mock_mark_for_deployment.called
    assert not mock_log_audit.called
示例#9
0
def test_paasta_rollback_mark_for_deployment_simple_invocation(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        "rollback", "-s", "fakeservice", "-k", "abcd" * 10, "-l",
        "fake_deploy_group1"
    ])

    mock_get_git_shas_for_service.return_value = {
        fake_args.commit: ("20170403T025512", fake_args.deploy_groups),
        "dcba" * 10: ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [fake_args.deploy_groups]
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit,
    )
示例#10
0
def test_paasta_rollback_mark_for_deployment_simple_invocation(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):

    fake_args = Mock(
        deploy_groups='fake_deploy_groups',
        commit='123456'
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_list_deploy_groups.return_value = ['fake_deploy_groups']

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit
    )

    assert mock_mark_for_deployment.call_count == 1
示例#11
0
def test_paasta_rollback_mark_for_deployment_simple_invocation(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config,
):

    fake_args = Mock(deploy_groups='fake_deploy_groups', commit='123456')

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config.return_value = [
        MarathonServiceConfig(
            service='',
            cluster='',
            instance='',
            branch_dict={},
            config_dict={'deploy_group': 'fake_deploy_groups'},
        )
    ]

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit)

    assert mock_mark_for_deployment.call_count == 1
示例#12
0
def test_paasta_rollback_with_force(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        'rollback',
        '-s', 'fakeservice',
        '-k', 'abcd' * 10,
        '-l', 'fake_deploy_group1',
        '-f',
    ])

    mock_get_git_shas_for_service.return_value = {
        'fake_sha1': ('20170403T025512', 'fake_deploy_group1'),
        'fake_sha2': ('20161006T025416', 'fake_deploy_group2'),
    }

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [fake_args.deploy_groups]
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit,
    )
示例#13
0
def test_paasta_rollback_mark_for_deployment_wrong_deploy_group_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config_for_service,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='test_group,fake_deploy.group',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config_for_service.return_value = [
        MarathonServiceConfig(
            instance='some_other_instance',
            cluster='some_other_cluster',
            service=mock_figure_out_service_name.return_value,
            config_dict={},
            branch_dict={},
        ),
    ]

    assert paasta_rollback(fake_args) == 1
    assert mock_mark_for_deployment.call_count == 0
示例#14
0
def test_paasta_rollback_git_sha_was_not_marked_before(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        'rollback',
        '-s', 'fakeservice',
        '-k', 'abcd' * 10,
        '-l', 'fake_deploy_group1',
    ])

    mock_get_git_shas_for_service.return_value = {
        'fake_sha1': ('20170403T025512', 'fake_deploy_group1'),
        'fake_sha2': ('20161006T025416', 'fake_deploy_group2'),
    }

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [fake_args.deploy_groups]
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 1
    assert not mock_mark_for_deployment.called
示例#15
0
def test_paasta_rollback_with_force(
    mock_deploy_authz_check,
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
    mock_get_currently_deployed_sha,
):
    fake_args, _ = parse_args(
        [
            "rollback",
            "-s",
            "fakeservice",
            "-k",
            "abcd" * 10,
            "-l",
            "fake_deploy_group1",
            "-f",
        ]
    )

    mock_get_git_shas_for_service.return_value = {
        "fake_sha1": ("20170403T025512", "fake_deploy_group1"),
        "fake_sha2": ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [fake_args.deploy_groups]
    mock_mark_for_deployment.return_value = 0
    mock_get_currently_deployed_sha.return_value = "1234" * 10

    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit,
    )
    # ensure that we logged each deploy group that was rolled back AND that we logged things correctly
    mock_log_audit.call_count == len(fake_args.deploy_groups)
    for call_args in mock_log_audit.call_args_list:
        _, call_kwargs = call_args
        assert call_kwargs["action"] == "rollback"
        assert (
            call_kwargs["action_details"]["rolled_back_from"]
            == mock_get_currently_deployed_sha.return_value
        )
        assert call_kwargs["action_details"]["rolled_back_to"] == fake_args.commit
        assert (
            call_kwargs["action_details"]["rollback_type"]
            == RollbackTypes.USER_INITIATED_ROLLBACK.value
        )
        assert call_kwargs["action_details"]["deploy_group"] in fake_args.deploy_groups
        assert call_kwargs["service"] == fake_args.service
示例#16
0
def test_paasta_rollback_mark_for_deployment_simple_invocation(
    mock_can_user_deploy_service,
    mock_get_versions_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
    mock_get_currently_deployed_version,
):
    fake_args, _ = parse_args([
        "rollback", "-s", "fakeservice", "-k", "abcd" * 10, "-l",
        "fake_deploy_group1"
    ])

    mock_get_versions_for_service.return_value = {
        DeploymentVersion(sha=fake_args.commit, image_version=None): (
            "20170403T025512",
            fake_args.deploy_groups,
        ),
        DeploymentVersion(sha="dcba" * 10, image_version=None): (
            "20161006T025416",
            "fake_deploy_group2",
        ),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [fake_args.deploy_groups]
    mock_mark_for_deployment.return_value = 0
    mock_get_currently_deployed_version.return_value = DeploymentVersion(
        sha="1234" * 10, image_version=None)

    assert paasta_rollback(fake_args) == 0

    mock_mark_for_deployment.assert_called_once_with(
        git_url=mock_get_git_url.return_value,
        deploy_group=fake_args.deploy_groups,
        service=mock_figure_out_service_name.return_value,
        commit=fake_args.commit,
        image_version=None,
    )

    # ensure that we logged each deploy group that was rolled back AND that we logged things correctly
    mock_log_audit.call_count == len(fake_args.deploy_groups)
    for call_args in mock_log_audit.call_args_list:
        _, call_kwargs = call_args
        assert call_kwargs["action"] == "rollback"
        assert call_kwargs["action_details"]["rolled_back_from"] == str(
            mock_get_currently_deployed_version.return_value)
        assert call_kwargs["action_details"][
            "rolled_back_to"] == fake_args.commit
        assert (call_kwargs["action_details"]["rollback_type"] ==
                RollbackTypes.USER_INITIATED_ROLLBACK.value)
        assert call_kwargs["action_details"][
            "deploy_group"] in fake_args.deploy_groups
        assert call_kwargs["service"] == fake_args.service
示例#17
0
def test_paasta_rollback_mark_for_deployment_multiple_instance_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_list_clusters,
    mock_figure_out_service_name,
    mock_validate_given_instances,
    mock_list_all_instances_for_service,
):

    fake_args = Mock(
        cluster='cluster1',
        instances='instance1,instance2',
        commit='123456'
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'
    mock_list_clusters.return_value = ['cluster1', 'cluster2']
    mock_list_all_instances_for_service.return_value = ['instance1', 'instance2', 'instance3']
    mock_validate_given_instances.return_value = [['instance1', 'instance2'], []]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            cluster=fake_args.cluster,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            instance='instance1'
        ),
        call(
            git_url=mock_get_git_url.return_value,
            cluster=fake_args.cluster,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            instance='instance2'
        ),
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == 2
示例#18
0
def test_paasta_rollback_mark_for_deployment_no_instance_arg(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_list_clusters,
    mock_figure_out_service_name,
    mock_validate_given_instances,
    mock_list_all_instances_for_service,
):

    fake_args = Mock(
        cluster='cluster1',
        commit='123456',
        instances='',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'
    mock_list_clusters.return_value = ['cluster1', 'cluster2']
    mock_list_all_instances_for_service.return_value = [
        'instance1', 'instance2'
    ]
    mock_validate_given_instances.return_value = [['instance1', 'instance2'],
                                                  []]

    with raises(SystemExit) as sys_exit:
        paasta_rollback(fake_args)
        assert sys_exit.value_code == 0

    expected = [
        call(git_url=mock_get_git_url.return_value,
             cluster=fake_args.cluster,
             service=mock_figure_out_service_name.return_value,
             commit=fake_args.commit,
             instance='instance1'),
        call(git_url=mock_get_git_url.return_value,
             cluster=fake_args.cluster,
             service=mock_figure_out_service_name.return_value,
             commit=fake_args.commit,
             instance='instance2'),
    ]

    assert expected == mock_mark_for_deployment.mock_calls
    assert mock_mark_for_deployment.call_count == 2
示例#19
0
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config.return_value = [
        MarathonServiceConfig(
            service=mock_figure_out_service_name.return_value,
            cluster='',
            instance='',
            config_dict={'deploy_group': 'fake_deploy_group'},
            branch_dict={},
        ),
        MarathonServiceConfig(
            service=mock_figure_out_service_name.return_value,
            cluster='fake_cluster',
            instance='fake_instance',
            config_dict={},
            branch_dict={},
        ),
    ]

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_cluster.fake_instance',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_deploy_group',
        ),
    ]

    assert all([x in expected for x in mock_mark_for_deployment.mock_calls])
    assert len(expected) == len(mock_mark_for_deployment.mock_calls)
    assert mock_mark_for_deployment.call_count == 2
示例#20
0
def test_paasta_rollback_mark_for_deployment_multiple_instance_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_get_instance_config_for_service,
):

    fake_args = Mock(
        deploy_groups='cluster.instance1,cluster.instance2',
        commit='123456',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_get_instance_config_for_service.return_value = [
        MarathonServiceConfig(
            instance='instance1',
            cluster='cluster',
            service=mock_figure_out_service_name.return_value,
            config_dict={},
            branch_dict={},
        ),
        MarathonServiceConfig(
            instance='instance2',
            cluster='cluster',
            service=mock_figure_out_service_name.return_value,
            config_dict={},
            branch_dict={},
        ),
    ]

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='cluster.instance1',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='cluster.instance2',
        ),
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == 2
示例#21
0
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_can_user_deploy_service,
    mock_get_versions_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
    mock_get_currently_deployed_version,
):
    fake_args, _ = parse_args(
        ["rollback", "-s", "fakeservice", "-k", "abcd" * 10])

    mock_get_versions_for_service.return_value = {
        DeploymentVersion(sha="fake_sha1", image_version=None): (
            "20170403T025512",
            "fake_deploy_group1",
        ),
        DeploymentVersion(sha=fake_args.commit, image_version=None): (
            "20161006T025416",
            "fake_deploy_group2",
        ),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [
        "fake_deploy_group",
        "fake_cluster.fake_instance",
    ]
    mock_mark_for_deployment.return_value = 0
    mock_get_currently_deployed_version.return_value = DeploymentVersion(
        sha="1234" * 10, image_version=None)

    assert paasta_rollback(fake_args) == 1

    assert mock_mark_for_deployment.call_count == 0

    mock_log_audit.call_count == len(fake_args.deploy_groups)
    for call_args in mock_log_audit.call_args_list:
        _, call_kwargs = call_args
        assert call_kwargs["action"] == "rollback"
        assert call_kwargs["action_details"]["rolled_back_from"] == str(
            mock_get_currently_deployed_version.return_value)
        assert call_kwargs["action_details"][
            "rolled_back_to"] == fake_args.commit
        assert (call_kwargs["action_details"]["rollback_type"] ==
                RollbackTypes.USER_INITIATED_ROLLBACK.value)
        assert (call_kwargs["action_details"]["deploy_group"]
                in mock_list_deploy_groups.return_value)
        assert call_kwargs["service"] == fake_args.service
def test_paasta_rollback_mark_for_deployment_wrong_deploy_group_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
):
    fake_args, _ = parse_args(
        ["rollback", "-s", "fakeservice", "-k", "abcd" * 10, "-l", "wrong_deploy_group"]
    )

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = ["some_other_instance.some_other_cluster"]

    assert paasta_rollback(fake_args) == 1
    assert not mock_mark_for_deployment.called
    assert not mock_log_audit.called
示例#23
0
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        'rollback',
        '-s', 'fakeservice',
        '-k', 'abcd' * 10,
    ])

    mock_get_git_shas_for_service.return_value = {
        'fake_sha1': ('20170403T025512', 'fake_deploy_group1'),
        fake_args.commit: ('20161006T025416', 'fake_deploy_group2'),
    }

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [
        'fake_deploy_group', 'fake_cluster.fake_instance',
    ]
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_cluster.fake_instance',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_deploy_group',
        ),
    ]

    assert all([x in expected for x in mock_mark_for_deployment.mock_calls])
    assert mock_mark_for_deployment.call_count == len(expected)
示例#24
0
def test_paasta_rollback_mark_for_deployment_wrong_deploy_group_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        'rollback',
        '-s', 'fakeservice',
        '-k', 'abcd' * 10,
        '-l', 'wrong_deploy_group',
    ])

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = ['some_other_instance.some_other_cluster']

    assert paasta_rollback(fake_args) == 1
    assert not mock_mark_for_deployment.called
示例#25
0
def test_paasta_rollback_mark_for_deployment_wrong_deploy_group_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='test_group,fake_deploy.group',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_list_deploy_groups.return_value = ['some_other_instance.some_other_cluster']

    assert paasta_rollback(fake_args) == 1
    assert mock_mark_for_deployment.call_count == 0
示例#26
0
def test_paasta_rollback_mark_for_deployment_wrong_deploy_group_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='test_group,fake_deploy.group',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_list_deploy_groups.return_value = ['some_other_instance.some_other_cluster']

    assert paasta_rollback(fake_args) == 1
    assert mock_mark_for_deployment.call_count == 0
示例#27
0
def test_paasta_rollback_mark_for_deployment_multiple_deploy_group_args(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        "rollback",
        "-s",
        "fakeservice",
        "-k",
        "abcd" * 10,
        "-l",
        "cluster.instance1,cluster.instance2",
    ])

    fake_deploy_groups = fake_args.deploy_groups.split(",")

    mock_get_git_shas_for_service.return_value = {
        "fake_sha1": ("20170403T025512", "fake_deploy_group1"),
        fake_args.commit: ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = fake_deploy_groups
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group=deploy_group,
        ) for deploy_group in fake_deploy_groups
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == len(fake_deploy_groups)
示例#28
0
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args(
        ["rollback", "-s", "fakeservice", "-k", "abcd" * 10])

    mock_get_git_shas_for_service.return_value = {
        "fake_sha1": ("20170403T025512", "fake_deploy_group1"),
        fake_args.commit: ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [
        "fake_deploy_group",
        "fake_cluster.fake_instance",
    ]
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group="fake_cluster.fake_instance",
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group="fake_deploy_group",
        ),
    ]

    assert all([x in expected for x in mock_mark_for_deployment.mock_calls])
    assert mock_mark_for_deployment.call_count == len(expected)
示例#29
0
def test_paasta_rollback_mark_for_deployment_multiple_instance_args(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):

    fake_args = Mock(
        deploy_groups='cluster.instance1,cluster.instance2',
        commit='123456',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_list_deploy_groups.return_value = [
        'cluster.instance1', 'cluster.instance2'
    ]

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='cluster.instance1',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='cluster.instance2',
        ),
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == 2
示例#30
0
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):

    fake_args = Mock(
        commit='123456',
        deploy_groups='',
    )

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = 'fakeservice'

    mock_list_deploy_groups.return_value = [
        'fake_deploy_group', 'fake_cluster.fake_instance']

    mock_mark_for_deployment.return_value = 0
    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_cluster.fake_instance',
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group='fake_deploy_group',
        ),
    ]

    assert all([x in expected for x in mock_mark_for_deployment.mock_calls])
    assert len(expected) == len(mock_mark_for_deployment.mock_calls)
    assert mock_mark_for_deployment.call_count == 2
示例#31
0
def test_paasta_rollback_mark_for_deployment_multiple_deploy_group_args(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
):
    fake_args, _ = parse_args([
        'rollback',
        '-s', 'fakeservice',
        '-k', 'abcd' * 10,
        '-l', 'cluster.instance1,cluster.instance2',
    ])

    fake_deploy_groups = fake_args.deploy_groups.split(',')

    mock_get_git_shas_for_service.return_value = {
        'fake_sha1': ('20170403T025512', 'fake_deploy_group1'),
        fake_args.commit: ('20161006T025416', 'fake_deploy_group2'),
    }

    mock_get_git_url.return_value = 'git://git.repo'
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = fake_deploy_groups
    mock_mark_for_deployment.return_value = 0

    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group=deploy_group,
        ) for deploy_group in fake_deploy_groups
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == len(fake_deploy_groups)
def test_paasta_rollback_mark_for_deployment_multiple_deploy_group_args(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
    mock_get_currently_deployed_sha,
):
    fake_args, _ = parse_args(
        [
            "rollback",
            "-s",
            "fakeservice",
            "-k",
            "abcd" * 10,
            "-l",
            "cluster.instance1,cluster.instance2",
        ]
    )

    fake_deploy_groups = fake_args.deploy_groups.split(",")

    mock_get_git_shas_for_service.return_value = {
        "fake_sha1": ("20170403T025512", "fake_deploy_group1"),
        fake_args.commit: ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = fake_deploy_groups
    mock_mark_for_deployment.return_value = 0
    mock_get_currently_deployed_sha.return_value = "1234" * 10

    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group=deploy_group,
        )
        for deploy_group in fake_deploy_groups
    ]

    mock_mark_for_deployment.assert_has_calls(expected, any_order=True)
    assert mock_mark_for_deployment.call_count == len(fake_deploy_groups)

    mock_log_audit.call_count == len(fake_args.deploy_groups)
    for call_args in mock_log_audit.call_args_list:
        _, call_kwargs = call_args
        assert call_kwargs["action"] == "rollback"
        assert (
            call_kwargs["action_details"]["rolled_back_from"]
            == mock_get_currently_deployed_sha.return_value
        )
        assert call_kwargs["action_details"]["rolled_back_to"] == fake_args.commit
        assert (
            call_kwargs["action_details"]["rollback_type"]
            == RollbackTypes.USER_INITIATED_ROLLBACK.value
        )
        assert (
            call_kwargs["action_details"]["deploy_group"]
            in mock_list_deploy_groups.return_value
        )
        assert call_kwargs["service"] == fake_args.service
def test_paasta_rollback_mark_for_deployment_no_deploy_group_arg(
    mock_get_git_shas_for_service,
    mock_mark_for_deployment,
    mock_get_git_url,
    mock_figure_out_service_name,
    mock_list_deploy_groups,
    mock_log_audit,
    mock_get_currently_deployed_sha,
):
    fake_args, _ = parse_args(["rollback", "-s", "fakeservice", "-k", "abcd" * 10])

    mock_get_git_shas_for_service.return_value = {
        "fake_sha1": ("20170403T025512", "fake_deploy_group1"),
        fake_args.commit: ("20161006T025416", "fake_deploy_group2"),
    }

    mock_get_git_url.return_value = "git://git.repo"
    mock_figure_out_service_name.return_value = fake_args.service
    mock_list_deploy_groups.return_value = [
        "fake_deploy_group",
        "fake_cluster.fake_instance",
    ]
    mock_mark_for_deployment.return_value = 0
    mock_get_currently_deployed_sha.return_value = "1234" * 10

    assert paasta_rollback(fake_args) == 0

    expected = [
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group="fake_cluster.fake_instance",
        ),
        call(
            git_url=mock_get_git_url.return_value,
            service=mock_figure_out_service_name.return_value,
            commit=fake_args.commit,
            deploy_group="fake_deploy_group",
        ),
    ]

    assert all([x in expected for x in mock_mark_for_deployment.mock_calls])
    assert mock_mark_for_deployment.call_count == len(expected)

    mock_log_audit.call_count == len(fake_args.deploy_groups)
    for call_args in mock_log_audit.call_args_list:
        _, call_kwargs = call_args
        assert call_kwargs["action"] == "rollback"
        assert (
            call_kwargs["action_details"]["rolled_back_from"]
            == mock_get_currently_deployed_sha.return_value
        )
        assert call_kwargs["action_details"]["rolled_back_to"] == fake_args.commit
        assert (
            call_kwargs["action_details"]["rollback_type"]
            == RollbackTypes.USER_INITIATED_ROLLBACK.value
        )
        assert (
            call_kwargs["action_details"]["deploy_group"]
            in mock_list_deploy_groups.return_value
        )
        assert call_kwargs["service"] == fake_args.service