Files
galaxy/test/unit/files/test_drs.py
T

107 lines
3.4 KiB
Python

import io
import json
import os
import urllib
from typing import Any
from unittest import mock
import responses
from ._util import (
assert_realizes_as,
assert_realizes_contains,
configured_file_sources,
user_context_fixture,
)
SCRIPT_DIRECTORY = os.path.abspath(os.path.dirname(__file__))
FILE_SOURCES_CONF = os.path.join(SCRIPT_DIRECTORY, "drs_file_sources_conf.yml")
@responses.activate
def test_file_source_drs_http():
def drs_repo_handler(request):
assert request.headers["Authorization"] == "Bearer IBearTokens"
data = {
"id": "314159",
"name": "hello-314159",
"access_methods": [
{
"type": "https",
"access_url": {
"url": "https://my.respository.org/myfile.txt",
"headers": ["Authorization: Basic Z2E0Z2g6ZHJz"],
},
"access_id": "1234",
}
],
}
return (200, {}, json.dumps(data))
responses.add_callback(
responses.GET,
"https://drs.example.org/ga4gh/drs/v1/objects/314159",
callback=drs_repo_handler,
content_type="application/json",
)
test_url = "drs://drs.example.org/314159"
def check_specific_header(request, **kwargs):
assert request.full_url == "https://my.respository.org/myfile.txt"
assert request.headers["Authorization"] == "Basic Z2E0Z2g6ZHJz"
response: Any = io.StringIO("hello drs world")
response.headers = {}
response.geturl = lambda: test_url
return response
with mock.patch.object(urllib.request, "urlopen", new=check_specific_header):
user_context = user_context_fixture()
file_sources = configured_file_sources(FILE_SOURCES_CONF)
file_source_pair = file_sources.get_file_source_path(test_url)
assert file_source_pair.path == test_url
assert file_source_pair.file_source.id == "test1"
assert_realizes_as(file_sources, test_url, "hello drs world", user_context=user_context)
@responses.activate
def test_file_source_drs_s3():
def drs_repo_handler(request):
assert request.headers["Authorization"] == "Bearer IBearTokens"
data = {
"id": "314160",
"name": "hello-314160",
"access_methods": [
{
"type": "s3",
"access_url": {
"url": "s3://ga4gh-demo-data/phenopackets/Cao-2018-TGFBR2-Patient_4.json",
},
"access_id": "1234",
"region": "us-east-1",
}
],
}
return (200, {}, json.dumps(data))
responses.add_callback(
responses.GET,
"https://drs.example.org/ga4gh/drs/v1/objects/314160",
callback=drs_repo_handler,
content_type="application/json",
)
test_url = "drs://drs.example.org/314160"
file_sources = configured_file_sources(FILE_SOURCES_CONF)
user_context = user_context_fixture(file_sources=file_sources)
file_source_pair = file_sources.get_file_source_path(test_url)
assert file_source_pair.path == test_url
assert file_source_pair.file_source.id == "test1"
assert_realizes_contains(
file_sources, test_url, "PMID:30101859-Cao-2018-TGFBR2-Patient_4", user_context=user_context
)