def test_upload_file(self, resolwe_mock, sys_mock, requests_mock):
        # Example file:
        fn = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'files', 'example.fastq')

        resolwe_mock.url = 'http://some/url'

        resolwe_mock.auth = MagicMock()
        # Supress upload progress messages:
        sys_mock.sys.stdout.write = MagicMock()
        sys_mock.sys.stdout.flush = MagicMock()

        # Immitate response form server - always status 200
        requests_response = {'files': [{'temp': 'fake_name'}]}
        requests_mock.post.return_value = MagicMock(status_code=200, **{'json.return_value': requests_response})
        resolwe = Resolwe._upload_file(resolwe_mock, fn)
        self.assertEqual(resolwe, 'fake_name')

        # Immitate response form server - always status 400
        requests_mock.post.return_value = MagicMock(status_code=400)
        resolwe = Resolwe._upload_file(resolwe_mock, fn)
        self.assertIsNone(resolwe)

        # Immitate response form server - one status 400, but other 200
        requests_response = {'files': [{'temp': 'fake_name'}]}
        response_ok = MagicMock(status_code=200, **{'json.return_value': requests_response})
        response_fails = MagicMock(status_code=400)
        requests_mock.post.side_effect = [response_ok, response_fails, response_ok, response_ok]
        resolwe = Resolwe._upload_file(resolwe_mock, fn)
        self.assertEqual(resolwe, 'fake_name')
Example #2
0
    def test_empty_file_list(self, resolwe_mock, os_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True

        Resolwe.download_files(resolwe_mock, [])

        resolwe_mock.logger.info.assert_called_once_with("No files to download.")
Example #3
0
 def test_bad_descriptor_input(self, resolwe_mock):
     # Raise error is only one of deswcriptor/descriptor_schema is given:
     message = "Set both or neither descriptor and descriptor_schema."
     with six.assertRaisesRegex(self, ValueError, message):
         Resolwe.run(resolwe_mock, descriptor="a")
     with six.assertRaisesRegex(self, ValueError, message):
         Resolwe.run(resolwe_mock, descriptor_schema="a")
Example #4
0
 def test_init(self, resolwe_mock, resauth_mock, slumber_mock, resolwe_querry_mock, log_mock):
     Resolwe.__init__(resolwe_mock, 'a', 'b', 'http://some/url')
     self.assertEqual(resauth_mock.call_count, 1)
     self.assertEqual(slumber_mock.API.call_count, 1)
     # There are four instances of ResolweQuerry in init: data, process, sample and collection:
     self.assertEqual(resolwe_querry_mock.call_count, 4)
     self.assertEqual(log_mock.getLogger.call_count, 1)
Example #5
0
    def test_file_processing(self, resolwe_mock, data_mock):

        resolwe_mock.api = MagicMock(
            **{
                'process.get.return_value': self.process_mock,
                'data.post.return_value': {}
            })
        resolwe_mock._process_file_field = MagicMock(
            side_effect=[{
                'file': 'file_name1',
                'file_temp': 'temp_file1'
            }, {
                'file': 'file_name2',
                'file_temp': 'temp_file2'
            }, {
                'file': 'file_name3',
                'file_temp': 'temp_file3'
            }])
        data_mock.return_value = "Data object"

        Resolwe.run(resolwe_mock,
                    input={
                        "src": "/path/to/file1",
                        "src_list": ["/path/to/file2", "/path/to/file3"]
                    })
 def test_init(self, resolwe_mock, resauth_mock, slumber_mock, resolwe_api_mock,
               resolwe_querry_mock, log_mock):
     Resolwe.__init__(resolwe_mock, 'a', 'b', 'http://some/url')
     # There are ten instances of ResolweQuery in init: data, process, sample, relations,
     # collection, descriptorschema, user, gorup, feature and mapping.
     self.assertEqual(resolwe_querry_mock.call_count, 10)
     self.assertEqual(log_mock.getLogger.call_count, 1)
Example #7
0
    def test_empty_file_list(self, resolwe_mock, os_mock):
        resolwe_mock.configure_mock(**self.config)

        Resolwe._download_files(resolwe_mock, [])

        resolwe_mock.logger.info.assert_called_once_with(
            "No files to download.")
Example #8
0
    def test_update_existing_process(self):
        """If process exists, process.filter returns list with exactly one element."""
        # local process version > server process version
        self.resolwe_mock.process.filter.return_value = [
            MagicMock(version='1.0.12')
        ]
        Resolwe._register(self.resolwe_mock, self.yaml_file,
                          "alignment-bowtie")
        self.assertEqual(self.resolwe_mock.api.process.post.call_count, 1)
        self.assertEqual(
            self.resolwe_mock.api.process.post.call_args[0][0]['version'],
            '1.0.13')

        self.resolwe_mock.reset_mock()

        # local process version = server process version
        self.resolwe_mock.process.filter.return_value = [
            MagicMock(version='1.0.13')
        ]
        Resolwe._register(self.resolwe_mock, self.yaml_file,
                          "alignment-bowtie")
        self.assertEqual(self.resolwe_mock.api.process.post.call_count, 1)
        self.assertEqual(
            self.resolwe_mock.api.process.post.call_args[0][0]['version'],
            '1.0.14')
    def test_print_upload_processes(self, resolwe_mock, sys_mock):

        # Check output is correct
        resolwe_mock.processes.return_value = PROCESS_SAMPLE
        sys_mock.stdout.write = MagicMock()
        Resolwe.print_upload_processes(resolwe_mock)
        sys_mock.stdout.write.assert_called_with('Upload NGS reads\n')
Example #10
0
    def test_fail_if_bad_dir(self, resolwe_mock, os_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isdir.return_value = False

        message = "Download directory does not exist: .*"
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._download_files(resolwe_mock, self.file_list)
Example #11
0
    def test_completely_new_process(self):
        """If process with given slug does not exist, process.filter will return empty list"""
        self.resolwe_mock.process.filter.return_value = []

        Resolwe._register(self.resolwe_mock, self.yaml_file,
                          "alignment-bowtie")
        self.assertEqual(self.resolwe_mock.api.process.post.call_count, 1)
Example #12
0
    def test_tools_file_not_found(self, os_mock):
        resolwe.TOOLS_REMOTE_HOST = 'something'
        os_mock.configure_mock(**{'path.isfile.return_value': False})

        message = r"Tools file not found: .*"
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._upload_tools(self.resolwe_mock, self.tools)
Example #13
0
    def test_log_if_returncode_gt1(self, subprocess_mock):
        fake_subprocess = MagicMock(returncode=2, **{'communicate.return_value': ['Standard output...', 'b']})
        subprocess_mock.Popen = MagicMock(return_value=fake_subprocess)

        Resolwe._upload_tools(self.resolwe_mock, self.tools)

        self.assertEqual(self.resolwe_mock.logger.warning.call_count, 1)
Example #14
0
    def test_invalid_file_name(self, resolwe_mock, os_mock):
        os_mock.configure_mock(**{'path.isfile.return_value': False})

        message = r"File .* not found."
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._process_file_field(resolwe_mock, "/bad/path/to/file")
        self.assertEqual(resolwe_mock._upload_file.call_count, 0)
Example #15
0
    def test_env_variables(self, resauth_mock):
        # Ensure environmental variables are not set.
        os.environ.pop('RESOLWE_API_HOST', None)
        os.environ.pop('RESOLWE_API_USERNAME', None)
        os.environ.pop('RESOLWE_API_PASSWORD', None)

        # Default URL should be used by default.
        resolwe_api = Resolwe()
        self.assertEqual(resolwe_api.url, 'http://localhost:8000')
        self.assertEqual(resauth_mock.call_args[0][0], None)
        self.assertEqual(resauth_mock.call_args[0][1], None)

        # If environment variable is set, it overrides the default URL.
        os.environ['RESOLWE_API_USERNAME'] = '******'
        os.environ['RESOLWE_API_PASSWORD'] = '******'

        os.environ['RESOLWE_HOST_URL'] = 'http://resolwe-api:8000'
        resolwe_api = Resolwe()
        self.assertEqual(resolwe_api.url, 'http://resolwe-api:8000')
        self.assertEqual(resauth_mock.call_args[0][0], 'foo')
        self.assertEqual(resauth_mock.call_args[0][1], 'bar')

        # `RESOLWE_HOST_URL` takes precedence
        os.environ['RESOLWE_API_HOST'] = 'http://resolwe-api:9000'
        resolwe_api = Resolwe()
        self.assertEqual(resolwe_api.url, 'http://resolwe-api:8000')
        self.assertEqual(resauth_mock.call_args[0][0], 'foo')
        self.assertEqual(resauth_mock.call_args[0][1], 'bar')

        os.environ.pop('RESOLWE_HOST_URL')
        resolwe_api = Resolwe()
        self.assertEqual(resolwe_api.url, 'http://resolwe-api:9000')
        self.assertEqual(resauth_mock.call_args[0][0], 'foo')
        self.assertEqual(resauth_mock.call_args[0][1], 'bar')
Example #16
0
    def test_get_or_run(self, resolwe_mock, data_mock):
        resolwe_mock.api = MagicMock(
            **{'process.get.return_value': self.process_mock})

        Resolwe.get_or_run(resolwe_mock)
        self.assertEqual(resolwe_mock.api.data.get_or_create.post.call_count,
                         1)
Example #17
0
 def test_init(self, resolwe_mock, resauth_mock, slumber_mock,
               resolwe_api_mock, resolwe_querry_mock, log_mock):
     Resolwe.__init__(resolwe_mock, 'a', 'b', 'http://some/url')
     # There are ten instances of ResolweQuery in init: data, process, sample, relations,
     # collection, descriptorschema, user, gorup, feature and mapping.
     self.assertEqual(resolwe_querry_mock.call_count, 10)
     self.assertEqual(log_mock.getLogger.call_count, 1)
Example #18
0
    def test_completely_new_process(self):
        """If process with given slug does not exist, process.filter will return empty list"""
        self.resolwe_mock.process.filter.return_value = []

        Resolwe._register(self.resolwe_mock, self.yaml_file, "alignment-bowtie")
        self.assertEqual(self.resolwe_mock.api.process.post.call_count, 1)
        self.assertEqual(self.resolwe_mock._version_int_to_string.call_count, 0)
Example #19
0
    def test_invalid_file_name(self, resolwe_mock, os_mock):
        os_mock.configure_mock(**{'path.isfile.return_value': False})

        message = r"File .* not found."
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._process_file_field(resolwe_mock, "/bad/path/to/file")
        self.assertEqual(resolwe_mock._upload_file.call_count, 0)
Example #20
0
 def test_bad_descriptor_input(self, resolwe_mock):
     # Raise error is only one of deswcriptor/descriptor_schema is given:
     message = "Set both or neither descriptor and descriptor_schema."
     with six.assertRaisesRegex(self, ValueError, message):
         Resolwe.run(resolwe_mock, descriptor="a")
     with six.assertRaisesRegex(self, ValueError, message):
         Resolwe.run(resolwe_mock, descriptor_schema="a")
Example #21
0
    def test_fail_if_bad_dir(self, resolwe_mock, os_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = False

        message = "Download directory does not exist: .*"
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe.download_files(resolwe_mock, self.file_list)
Example #22
0
    def test_log_if_returncode_gt1(self, subprocess_mock):
        fake_subprocess = MagicMock(returncode=2,
                                    **{'communicate.return_value': ['Standard output...', 'b']})
        subprocess_mock.Popen = MagicMock(return_value=fake_subprocess)

        Resolwe._upload_tools(self.resolwe_mock, self.tools)

        self.assertEqual(self.resolwe_mock.logger.warning.call_count, 1)
Example #23
0
 def test_bad_inputs(self, resolwe_mock, os_mock):
     # Good file, upload fails becouse of bad input keyword
     os_mock.path.isfile.return_value = True
     resolwe_mock.api = MagicMock(**{'process.get.return_value': self.process_json})
     resolwe_mock._upload_file = MagicMock(return_value=None)
     message = r'Field .* not in process .* input schema.'
     with six.assertRaisesRegex(self, KeyError, message):
         Resolwe.run(resolwe_mock, input={"bad_key": "/good/path/to/file"})
Example #24
0
    def test_raise_if_returncode_1(self, subprocess_mock):
        fake_subprocess = MagicMock(returncode=1, **{'communicate.return_value': ['Standard output...', 'b']})

        subprocess_mock.Popen = MagicMock(return_value=fake_subprocess)

        message = r"Tools file not found: .*"
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._upload_tools(self.resolwe_mock, self.tools)
Example #25
0
    def test_logger_calls(self, subprocess_mock):
        fake_subprocess = MagicMock(returncode=0, **{'communicate.return_value': ['Standard output...', ' ']})
        subprocess_mock.Popen = MagicMock(return_value=fake_subprocess)

        Resolwe._upload_tools(self.resolwe_mock, self.tools)

        self.resolwe_mock.logger.info.assert_called_with('Standard output...')
        # confirm that logger.warning was not called - all went ok...
        self.assertEqual(self.resolwe_mock.logger.warning.call_count, 0)
Example #26
0
    def test_raise_if_returncode_1(self, subprocess_mock):
        fake_subprocess = MagicMock(returncode=1,
                                    **{'communicate.return_value': ['Standard output...', 'b']})

        subprocess_mock.Popen = MagicMock(return_value=fake_subprocess)

        message = r"Something wrong while SCP for tool: .*"
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._upload_tools(self.resolwe_mock, self.tools)
Example #27
0
    def test_returns_two_processes(self):
        """
        If process process.filter will return a list of more than one
        process, this is a sign of some unexpected behaviour."""
        self.resolwe_mock.process.filter.return_value = [{}, {}]

        message = r"Unexpected behaviour at get process with slug .*"
        with six.assertRaisesRegex(self, ValueError, message):
            Resolwe._register(self.resolwe_mock, self.yaml_file, "alignment-bowtie")
Example #28
0
    def test_wrap_list(self, resolwe_mock):
        process = self.process_json[0]

        Resolwe._process_inputs(resolwe_mock, {"src_list": ["/path/to/file"]}, process)
        resolwe_mock._process_file_field.assert_called_once_with('/path/to/file')

        resolwe_mock.reset_mock()
        Resolwe._process_inputs(resolwe_mock, {"src_list": "/path/to/file"}, process)
        resolwe_mock._process_file_field.assert_called_once_with('/path/to/file')
Example #29
0
    def test_bad_inputs(self, resolwe_mock, os_mock):
        # Good file, upload fails becouse of bad input keyword
        os_mock.path.isfile.return_value = True
        process = self.process_json[0]

        resolwe_mock._upload_file = MagicMock(return_value=None)
        message = r'Field .* not in process .* input schema.'
        with six.assertRaisesRegex(self, ValidationError, message):
            Resolwe._process_inputs(resolwe_mock, {"bad_key": "/good/path/to/file"}, process)
Example #30
0
    def test_if_upload_fails(self, resolwe_mock, os_mock):
        # Good file, upload fails
        os_mock.configure_mock(**{'path.isfile.return_value': True})
        resolwe_mock._upload_file = MagicMock(return_value=None)

        message = r'Upload failed for .*'
        with six.assertRaisesRegex(self, Exception, message):
            Resolwe._process_file_field(resolwe_mock, "/good/path/to/file")
        self.assertEqual(resolwe_mock._upload_file.call_count, 1)
Example #31
0
 def test_init(self, resolwe_mock, resauth_mock, slumber_mock, resolwe_api_mock,
               resolwe_querry_mock, log_mock):
     Resolwe.__init__(resolwe_mock, 'a', 'b', 'http://some/url')
     self.assertEqual(resauth_mock.call_count, 1)
     self.assertEqual(resolwe_api_mock.call_count, 1)
     # There are seven instances of ResolweQuery in init: data, process, sample,
     # presample, collection, feature and mapping.
     self.assertEqual(resolwe_querry_mock.call_count, 7)
     self.assertEqual(log_mock.getLogger.call_count, 1)
Example #32
0
    def test_wrap_list(self, resolwe_mock):
        process = self.process_mock

        Resolwe._process_inputs(resolwe_mock, {"src_list": ["/path/to/file"]}, process)
        resolwe_mock._process_file_field.assert_called_once_with('/path/to/file')

        resolwe_mock.reset_mock()
        Resolwe._process_inputs(resolwe_mock, {"src_list": "/path/to/file"}, process)
        resolwe_mock._process_file_field.assert_called_once_with('/path/to/file')
Example #33
0
    def test_bad_inputs(self, resolwe_mock, os_mock):
        # Good file, upload fails becouse of bad input keyword
        os_mock.path.isfile.return_value = True
        process = self.process_mock

        resolwe_mock._upload_file = MagicMock(return_value=None)
        message = r'Field .* not in process .* input schema.'
        with self.assertRaisesRegex(ValidationError, message):
            Resolwe._process_inputs(resolwe_mock, {"bad_key": "/good/path/to/file"}, process)
Example #34
0
    def test_bad_response(self, resolwe_mock, os_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True
        response = {"raise_for_status.side_effect": Exception("abc")}
        resolwe_mock.session.get.return_value = MagicMock(ok=False, **response)

        with self.assertRaisesRegex(Exception, "abc"):
            Resolwe._download_files(resolwe_mock, self.file_list[:1])
        self.assertEqual(resolwe_mock.logger.info.call_count, 2)
Example #35
0
    def test_if_upload_fails(self, resolwe_mock, os_mock):
        # Good file, upload fails
        os_mock.configure_mock(**{'path.isfile.return_value': True})
        resolwe_mock._upload_file = MagicMock(return_value=None)

        message = r'Upload failed for .*'
        with six.assertRaisesRegex(self, Exception, message):
            Resolwe._process_file_field(resolwe_mock, "/good/path/to/file")
        self.assertEqual(resolwe_mock._upload_file.call_count, 1)
Example #36
0
    def test_repr(self):
        resolwe_mock = MagicMock(spec=Resolwe, url='www.abc.com')

        resolwe_mock.auth = MagicMock(username='******')
        rep = Resolwe.__repr__(resolwe_mock)
        self.assertEqual(rep, 'Resolwe <url: www.abc.com, username: user>')

        resolwe_mock.auth = MagicMock(username=None)
        rep = Resolwe.__repr__(resolwe_mock)
        self.assertEqual(rep, 'Resolwe <url: www.abc.com>')
Example #37
0
    def test_logger_calls(self, subprocess_mock):
        fake_subprocess = MagicMock(returncode=0,
                                    **{'communicate.return_value': ['Standard output...', ' ']})
        subprocess_mock.Popen = MagicMock(return_value=fake_subprocess)

        Resolwe._upload_tools(self.resolwe_mock, self.tools)

        self.resolwe_mock.logger.info.assert_called_with('Standard output...')
        # confirm that logger.warning was not called - all went ok...
        self.assertEqual(self.resolwe_mock.logger.warning.call_count, 0)
Example #38
0
    def test_dehydrate_data(self, resolwe_mock):
        data_obj = Data(id=1, resolwe=MagicMock())
        data_obj.id = 1  # this is overriden when initialized
        process = self.process_json[0]

        result = Resolwe._process_inputs(resolwe_mock, {"genome": data_obj}, process)
        self.assertEqual(result, {'genome': 1})

        result = Resolwe._process_inputs(resolwe_mock, {"reads": [data_obj]}, process)
        self.assertEqual(result, {'reads': [1]})
Example #39
0
    def test_dehydrate_data(self, resolwe_mock):
        data_obj = Data(id=1, resolwe=MagicMock())
        data_obj.id = 1  # this is overriden when initialized
        process = self.process_mock

        result = Resolwe._process_inputs(resolwe_mock, {"genome": data_obj}, process)
        self.assertEqual(result, {'genome': 1})

        result = Resolwe._process_inputs(resolwe_mock, {"reads": [data_obj]}, process)
        self.assertEqual(result, {'reads': [1]})
Example #40
0
    def test_repr(self):
        resolwe_mock = MagicMock(spec=Resolwe, url="www.abc.com")

        resolwe_mock.auth = MagicMock(username="******")
        rep = Resolwe.__repr__(resolwe_mock)
        self.assertEqual(rep, "Resolwe <url: www.abc.com, username: user>")

        resolwe_mock.auth = MagicMock(username=None)
        rep = Resolwe.__repr__(resolwe_mock)
        self.assertEqual(rep, "Resolwe <url: www.abc.com>")
Example #41
0
    def __init__(self):
        self.url = environ.get('RESOLWE_HOST_URL', DEFAULT_URL)
        self.username = environ.get('RESOLWE_API_USERNAME', DEFAULT_USERNAME)
        self.password = environ.get('RESOLWE_API_PASSWORD', DEFAULT_PASSWORD)

        try:
            self.res = Resolwe(self.username, self.password, self.url)
        except Exception:
            # TODO: raise proper exceptions and handle in GUI
            raise
Example #42
0
    def test_repr(self):
        resolwe_mock = MagicMock(spec=Resolwe, url='www.abc.com')

        resolwe_mock.auth = MagicMock(username='******')
        rep = Resolwe.__repr__(resolwe_mock)
        self.assertEqual(rep, 'Resolwe <url: www.abc.com, username: user>')

        resolwe_mock.auth = MagicMock(username=None)
        rep = Resolwe.__repr__(resolwe_mock)
        self.assertEqual(rep, 'Resolwe <url: www.abc.com>')
Example #43
0
    def test_validate_url(self, requests_get_mock):
        resolwe = MagicMock(spec=Resolwe)

        message = 'Server url must start with .*'
        with self.assertRaisesRegex(ValueError, message):
            Resolwe._validate_url(resolwe, 'starts.without.http')

        requests_get_mock.side_effect = requests.exceptions.ConnectionError()
        message = "The site can't be reached: .*"
        with self.assertRaisesRegex(ValueError, message):
            Resolwe._validate_url(resolwe, 'http://invalid.url')
Example #44
0
    def test_bad_response(self, resolwe_mock, requests_mock, os_mock, open_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True
        mock_open.return_value = MagicMock(spec=io.IOBase)

        response = {'raise_for_status.side_effect': Exception("abc")}
        requests_mock.get.return_value = MagicMock(ok=False, **response)

        with six.assertRaisesRegex(self, Exception, "abc"):
            Resolwe.download_files(resolwe_mock, self.file_list[:1])
        self.assertEqual(resolwe_mock.logger.info.call_count, 2)
Example #45
0
    def test_validate_url(self, requests_get_mock):
        resolwe = MagicMock(spec=Resolwe)

        message = 'Server url must start with .*'
        with self.assertRaisesRegex(ValueError, message):
            Resolwe._validate_url(resolwe, 'starts.without.http')

        requests_get_mock.side_effect = requests.exceptions.ConnectionError()
        message = "The site can't be reached: .*"
        with self.assertRaisesRegex(ValueError, message):
            Resolwe._validate_url(resolwe, 'http://invalid.url')
Example #46
0
    def test_bad_response(self, resolwe_mock, requests_mock, os_mock, open_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True
        mock_open.return_value = MagicMock(spec=io.IOBase)

        response = {'raise_for_status.side_effect': Exception("abc")}
        requests_mock.get.return_value = MagicMock(ok=False, **response)

        with six.assertRaisesRegex(self, Exception, "abc"):
            Resolwe._download_files(resolwe_mock, self.file_list[:1])
        self.assertEqual(resolwe_mock.logger.info.call_count, 2)
Example #47
0
    def test_raises_client_error(self):
        # Check raises error if slumber.exceptions.HttpClientError happens
        self.resolwe_mock.process.filter.return_value = []

        # Prepare response object & exception:
        response = requests.Response()
        response.status_code = 405
        exception = slumber.exceptions.HttpClientError(response=response)

        self.resolwe_mock.api.process.post.side_effect = exception
        with self.assertRaises(slumber.exceptions.HttpClientError):
            Resolwe._register(self.resolwe_mock, self.yaml_file, "alignment-bowtie")
Example #48
0
    def test_file_processing(self, resolwe_mock, data_mock):

        resolwe_mock.api = MagicMock(**{'process.get.return_value': self.process_json, 'data.post.return_value': {}})
        resolwe_mock._process_file_field = MagicMock(side_effect=[
            {'file': 'file_name1', 'file_temp': 'temp_file1'},
            {'file': 'file_name2', 'file_temp': 'temp_file2'},
            {'file': 'file_name3', 'file_temp': 'temp_file3'}])
        data_mock.return_value = "Data object"

        Resolwe.run(resolwe_mock,
                    input={"src": "/path/to/file1",
                           "src_list": ["/path/to/file2", "/path/to/file3"]})
Example #49
0
    def test_raises_client_error(self):
        # Check raises error if slumber.exceptions.HttpClientError happens
        self.resolwe_mock.process.filter.return_value = []

        # Prepare response object & exception:
        response = requests.Response()
        response.status_code = 405
        exception = slumber.exceptions.HttpClientError(response=response)

        self.resolwe_mock.api.process.post.side_effect = exception
        with self.assertRaises(slumber.exceptions.HttpClientError):
            Resolwe._register(self.resolwe_mock, self.yaml_file, "alignment-bowtie")
Example #50
0
    def test_dehydrate_collections(self, resolwe_mock):
        resolwe_mock.configure_mock(**{'_get_process.return_value': {'slug': 'some:prc:slug:'},
                                       '_process_inputs.return_value': {}})
        resolwe_mock.collection = MagicMock()
        resolwe_mock.api = MagicMock(**{'process.get.return_value': self.process_json,
                                        'data.post.return_value': {}})

        collection = Collection(id=1, resolwe=MagicMock())
        collection.id = 1  # this is overriden when initialized

        Resolwe.run(resolwe_mock, collections=[collection])
        resolwe_mock.api.data.post.assert_called_once_with(
            {'process': 'some:prc:slug:', 'input': {}, 'collections': [1]})
Example #51
0
    def test_print_process_inpts(self, resolwe_mock, sys_mock):

        # Bad processor name:
        resolwe_mock.processes.return_value = []
        with self.assertRaises(Exception) as exc:
            Resolwe.print_process_inputs(resolwe_mock, 'Bad processor name')
        self.assertRegex(exc.exception.args[0], r"Invalid process name: .*.")  # pylint: disable=deprecated-method

        # Check output is correct
        resolwe_mock.processes.return_value = PROCESS_SAMPLE
        sys_mock.stdout.write = MagicMock()
        Resolwe.print_process_inputs(resolwe_mock, 'Upload NGS reads')
        sys_mock.stdout.write.assert_called_with('src -> basic:file:\n')
Example #52
0
    def test_validate_url(self):
        resolwe = MagicMock(spec=Resolwe)

        message = "Server url must start with .*"
        with self.assertRaisesRegex(ValueError, message):
            Resolwe._validate_url(resolwe, "starts.without.http")

        resolwe.session = MagicMock(
            get=MagicMock(side_effect=requests.exceptions.ConnectionError())
        )
        message = "The site can't be reached: .*"
        with self.assertRaisesRegex(ValueError, message):
            Resolwe._validate_url(resolwe, "http://invalid.url")
Example #53
0
    def test_good_response(self, resolwe_mock, requests_mock, os_mock, open_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True

        # When mocking open one wants it to return a "file-like" mock: (spec=io.IOBase)
        mock_open.return_value = MagicMock(spec=io.IOBase)

        requests_mock.get.return_value = MagicMock(ok=True, **{'iter_content.return_value': range(3)})

        Resolwe.download_files(resolwe_mock, self.file_list)
        self.assertEqual(resolwe_mock.logger.info.call_count, 3)

        # This asserts may seem wierd. To check what is happening behind the scenes:
        # print(open_mock.mock_calls)
        self.assertEqual(open_mock.return_value.__enter__.return_value.write.call_count, 6)
Example #54
0
    def test_dehydrate_collections(self, resolwe_mock):
        resolwe_mock.configure_mock(
            **{'_get_process.return_value': MagicMock(spec=Process, slug='some:prc:slug:'),
               '_process_inputs.return_value': {}}
        )
        resolwe_mock.collection = MagicMock()
        resolwe_mock.api = MagicMock(**{'process.get.return_value': self.process_mock,
                                        'data.post.return_value': {}})

        collection = Collection(id=1, resolwe=MagicMock())
        collection.id = 1  # this is overriden when initialized

        Resolwe.run(resolwe_mock, collections=[collection])
        resolwe_mock.api.data.post.assert_called_once_with(
            {'process': 'some:prc:slug:', 'input': {}, 'collections': [1]})
Example #55
0
    def test_good_response(self, resolwe_mock, os_mock, open_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True

        resolwe_mock.session.get.return_value = MagicMock(
            ok=True, **{"iter_content.return_value": range(3)}
        )

        Resolwe._download_files(resolwe_mock, self.file_list)
        self.assertEqual(resolwe_mock.logger.info.call_count, 3)

        # This asserts may seem wierd. To check what is happening behind the scenes:
        # print(open_mock.mock_calls)
        self.assertEqual(
            open_mock.return_value.__enter__.return_value.write.call_count, 6
        )
    def test_dehydrate_data(self, resolwe_mock, copy_mock):
        data_obj = Data(id=1, resolwe=MagicMock())
        data_obj.id = 1  # this is overriden when initialized
        process = self.process_mock

        # I appears it is not possible to deepcopy MagicMocks so we just patch
        # the deepcopy functionality:
        copy_mock.deepcopy = MagicMock(return_value={"genome": data_obj})
        result = Resolwe._process_inputs(resolwe_mock, {"genome": data_obj}, process)
        self.assertEqual(result, {'genome': 1})

        # I appears it is not possible to deepcopy MagicMocks so we just patch
        # the deepcopy functionality:
        copy_mock.deepcopy = MagicMock(return_value={"reads": data_obj})
        result = Resolwe._process_inputs(resolwe_mock, {"reads": [data_obj]}, process)
        self.assertEqual(result, {'reads': [1]})
Example #57
0
    def test_good_response(self, resolwe_mock, requests_mock, os_mock, open_mock):
        resolwe_mock.configure_mock(**self.config)
        os_mock.path.isfile.return_value = True

        # When mocking open one wants it to return a "file-like" mock: (spec=io.IOBase)
        mock_open.return_value = MagicMock(spec=io.IOBase)

        requests_mock.get.return_value = MagicMock(ok=True,
                                                   **{'iter_content.return_value': range(3)})

        Resolwe._download_files(resolwe_mock, self.file_list)
        self.assertEqual(resolwe_mock.logger.info.call_count, 3)

        # This asserts may seem wierd. To check what is happening behind the scenes:
        # print(open_mock.mock_calls)
        self.assertEqual(open_mock.return_value.__enter__.return_value.write.call_count, 6)
Example #58
0
    def test_always_bad(self, resolwe_mock, requests_mock):
        resolwe_mock.configure_mock(**self.config)
        # Immitate response form server - always status 400
        requests_mock.post.return_value = MagicMock(status_code=400)

        response = Resolwe._upload_file(resolwe_mock, self.fn)

        self.assertIsNone(response)
        self.assertEqual(resolwe_mock.logger.warning.call_count, 4)
Example #59
0
    def test_update_existing_process(self):
        """If process with given slug already exists, process.filter will return list with exactly one element."""
        self.resolwe_mock.process.filter.return_value = [{'version': 16777228}]

        # local process version > server process version
        Resolwe._register(self.resolwe_mock, self.yaml_file, "alignment-bowtie")
        self.assertEqual(self.resolwe_mock.api.process.post.call_count, 1)
        # Comfirm version was NOT raised (_version_int_to_string NOT called)
        self.assertEqual(self.resolwe_mock._version_int_to_string.call_count, 0)

        self.resolwe_mock.reset_mock()

        # local process version = server process version
        self.resolwe_mock.process.filter.return_value = [{'version': 16777229}]
        Resolwe._register(self.resolwe_mock, self.yaml_file, "alignment-bowtie")
        self.assertEqual(self.resolwe_mock.api.process.post.call_count, 1)
        # Confirm version was NOT raised (_version_int_to_string NOT called)
        self.assertEqual(self.resolwe_mock._version_int_to_string.call_count, 1)
Example #60
0
    def test_always_ok(self, resolwe_mock, requests_mock):
        resolwe_mock.configure_mock(**self.config)
        # Immitate response form server - always status 200:
        requests_response = {'files': [{'temp': 'fake_name'}]}
        requests_mock.post.return_value = MagicMock(status_code=200, **{'json.return_value': requests_response})

        response = Resolwe._upload_file(resolwe_mock, self.fn)

        self.assertEqual(response, 'fake_name')