mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Refactor API helpers for re-use in rest of test framework.
- Move api.helpers to base.populators. - Refactor helper subclasses adapted to use bioblend instead of test framework stuff into base.populators for greater visibility. - Refactor workflow format 2 testing stuff for reuse by Selenium.
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
import json
|
||||
|
||||
from base import api
|
||||
|
||||
from .helpers import DatasetCollectionPopulator, DatasetPopulator
|
||||
from base.populators import DatasetCollectionPopulator, DatasetPopulator
|
||||
|
||||
|
||||
class DatasetCollectionApiTestCase( api.ApiTestCase ):
|
||||
|
||||
@@ -3,8 +3,7 @@ from __future__ import print_function
|
||||
import textwrap
|
||||
|
||||
from base import api
|
||||
|
||||
from .helpers import TestsDatasets
|
||||
from base.populators import TestsDatasets
|
||||
|
||||
|
||||
class DatasetsApiTestCase( api.ApiTestCase, TestsDatasets ):
|
||||
|
||||
@@ -8,7 +8,7 @@ from requests import (
|
||||
|
||||
from base import api
|
||||
|
||||
from .helpers import DatasetPopulator, wait_on
|
||||
from base.populators import DatasetPopulator, wait_on
|
||||
|
||||
|
||||
class HistoriesApiTestCase( api.ApiTestCase ):
|
||||
|
||||
@@ -5,8 +5,7 @@ import json
|
||||
from requests import delete, put
|
||||
|
||||
from base import api
|
||||
|
||||
from .helpers import DatasetCollectionPopulator, LibraryPopulator, TestsDatasets
|
||||
from base.populators import DatasetCollectionPopulator, LibraryPopulator, TestsDatasets
|
||||
|
||||
|
||||
# TODO: Test anonymous access.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from base import api
|
||||
|
||||
from .helpers import DatasetPopulator
|
||||
from base.populators import DatasetPopulator
|
||||
|
||||
|
||||
class TestProvenance( api.ApiTestCase ):
|
||||
|
||||
@@ -4,8 +4,7 @@ import time
|
||||
from operator import itemgetter
|
||||
|
||||
from base import api
|
||||
|
||||
from .helpers import TestsDatasets
|
||||
from base.populators import TestsDatasets
|
||||
|
||||
|
||||
class JobsApiTestCase( api.ApiTestCase, TestsDatasets ):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from base import api
|
||||
|
||||
from .helpers import (
|
||||
from base.populators import (
|
||||
LibraryPopulator,
|
||||
TestsDatasets,
|
||||
wait_on_state
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from base import api
|
||||
from base.populators import WorkflowPopulator
|
||||
from requests import delete
|
||||
|
||||
from .helpers import WorkflowPopulator
|
||||
|
||||
|
||||
class SearchApiTestCase( api.ApiTestCase ):
|
||||
|
||||
|
||||
@@ -2,11 +2,14 @@
|
||||
import json
|
||||
|
||||
from base import api
|
||||
from base.populators import (
|
||||
DatasetCollectionPopulator,
|
||||
DatasetPopulator,
|
||||
LibraryPopulator,
|
||||
skip_without_tool
|
||||
)
|
||||
from galaxy.tools.verify.test_data import TestDataResolver
|
||||
|
||||
from .helpers import (DatasetCollectionPopulator, DatasetPopulator,
|
||||
LibraryPopulator, skip_without_tool)
|
||||
|
||||
|
||||
class ToolsTestCase( api.ApiTestCase ):
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@ import operator
|
||||
from collections import namedtuple
|
||||
from json import dumps, loads
|
||||
|
||||
from .helpers import skip_without_tool
|
||||
from base.populators import skip_without_tool
|
||||
|
||||
from .test_workflows import BaseWorkflowsApiTestCase
|
||||
|
||||
|
||||
|
||||
@@ -9,12 +9,16 @@ import yaml
|
||||
from requests import delete, put
|
||||
|
||||
from base import api
|
||||
from base.populators import (
|
||||
DatasetCollectionPopulator,
|
||||
DatasetPopulator,
|
||||
skip_without_tool,
|
||||
WorkflowPopulator
|
||||
)
|
||||
from galaxy.exceptions import error_codes
|
||||
from galaxy.tools.verify.test_data import TestDataResolver
|
||||
|
||||
from .helpers import (DatasetCollectionPopulator, DatasetPopulator,
|
||||
skip_without_tool, WorkflowPopulator)
|
||||
from .workflows_format_2 import (
|
||||
from base.workflows_format_2 import (
|
||||
convert_and_import_workflow,
|
||||
ImporterGalaxyInterface,
|
||||
)
|
||||
@@ -1216,11 +1220,9 @@ test_data:
|
||||
def test_workflow_stability( self ):
|
||||
# Run this index stability test with following command:
|
||||
# ./run_tests.sh test/api/test_workflows.py:WorkflowsApiTestCase.test_workflow_stability
|
||||
from pkg_resources import resource_string
|
||||
num_tests = 1
|
||||
for workflow_file in [ "test_workflow_topoambigouity.ga", "test_workflow_topoambigouity_auto_laidout.ga" ]:
|
||||
workflow_str = resource_string( __name__, workflow_file )
|
||||
workflow = self.workflow_populator.load_workflow( "test1", content=workflow_str )
|
||||
for workflow_file in [ "test_workflow_topoambigouity", "test_workflow_topoambigouity_auto_laidout" ]:
|
||||
workflow = self.workflow_populator.load_workflow_from_resource( workflow_file )
|
||||
last_step_map = self._step_map( workflow )
|
||||
for i in range(num_tests):
|
||||
uploaded_workflow_id = self.workflow_populator.create_workflow( workflow )
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
import json
|
||||
import time
|
||||
|
||||
from operator import itemgetter
|
||||
|
||||
import requests
|
||||
|
||||
from pkg_resources import resource_string
|
||||
from six import StringIO
|
||||
|
||||
from base import api_asserts
|
||||
|
||||
# Simple workflow that takes an input and call cat wrapper on it.
|
||||
workflow_str = resource_string( __name__, "test_workflow_1.ga" )
|
||||
workflow_str = resource_string( __name__, "data/test_workflow_1.ga" )
|
||||
# Simple workflow that takes an input and filters with random lines twice in a
|
||||
# row - first grabbing 8 lines at random and then 6.
|
||||
workflow_random_x2_str = resource_string( __name__, "test_workflow_2.ga" )
|
||||
workflow_random_x2_str = resource_string( __name__, "data/test_workflow_2.ga" )
|
||||
|
||||
|
||||
DEFAULT_TIMEOUT = 15 # Secs to wait for state to turn ok
|
||||
@@ -229,7 +232,7 @@ class BaseWorkflowPopulator( object ):
|
||||
|
||||
def load_workflow_from_resource( self, name, filename=None ):
|
||||
if filename is None:
|
||||
filename = "%s.ga" % name
|
||||
filename = "data/%s.ga" % name
|
||||
content = resource_string( __name__, filename )
|
||||
return self.load_workflow( name, content=content )
|
||||
|
||||
@@ -476,6 +479,54 @@ def wait_on_state( state_func, assert_ok=False, timeout=DEFAULT_TIMEOUT ):
|
||||
return wait_on( get_state, desc="state", timeout=timeout)
|
||||
|
||||
|
||||
class GiPostGetMixin:
|
||||
"""Mixin for adapting Galaxy testing populators helpers to bioblend."""
|
||||
|
||||
def _get(self, route):
|
||||
return self._gi.make_get_request(self.__url(route))
|
||||
|
||||
def _post(self, route, data={}):
|
||||
data = data.copy()
|
||||
data['key'] = self._gi.key
|
||||
return requests.post(self.__url(route), data=data)
|
||||
|
||||
def __url(self, route):
|
||||
return self._gi.url + "/" + route
|
||||
|
||||
|
||||
class GiDatasetPopulator(BaseDatasetPopulator, GiPostGetMixin):
|
||||
|
||||
"""Implementation of BaseDatasetPopulator backed by bioblend."""
|
||||
|
||||
def __init__(self, gi):
|
||||
"""Construct a dataset populator from a bioblend GalaxyInstance."""
|
||||
self._gi = gi
|
||||
|
||||
|
||||
class GiDatasetCollectionPopulator(BaseDatasetCollectionPopulator, GiPostGetMixin):
|
||||
|
||||
"""Implementation of BaseDatasetCollectionPopulator backed by bioblend."""
|
||||
|
||||
def __init__(self, gi):
|
||||
"""Construct a dataset collection populator from a bioblend GalaxyInstance."""
|
||||
self._gi = gi
|
||||
self.dataset_populator = GiDatasetPopulator(gi)
|
||||
|
||||
def _create_collection(self, payload):
|
||||
create_response = self._post( "dataset_collections", data=payload )
|
||||
return create_response
|
||||
|
||||
|
||||
class GiWorkflowPopulator(BaseWorkflowPopulator, GiPostGetMixin):
|
||||
|
||||
"""Implementation of BaseWorkflowPopulator backed by bioblend."""
|
||||
|
||||
def __init__(self, gi):
|
||||
"""Construct a workflow populator from a bioblend GalaxyInstance."""
|
||||
self._gi = gi
|
||||
self.dataset_populator = GiDatasetPopulator(gi)
|
||||
|
||||
|
||||
def wait_on( function, desc, timeout=DEFAULT_TIMEOUT ):
|
||||
delta = .25
|
||||
iteration = 0
|
||||
@@ -14,13 +14,16 @@ from argparse import ArgumentParser
|
||||
from threading import Thread
|
||||
from uuid import uuid4
|
||||
|
||||
import requests
|
||||
from bioblend import galaxy
|
||||
|
||||
galaxy_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir))
|
||||
sys.path[1:1] = [ os.path.join( galaxy_root, "lib" ), os.path.join( galaxy_root, "test" ) ]
|
||||
|
||||
from api import helpers
|
||||
from base.populators import (
|
||||
GiDatasetCollectionPopulator,
|
||||
GiDatasetPopulator,
|
||||
GiWorkflowPopulator,
|
||||
)
|
||||
from api.workflows_format_2.converter import python_to_workflow
|
||||
|
||||
LONG_TIMEOUT = 1000000000
|
||||
@@ -109,51 +112,6 @@ def _run(args, gi, workflow_id, uuid):
|
||||
)
|
||||
|
||||
|
||||
class GiPostGetMixin:
|
||||
"""Mixin for adapting Galaxy API testing helpers to bioblend."""
|
||||
|
||||
def _get(self, route):
|
||||
return self._gi.make_get_request(self.__url(route))
|
||||
|
||||
def _post(self, route, data={}):
|
||||
data = data.copy()
|
||||
data['key'] = self._gi.key
|
||||
return requests.post(self.__url(route), data=data)
|
||||
|
||||
def __url(self, route):
|
||||
return self._gi.url + "/" + route
|
||||
|
||||
|
||||
class GiDatasetPopulator(helpers.BaseDatasetPopulator, GiPostGetMixin):
|
||||
"""Utility class for dealing with datasets and histories."""
|
||||
|
||||
def __init__(self, gi):
|
||||
"""Construct a dataset populator from a bioblend GalaxyInstance."""
|
||||
self._gi = gi
|
||||
|
||||
|
||||
class GiDatasetCollectionPopulator(helpers.BaseDatasetCollectionPopulator, GiPostGetMixin):
|
||||
"""Utility class for dealing with dataset collections."""
|
||||
|
||||
def __init__(self, gi):
|
||||
"""Construct a dataset collection populator from a bioblend GalaxyInstance."""
|
||||
self._gi = gi
|
||||
self.dataset_populator = GiDatasetPopulator(gi)
|
||||
|
||||
def _create_collection(self, payload):
|
||||
create_response = self._post( "dataset_collections", data=payload )
|
||||
return create_response
|
||||
|
||||
|
||||
class GiWorkflowPopulator(helpers.BaseWorkflowPopulator, GiPostGetMixin):
|
||||
"""Utility class for dealing with workflows."""
|
||||
|
||||
def __init__(self, gi):
|
||||
"""Construct a workflow populator from a bioblend GalaxyInstance."""
|
||||
self._gi = gi
|
||||
self.dataset_populator = GiDatasetPopulator(gi)
|
||||
|
||||
|
||||
def _workflow_struct(args, input_uuid):
|
||||
if args.two_outputs:
|
||||
return _workflow_struct_two_outputs(args, input_uuid)
|
||||
|
||||
Reference in New Issue
Block a user