Exemplo n.º 1
0
def grpcurl_get_db_data(from_index, base_dir, endpoint):
    """Get a list of operators already present in the index image.

    :param str from_index: index image to inspect.
    :param str base_dir: base directory to create temporary files in.
    :return: list of unique present operators as provided by the grpc query
    :rtype: list
    :raises IIBError: if any of the commands fail.
    """
    # This is temporary solution till we refactor the code and move those functions to utils
    from iib.workers.tasks.build import (
        _get_index_database,
        _serve_index_registry,
    )

    db_path = _get_index_database(from_index, base_dir)
    port, rpc_proc = _serve_index_registry(db_path)

    if endpoint not in [
            "api.Registry/ListPackages", "api.Registry/ListBundles"
    ]:
        raise IIBError(f"The endpoint '{endpoint}' is not allowed to be used")

    result = run_cmd(
        ['grpcurl', '-plaintext', f'localhost:{port}', endpoint],
        exc_msg=f'Failed to get {endpoint} data from index image',
    )
    rpc_proc.kill()
    return result
Exemplo n.º 2
0
def test_serve_image_registry_no_ports(mock_popen, mock_sleep, mock_config, tmpdir):
    my_mock = mock.MagicMock()
    mock_popen.return_value = my_mock
    my_mock.stderr.read.side_effect = [
        'address already in use',
        'address already in use',
        'address already in use',
    ]
    my_mock.poll.side_effect = [1, 1, 1, None]
    mock_config.return_value = {
        'iib_grpc_start_port': 50051,
        'iib_grpc_init_wait_time': 1,
        'iib_grpc_max_port_tries': 3,
        'iib_grpc_max_tries': 3,
    }
    with pytest.raises(IIBError, match='No free port has been found after 3 attempts.'):
        build._serve_index_registry('some_path.db')
    assert my_mock.poll.call_count == 3
Exemplo n.º 3
0
def test_serve_image_registry(mock_run_cmd, mock_popen, mock_sleep, tmpdir):
    my_mock = mock.MagicMock()
    mock_popen.return_value = my_mock
    my_mock.stderr.read.side_effect = ['address already in use', 'address already in use']
    mock_run_cmd.return_value = 'api.Registry.ListBundles'
    my_mock.poll.side_effect = [1, 1, None]
    port, _ = build._serve_index_registry('some_path.db')
    assert port == 50053
    assert my_mock.poll.call_count == 3