예제 #1
0
def test_load_credentials_keyerror(mock_open, ):
    credentials = {}

    mock_open.side_effect = mock.mock_open(read_data=json.dumps(credentials))

    with pytest.raises(KeyError):
        assert load_credentials()
예제 #2
0
def test_load_credentials_keyerror(
    mock_open,
):
    credentials = {}

    mock_open.side_effect = mock.mock_open(read_data=json.dumps(credentials))

    with pytest.raises(KeyError):
        assert load_credentials()
예제 #3
0
def run_until_number_tasks(context, number):
    for _ in range(20):
        with mock.patch('paasta_tools.mesos_maintenance.load_credentials',
                        autospec=True) as mock_load_credentials:
            mock_load_credentials.side_effect = mesos_maintenance.load_credentials(
                mesos_secrets='/etc/mesos-slave-secret', )
            run_setup_marathon_job(context)
        sleep(0.5)
        if context.marathon_client.get_app(context.app_id).instances == number:
            return
    assert context.marathon_client.get_app(context.app_id).instances == number
예제 #4
0
def when_setup_service_initiated(context):
    with contextlib.nested(
        mock.patch(
            'paasta_tools.bounce_lib.get_happy_tasks',
            autospec=True,
            # Wrap function call so we can select a subset of tasks or test
            # intermediate steps, like when an app is not completely up
            side_effect=lambda app, _, __, ___, **kwargs: get_happy_tasks(
                app, context.service, "fake_nerve_ns", context.system_paasta_config)[:context.max_tasks],
        ),
        mock.patch('paasta_tools.bounce_lib.bounce_lock_zookeeper', autospec=True),
        mock.patch('paasta_tools.bounce_lib.create_app_lock', autospec=True),
        mock.patch('paasta_tools.bounce_lib.time.sleep', autospec=True),
        mock.patch('paasta_tools.setup_marathon_job.load_system_paasta_config', autospec=True),
        mock.patch('paasta_tools.setup_marathon_job._log', autospec=True),
        mock.patch('paasta_tools.marathon_tools.get_config_hash', autospec=True, return_value='confighash'),
        mock.patch('paasta_tools.marathon_tools.get_code_sha_from_dockerurl', autospec=True, return_value='newapp'),
        mock.patch('paasta_tools.marathon_tools.get_docker_url', autospec=True, return_value='busybox'),
        mock.patch('paasta_tools.mesos_maintenance.get_principal', autospec=True),
        mock.patch('paasta_tools.mesos_maintenance.get_secret', autospec=True),
    ) as (
        _,
        _,
        _,
        _,
        mock_load_system_paasta_config,
        _,
        _,
        _,
        _,
        mock_get_principal,
        mock_get_secret,
    ):
        credentials = mesos_maintenance.load_credentials(mesos_secrets='/etc/mesos-slave-secret')
        mock_get_principal.return_value = credentials.principal
        mock_get_secret.return_value = credentials.secret
        mock_load_system_paasta_config.return_value.get_cluster = mock.Mock(return_value=context.cluster)
        # 120 * 0.5 = 60 seconds
        for _ in xrange(120):
            try:
                marathon_apps = marathon_tools.get_all_marathon_apps(context.marathon_client, embed_failures=True)
                (code, message) = setup_marathon_job.setup_service(
                    service=context.service,
                    instance=context.instance,
                    client=context.marathon_client,
                    marathon_apps=marathon_apps,
                    service_marathon_config=context.new_marathon_service_config,
                    soa_dir='/nail/etc/services',
                )
                assert code == 0, message
                return
            except MarathonHttpError:
                time.sleep(0.5)
        raise Exception("Unable to acquire app lock for setup_marathon_job.setup_service")
예제 #5
0
def test_load_credentials(mock_open, ):
    principal = "username"
    secret = "password"
    credentials = {"principal": principal, "secret": secret}

    mock_open.side_effect = mock.mock_open(read_data=json.dumps(credentials))

    credentials = load_credentials()

    assert credentials.principal == principal
    assert credentials.secret == secret
예제 #6
0
def mark_host_at_risk(context, host):
    start = mesos_maintenance.datetime_to_nanoseconds(mesos_maintenance.now())
    duration = mesos_maintenance.parse_timedelta("1h")
    with contextlib.nested(
        mock.patch("paasta_tools.mesos_maintenance.get_principal", autospec=True),
        mock.patch("paasta_tools.mesos_maintenance.get_secret", autospec=True),
    ) as (mock_get_principal, mock_get_secret):
        credentials = mesos_maintenance.load_credentials(mesos_secrets="/etc/mesos-slave-secret")
        mock_get_principal.return_value = credentials.principal
        mock_get_secret.return_value = credentials.secret
        mesos_maintenance.drain([host], start, duration)
        context.at_risk_host = host
예제 #7
0
def when_setup_service_initiated(context):
    with mock.patch(
        'paasta_tools.bounce_lib.get_happy_tasks',
        autospec=True,
        # Wrap function call so we can select a subset of tasks or test
        # intermediate steps, like when an app is not completely up
        side_effect=lambda app, _, __, ___, **kwargs: get_happy_tasks(
            app, context.service, "fake_nerve_ns", context.system_paasta_config,
        )[:context.max_tasks],
    ), mock.patch(
        'paasta_tools.bounce_lib.bounce_lock_zookeeper', autospec=True,
    ), mock.patch(
        'paasta_tools.bounce_lib.time.sleep', autospec=True,
    ), mock.patch(
        'paasta_tools.setup_marathon_job.load_system_paasta_config', autospec=True,
    ) as mock_load_system_paasta_config, mock.patch(
        'paasta_tools.setup_marathon_job._log', autospec=True,
    ), mock.patch(
        'paasta_tools.marathon_tools.get_config_hash', autospec=True, return_value='confighash',
    ), mock.patch(
        'paasta_tools.marathon_tools.get_code_sha_from_dockerurl', autospec=True, return_value='newapp',
    ), mock.patch(
        'paasta_tools.utils.InstanceConfig.get_docker_url', autospec=True, return_value='busybox',
    ), mock.patch(
        'paasta_tools.mesos_maintenance.get_principal', autospec=True,
    ) as mock_get_principal, mock.patch(
        'paasta_tools.mesos_maintenance.get_secret', autospec=True,
    ) as mock_get_secret:
        credentials = mesos_maintenance.load_credentials(mesos_secrets='/etc/mesos-slave-secret')
        mock_get_principal.return_value = credentials.principal
        mock_get_secret.return_value = credentials.secret
        mock_load_system_paasta_config.return_value.get_cluster = mock.Mock(return_value=context.cluster)
        # 120 * 0.5 = 60 seconds
        for _ in range(120):
            try:
                marathon_apps_with_clients = marathon_tools.get_marathon_apps_with_clients(
                    clients=context.marathon_clients.get_all_clients(),
                    embed_tasks=True,
                )
                (code, message, bounce_again) = setup_marathon_job.setup_service(
                    service=context.service,
                    instance=context.instance,
                    clients=context.marathon_clients,
                    marathon_apps_with_clients=marathon_apps_with_clients,
                    job_config=context.new_marathon_service_config,
                    soa_dir='/nail/etc/services',
                )
                assert code == 0, message
                return
            except MarathonHttpError:
                time.sleep(0.5)
        raise Exception("Unable to acquire app lock for setup_marathon_job.setup_service")
예제 #8
0
def _clean_up_maintenance(context):
    """If a host is marked as draining/down for maintenance, bring it back up"""
    if hasattr(context, "at_risk_host"):
        with mock.patch("paasta_tools.mesos_maintenance.get_principal",
                        autospec=True) as mock_get_principal, mock.patch(
                            "paasta_tools.mesos_maintenance.get_secret",
                            autospec=True) as mock_get_secret:
            credentials = load_credentials(
                mesos_secrets="/etc/mesos-slave-secret")
            mock_get_principal.return_value = credentials.principal
            mock_get_secret.return_value = credentials.secret
            undrain([context.at_risk_host])
            del context.at_risk_host
예제 #9
0
def mark_host_at_risk(context, host):
    start = mesos_maintenance.datetime_to_nanoseconds(mesos_maintenance.now())
    duration = mesos_maintenance.parse_timedelta('1h')
    with mock.patch(
        'paasta_tools.mesos_maintenance.get_principal', autospec=True,
    ) as mock_get_principal, mock.patch(
        'paasta_tools.mesos_maintenance.get_secret', autospec=True,
    ) as mock_get_secret:
        credentials = mesos_maintenance.load_credentials(mesos_secrets='/etc/mesos-slave-secret')
        mock_get_principal.return_value = credentials.principal
        mock_get_secret.return_value = credentials.secret
        mesos_maintenance.drain([host], start, duration)
        context.at_risk_host = host
예제 #10
0
def run_until_number_tasks(context, number):
    for _ in xrange(20):
        with contextlib.nested(mock.patch("paasta_tools.mesos_maintenance.load_credentials", autospec=True)) as (
            mock_load_credentials,
        ):
            mock_load_credentials.side_effect = mesos_maintenance.load_credentials(
                mesos_secrets="/etc/mesos-slave-secret"
            )
            run_setup_marathon_job(context)
        sleep(0.5)
        if context.marathon_client.get_app(context.app_id).instances == number:
            return
    assert context.marathon_client.get_app(context.app_id).instances == number
예제 #11
0
def test_load_credentials(mock_open, ):
    principal = 'username'
    secret = 'password'
    credentials = {
        'principal': principal,
        'secret': secret,
    }

    mock_open.side_effect = mock.mock_open(read_data=json.dumps(credentials))

    credentials = load_credentials()

    assert credentials.principal == principal
    assert credentials.secret == secret
예제 #12
0
def _clean_up_maintenance(context):
    """If a host is marked as draining/down for maintenance, bring it back up"""
    if hasattr(context, 'at_risk_host'):
        with contextlib.nested(
            mock.patch('paasta_tools.mesos_maintenance.get_principal', autospec=True),
            mock.patch('paasta_tools.mesos_maintenance.get_secret', autospec=True),
        ) as (
            mock_get_principal,
            mock_get_secret,
        ):
            credentials = load_credentials(mesos_secrets='/etc/mesos-slave-secret')
            mock_get_principal.return_value = credentials.principal
            mock_get_secret.return_value = credentials.secret
            undrain([context.at_risk_host])
            del context.at_risk_host
예제 #13
0
def test_load_credentials(
    mock_open,
):
    principal = 'username'
    secret = 'password'
    credentials = {
        'principal': principal,
        'secret': secret,
    }

    mock_open.side_effect = mock.mock_open(read_data=json.dumps(credentials))

    credentials = load_credentials()

    assert credentials.principal == principal
    assert credentials.secret == secret
예제 #14
0
def test_load_credentials_missing_file(
    mock_open,
):
    with pytest.raises(IOError):
        assert load_credentials()
예제 #15
0
def test_load_credentials_missing_file(mock_open, ):
    with pytest.raises(IOError):
        assert load_credentials()