mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-13 00:44:55 +08:00
88 lines
5.0 KiB
Python
88 lines
5.0 KiB
Python
from subprocess import CalledProcessError
|
|
|
|
from galaxy.tool_util.deps.container_resolvers.mulled import (
|
|
CachedMulledDockerContainerResolver,
|
|
CachedMulledSingularityContainerResolver,
|
|
MulledDockerContainerResolver,
|
|
)
|
|
from galaxy.tool_util.deps.dependencies import ToolInfo
|
|
from galaxy.tool_util.deps.requirements import ToolRequirement
|
|
|
|
|
|
SINGULARITY_IMAGES = ('foo:1.0--bar', 'baz:2.22', 'mulled-v2-fe8a3b846bc50d24e5df78fa0b562c43477fe9ce:9f946d13f673ab2903cb0da849ad42916d619d18-0')
|
|
|
|
|
|
def test_docker_container_resolver_detects_docker_cli_absent(mocker):
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.which', return_value=None)
|
|
resolver = CachedMulledDockerContainerResolver()
|
|
assert resolver._cli_available is False
|
|
|
|
|
|
def test_docker_container_resolver_detects_docker_cli(mocker):
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled', return_value='/bin/docker')
|
|
resolver = CachedMulledDockerContainerResolver()
|
|
assert resolver.cli_available
|
|
|
|
|
|
def test_cached_docker_container_docker_cli_absent_resolve(mocker):
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.which', return_value=None)
|
|
resolver = CachedMulledDockerContainerResolver()
|
|
assert resolver.cli_available is False
|
|
assert resolver.resolve(enabled_container_types=[], tool_info={}) is None
|
|
|
|
|
|
def test_docker_container_docker_cli_absent_resolve(mocker):
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.which', return_value=None)
|
|
resolver = MulledDockerContainerResolver()
|
|
assert resolver.cli_available is False
|
|
requirement = ToolRequirement(name="samtools", version="1.10", type="package")
|
|
tool_info = ToolInfo(requirements=[requirement])
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.targets_to_mulled_name', return_value='samtools:1.10--h2e538c0_3')
|
|
container_description = resolver.resolve(enabled_container_types=['docker'], tool_info=tool_info)
|
|
assert container_description.type == 'docker'
|
|
assert container_description.identifier == 'quay.io/biocontainers/samtools:1.10--h2e538c0_3'
|
|
|
|
|
|
def test_docker_container_docker_cli_exception_resolve(mocker):
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.which', return_value='/bin/docker')
|
|
resolver = MulledDockerContainerResolver()
|
|
assert resolver.cli_available is True
|
|
requirement = ToolRequirement(name="samtools", version="1.10", type="package")
|
|
tool_info = ToolInfo(requirements=[requirement])
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.targets_to_mulled_name', return_value='samtools:1.10--h2e538c0_3')
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.docker_cached_container_description', side_effect=CalledProcessError(1, 'bla'))
|
|
container_description = resolver.resolve(enabled_container_types=['docker'], tool_info=tool_info, install=True)
|
|
assert resolver.cli_available is True
|
|
assert container_description.type == 'docker'
|
|
assert container_description.identifier == 'quay.io/biocontainers/samtools:1.10--h2e538c0_3'
|
|
|
|
|
|
def test_cached_singularity_container_resolver_uncached(mocker):
|
|
mocker.patch('os.listdir', return_value=SINGULARITY_IMAGES)
|
|
mocker.patch('os.path.exists', return_value=True)
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.safe_makedirs')
|
|
resolver = CachedMulledSingularityContainerResolver(app_info=mocker.Mock(container_image_cache_path='/'))
|
|
requirement = ToolRequirement(name="foo", version="1.0", type="package")
|
|
tool_info = ToolInfo(requirements=[requirement])
|
|
container_description = resolver.resolve(enabled_container_types=['singularity'], tool_info=tool_info)
|
|
assert container_description.type == 'singularity'
|
|
assert container_description.identifier == '/singularity/mulled/foo:1.0--bar'
|
|
|
|
|
|
def test_cached_singularity_container_resolver_dir_mtime_cached(mocker):
|
|
mocker.patch('os.listdir', return_value=SINGULARITY_IMAGES)
|
|
mocker.patch('os.path.exists', return_value=True)
|
|
mocker.patch('galaxy.tool_util.deps.container_resolvers.mulled.safe_makedirs')
|
|
mocker.patch('os.stat', return_value=mocker.Mock(st_mtime=42))
|
|
resolver = CachedMulledSingularityContainerResolver(app_info=mocker.Mock(container_image_cache_path='/'), cache_directory_cacher_type='dir_mtime')
|
|
requirement = ToolRequirement(name="baz", version="2.22", type="package")
|
|
tool_info = ToolInfo(requirements=[requirement])
|
|
container_description = resolver.resolve(enabled_container_types=['singularity'], tool_info=tool_info)
|
|
assert container_description.type == 'singularity'
|
|
assert container_description.identifier == '/singularity/mulled/baz:2.22'
|
|
requirement = ToolRequirement(name="foo", version="1.0", type="package")
|
|
tool_info.requirements.append(requirement)
|
|
container_description = resolver.resolve(enabled_container_types=['singularity'], tool_info=tool_info)
|
|
assert container_description.type == 'singularity'
|
|
assert container_description.identifier == '/singularity/mulled/mulled-v2-fe8a3b846bc50d24e5df78fa0b562c43477fe9ce:9f946d13f673ab2903cb0da849ad42916d619d18-0'
|