示例#1
0
def test_print_cluster_status_missing_deploys_in_red(
    mock_stdout,
    mock_execute_paasta_serviceinit_on_remote_master,
):
    # paasta_status displays missing deploys in red
    service = 'fake_service'
    planned_deployments = [
        'a_cluster.a_instance',
        'a_cluster.b_instance',
    ]
    actual_deployments = {
        'a_cluster.a_instance': '533976a981679d586bed1cfb534fdba4b4e2c815',
    }
    fake_status = 'status: SOMETHING FAKE'
    mock_execute_paasta_serviceinit_on_remote_master.return_value = fake_status
    expected_output = (
        "\n"
        "cluster: a_cluster\n"
        "  instance: %s\n"
        "    Git sha:    533976a9\n"
        "    %s\n"
        "  instance: %s\n"
        "    Git sha:    None\n"
        % (
            PaastaColors.blue('a_instance'),
            fake_status,
            PaastaColors.red('b_instance'),
        )
    )

    status.report_status_for_cluster(
        service, 'a_cluster', planned_deployments, actual_deployments)
    output = mock_stdout.getvalue()
    assert expected_output in output
示例#2
0
def test_get_deployments_strings_default_case_with_smartstack():
    with contextlib.nested(
            mock.patch(
                'paasta_tools.paasta_cli.cmds.info.get_actual_deployments',
                autospec=True),
            mock.patch('service_configuration_lib.read_service_configuration',
                       autospec=True),
    ) as (
            mock_get_actual_deployments,
            mock_read_service_configuration,
    ):
        mock_get_actual_deployments.return_value = [
            'clusterA.main', 'clusterB.main'
        ]
        mock_read_service_configuration.return_value = {
            'smartstack': {
                'main': {
                    'proxy_port': 9001
                }
            }
        }
        actual = info.get_deployments_strings('fake_service')
        assert ' - clusterA (%s)' % PaastaColors.cyan(
            'http://fake_service.paasta-clusterA.yelp/') in actual
        assert ' - clusterB (%s)' % PaastaColors.cyan(
            'http://fake_service.paasta-clusterB.yelp/') in actual
示例#3
0
def test_get_service_info():
    with contextlib.nested(
        mock.patch('paasta_tools.paasta_cli.cmds.info.get_team', autospec=True),
        mock.patch('paasta_tools.paasta_cli.cmds.info.get_runbook', autospec=True),
        mock.patch('paasta_tools.paasta_cli.cmds.info.read_service_configuration', autospec=True),
        mock.patch('service_configuration_lib.read_service_configuration', autospec=True),
        mock.patch('paasta_tools.paasta_cli.cmds.info.get_actual_deployments', autospec=True),
        mock.patch('paasta_tools.paasta_cli.cmds.info.get_smartstack_endpoints', autospec=True),
    ) as (
        mock_get_team,
        mock_get_runbook,
        mock_read_service_configuration,
        mock_scl_read_service_configuration,
        mock_get_actual_deployments,
        mock_get_smartstack_endpoints,
    ):
        mock_get_team.return_value = 'fake_team'
        mock_get_runbook.return_value = 'fake_runbook'
        mock_read_service_configuration.return_value = {
            'description': 'a fake service that does stuff',
            'external_link': 'http://bla',
            'smartstack': {
                'main': {
                    'proxy_port': 9001
                }
            }
        }
        mock_scl_read_service_configuration.return_value = {
            'description': 'a fake service that does stuff',
            'external_link': 'http://bla',
            'smartstack': {
                'main': {
                    'proxy_port': 9001
                }
            }
        }
        mock_get_actual_deployments.return_value = ['clusterA.main', 'clusterB.main']
        mock_get_smartstack_endpoints.return_value = ['http://*****:*****@git.yelpcorp.com:services/fake_service' in actual
        assert 'Jenkins Pipeline: ' in actual
        assert 'Deployed to the following' in actual
        assert 'clusterA (%s)' % PaastaColors.cyan('http://fake_service.paasta-clusterA.yelp/') in actual
        assert 'clusterB (%s)' % PaastaColors.cyan('http://fake_service.paasta-clusterB.yelp/') in actual
        assert 'Smartstack endpoint' in actual
        assert 'http://foo:1234' in actual
        assert 'tcp://bar:1234' in actual
        assert 'Dashboard' in actual
        assert '%s (Sensu Alerts)' % PaastaColors.cyan('https://uchiwa.yelpcorp.com/#/events?q=fake_service') in actual
        mock_get_team.assert_called_with(service='fake_service', overrides={})
        mock_get_runbook.assert_called_with(service='fake_service', overrides={})
示例#4
0
def test_get_deployments_strings_protocol_tcp_case():
    with contextlib.nested(
        mock.patch('paasta_tools.paasta_cli.cmds.info.get_actual_deployments', autospec=True),
        mock.patch('paasta_tools.paasta_cli.cmds.info.load_service_namespace_config', autospec=True),
    ) as (mock_get_actual_deployments, mock_load_service_namespace_config):
        mock_get_actual_deployments.return_value = ['clusterA.main', 'clusterB.main']
        mock_load_service_namespace_config.return_value = ServiceNamespaceConfig({'mode': 'tcp', 'proxy_port': 8080})
        actual = info.get_deployments_strings('unused')
        assert ' - clusterA (%s)' % PaastaColors.cyan('tcp://paasta-clusterA.yelp:8080/') in actual
        assert ' - clusterB (%s)' % PaastaColors.cyan('tcp://paasta-clusterB.yelp:8080/') in actual
示例#5
0
def test_report_status_for_cluster_displays_deployed_service(
    mock_stdout,
    mock_execute_paasta_serviceinit_on_remote_master,
):
    # paasta_status with no args displays deploy info - vanilla case
    service = 'fake_service'
    planned_deployments = ['cluster.instance']
    actual_deployments = {
        'cluster.instance': 'sha'
    }
    fake_status = 'status: SOMETHING FAKE'
    mock_execute_paasta_serviceinit_on_remote_master.return_value = fake_status
    expected_output = (
        "\n"
        "cluster: cluster\n"
        "  instance: %s\n"
        "    Git sha:    sha\n"
        "    %s\n"
        % (
            PaastaColors.blue('instance'),
            fake_status,
        )
    )

    status.report_status_for_cluster(
        service, 'cluster', planned_deployments, actual_deployments)
    output = mock_stdout.getvalue()
    assert expected_output in output
示例#6
0
def test_report_status_for_cluster_displays_deployed_service(
    mock_stdout,
    mock_report_invalid_whitelist_values,
    mock_execute_paasta_serviceinit_on_remote_master,
):
    # paasta_status with no args displays deploy info - vanilla case
    service = 'fake_service'
    planned_deployments = ['cluster.instance']
    actual_deployments = {
        'cluster.instance': 'sha'
    }
    instance_whitelist = []
    fake_status = 'status: SOMETHING FAKE'
    mock_execute_paasta_serviceinit_on_remote_master.return_value = fake_status
    expected_output = (
        "\n"
        "cluster: cluster\n"
        "  instance: %s\n"
        "    Git sha:    sha\n"
        "    %s\n"
        % (
            PaastaColors.blue('instance'),
            fake_status,
        )
    )

    status.report_status_for_cluster(
        service=service,
        cluster='cluster',
        deploy_pipeline=planned_deployments,
        actual_deployments=actual_deployments,
        instance_whitelist=instance_whitelist,
    )
    output = mock_stdout.getvalue()
    assert expected_output in output
示例#7
0
def test_report_status_for_cluster_instance_sorts_in_deploy_order(
    mock_stdout,
    mock_report_invalid_whitelist_values,
    mock_execute_paasta_serviceinit_on_remote_master,
):
    # paasta_status with no args displays deploy info
    service = 'fake_service'
    planned_deployments = [
        'a_cluster.a_instance',
        'a_cluster.b_instance',
    ]
    actual_deployments = {
        'a_cluster.a_instance': '533976a9',
        'a_cluster.b_instance': '533976a9',
    }
    instance_whitelist = []
    fake_status = 'status: SOMETHING FAKE'
    mock_execute_paasta_serviceinit_on_remote_master.return_value = fake_status
    expected_output = (
        "\n"
        "cluster: a_cluster\n"
        "  instance: %s\n"
        "    Git sha:    533976a9\n"
        "    %s\n"
        "  instance: %s\n"
        "    Git sha:    533976a9\n"
        "    %s\n"
        % (
            PaastaColors.blue('a_instance'),
            fake_status,
            PaastaColors.blue('b_instance'),
            fake_status,
        )
    )

    status.report_status_for_cluster(
        service=service,
        cluster='a_cluster',
        deploy_pipeline=planned_deployments,
        actual_deployments=actual_deployments,
        instance_whitelist=instance_whitelist,
    )
    output = mock_stdout.getvalue()
    assert expected_output in output
示例#8
0
def test_get_deployments_strings_default_case_with_smartstack():
    with contextlib.nested(
        mock.patch('paasta_tools.paasta_cli.cmds.info.get_actual_deployments', autospec=True),
        mock.patch('service_configuration_lib.read_service_configuration', autospec=True),
    ) as (
        mock_get_actual_deployments,
        mock_read_service_configuration,
    ):
        mock_get_actual_deployments.return_value = ['clusterA.main', 'clusterB.main']
        mock_read_service_configuration.return_value = {
            'smartstack': {
                'main': {
                    'proxy_port': 9001
                }
            }
        }
        actual = info.get_deployments_strings('fake_service')
        assert ' - clusterA (%s)' % PaastaColors.cyan('http://fake_service.paasta-clusterA.yelp/') in actual
        assert ' - clusterB (%s)' % PaastaColors.cyan('http://fake_service.paasta-clusterB.yelp/') in actual
示例#9
0
def test_print_cluster_status_missing_deploys_in_red(
    mock_stdout,
    mock_report_invalid_whitelist_values,
    mock_execute_paasta_serviceinit_on_remote_master,
):
    # paasta_status displays missing deploys in red
    service = 'fake_service'
    planned_deployments = [
        'a_cluster.a_instance',
        'a_cluster.b_instance',
    ]
    actual_deployments = {
        'a_cluster.a_instance': '533976a981679d586bed1cfb534fdba4b4e2c815',
    }
    instance_whitelist = []
    fake_status = 'status: SOMETHING FAKE'
    mock_execute_paasta_serviceinit_on_remote_master.return_value = fake_status
    expected_output = (
        "\n"
        "cluster: a_cluster\n"
        "  instance: %s\n"
        "    Git sha:    533976a9\n"
        "    %s\n"
        "  instance: %s\n"
        "    Git sha:    None\n"
        % (
            PaastaColors.blue('a_instance'),
            fake_status,
            PaastaColors.red('b_instance'),
        )
    )

    status.report_status_for_cluster(
        service=service,
        cluster='a_cluster',
        deploy_pipeline=planned_deployments,
        actual_deployments=actual_deployments,
        instance_whitelist=instance_whitelist,
    )
    output = mock_stdout.getvalue()
    assert expected_output in output
示例#10
0
def test_get_deployments_strings_protocol_tcp_case():
    with contextlib.nested(
            mock.patch(
                'paasta_tools.paasta_cli.cmds.info.get_actual_deployments',
                autospec=True),
            mock.patch(
                'paasta_tools.paasta_cli.cmds.info.load_service_namespace_config',
                autospec=True),
    ) as (mock_get_actual_deployments, mock_load_service_namespace_config):
        mock_get_actual_deployments.return_value = [
            'clusterA.main', 'clusterB.main'
        ]
        mock_load_service_namespace_config.return_value = ServiceNamespaceConfig(
            {
                'mode': 'tcp',
                'proxy_port': 8080
            })
        actual = info.get_deployments_strings('unused')
        assert ' - clusterA (%s)' % PaastaColors.cyan(
            'tcp://paasta-clusterA.yelp:8080/') in actual
        assert ' - clusterB (%s)' % PaastaColors.cyan(
            'tcp://paasta-clusterB.yelp:8080/') in actual
示例#11
0
def test_get_service_info():
    with contextlib.nested(
            mock.patch('paasta_tools.paasta_cli.cmds.info.get_team',
                       autospec=True),
            mock.patch('paasta_tools.paasta_cli.cmds.info.get_runbook',
                       autospec=True),
            mock.patch(
                'paasta_tools.paasta_cli.cmds.info.read_service_configuration',
                autospec=True),
            mock.patch('service_configuration_lib.read_service_configuration',
                       autospec=True),
            mock.patch(
                'paasta_tools.paasta_cli.cmds.info.get_actual_deployments',
                autospec=True),
            mock.patch(
                'paasta_tools.paasta_cli.cmds.info.get_smartstack_endpoints',
                autospec=True),
    ) as (
            mock_get_team,
            mock_get_runbook,
            mock_read_service_configuration,
            mock_scl_read_service_configuration,
            mock_get_actual_deployments,
            mock_get_smartstack_endpoints,
    ):
        mock_get_team.return_value = 'fake_team'
        mock_get_runbook.return_value = 'fake_runbook'
        mock_read_service_configuration.return_value = {
            'description': 'a fake service that does stuff',
            'external_link': 'http://bla',
            'smartstack': {
                'main': {
                    'proxy_port': 9001
                }
            }
        }
        mock_scl_read_service_configuration.return_value = {
            'description': 'a fake service that does stuff',
            'external_link': 'http://bla',
            'smartstack': {
                'main': {
                    'proxy_port': 9001
                }
            }
        }
        mock_get_actual_deployments.return_value = [
            'clusterA.main', 'clusterB.main'
        ]
        mock_get_smartstack_endpoints.return_value = [
            'http://*****:*****@git.yelpcorp.com:services/fake_service' in actual
        assert 'Jenkins Pipeline: ' in actual
        assert 'Deployed to the following' in actual
        assert 'clusterA (%s)' % PaastaColors.cyan(
            'http://fake_service.paasta-clusterA.yelp/') in actual
        assert 'clusterB (%s)' % PaastaColors.cyan(
            'http://fake_service.paasta-clusterB.yelp/') in actual
        assert 'Smartstack endpoint' in actual
        assert 'http://foo:1234' in actual
        assert 'tcp://bar:1234' in actual
        assert 'Dashboard' in actual
        assert '%s (Sensu Alerts)' % PaastaColors.cyan(
            'https://uchiwa.yelpcorp.com/#/events?q=fake_service') in actual
        mock_get_team.assert_called_with(service='fake_service', overrides={})
        mock_get_runbook.assert_called_with(service='fake_service',
                                            overrides={})