Source code for planemo.commands.cmd_shed_test

"""Module describing the planemo ``shed_test`` command."""
import socket
import sys

import click

from planemo import (
    options,
    shed,
)
from planemo.cli import command_function
from planemo.galaxy.serve import shed_serve
from planemo.galaxy.test import run_in_config


@click.command("shed_test")
@options.shed_read_options()
@options.galaxy_target_options()
@options.test_options()
@click.option(
    "--skip_dependencies", is_flag=True, help="Do not install shed dependencies as part of repository installation."
)
@command_function
def cli(ctx, paths, **kwds):
    """Run tests of published shed artifacts.

    This command will start a Galaxy instance configured to target the
    specified shed, find published artifacts (tools and dependencies)
    corresponding to command-line arguments and ``.shed.yml`` file(s),
    install these artifacts, and run the tool tests for these commands.

    This command requires the target to be version 15.07 or newer.
    """
    install_args_list = shed.install_arg_lists(ctx, paths, **kwds)
    port = get_free_port()
    kwds["port"] = port
    return_code = 1
    with shed_serve(ctx, install_args_list, **kwds) as config:
        config.kill()
        return_code = run_in_config(ctx, config, installed=True, **kwds)
    if return_code:
        sys.exit(return_code)


[docs]def get_free_port(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(("localhost", 0)) port = sock.getsockname()[1] sock.close() return port