Ejemplo n.º 1
0
    def test_run_timeout(self, error, info):
        args = {'assembler': 'my_assembler', 'timeout': 10}

        assembler = BaseAssembler(args, 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)

        assembler.assemble = MagicMock(side_effect=TimeoutError())

        with pytest.raises(TimeoutError) as timeout_error:
            assembler.run()

        error_msg = str(timeout_error.value)
        if error_msg[-1] != '.':
            error_msg += '.'
        assert error_msg == (
            'Time ran out for the assembler after 0:00:10 (HH:MM:SS).')

        expect = 'Assembling shards with {}: iteration {}'.format(
            args['assembler'], assembler.state['iteration'])
        info.assert_called_once_with(expect)

        # Python 3.6 formats exceptions differently so we need to do this
        assert error.call_count == 1
        regex = re.compile(
            r'Time ran out for the assembler after 0:00:10 \(HH:MM:SS\)')
        assert regex.match(error.call_args[0][0])
Ejemplo n.º 2
0
    def test_nothing_assembled_false(self, info):
        assembler = BaseAssembler('args', 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)
        assembler.file['output'] = 'tests/data/load_seq1.txt'

        assert not assembler.nothing_assembled()

        info.assert_not_called()
Ejemplo n.º 3
0
    def test_no_blast_hits_false(self, sra_blast_hits_count, info):
        assembler = BaseAssembler('args', 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)

        sra_blast_hits_count.return_value = 1

        assert not assembler.no_blast_hits()

        info.assert_not_called()
Ejemplo n.º 4
0
    def test_nothing_assembled_empty(self, info):
        assembler = BaseAssembler('args', 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)
        assembler.file['output'] = 'tests/data/empty_file.txt'

        assert assembler.nothing_assembled()

        expect = 'No new assemblies in iteration {}'.format(
            assembler.state['iteration'])
        info.assert_called_once_with(expect)
Ejemplo n.º 5
0
    def test_no_blast_hits_true(self, sra_blast_hits_count, info):
        assembler = BaseAssembler('args', 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)

        sra_blast_hits_count.return_value = 0

        assert assembler.no_blast_hits()

        info.assert_called_once_with('No blast hits in iteration {}'.format(
            assembler.state['iteration']))
Ejemplo n.º 6
0
 def build_assembler(self):
     args = {'bit_score': 44, 'contig_length': 55}
     state = {
         'blast_db': 'my_blast_db',
         'query_file': 'my_query_file',
         'query_target': 'my_query_name',
         'iteration': 99
     }
     assembler = BaseAssembler(args, 'my_db_conn')
     assembler.set_state(state['blast_db'], state['query_file'],
                         state['iteration'])
     return assembler
Ejemplo n.º 7
0
    def test_iter_dir(self, args, blast_db, query_file, iteration):
        assume(re.search(r'\w', query_file))
        assembler = BaseAssembler(args, 'db_conn')
        assembler.set_state(blast_db, query_file, iteration)

        base_blast_db = basename(blast_db)
        base_query_file = basename(query_file) if iteration == 1 else ''

        dir_name = '{}_{}_{:02d}'.format(base_blast_db, base_query_file,
                                         iteration)

        expect = join(args['temp_dir'], dir_name)
        assert expect == assembler.iter_dir()
Ejemplo n.º 8
0
    def test_run_ok(self, info):
        args = {'assembler': 'my_assembler', 'timeout': 10}

        assembler = BaseAssembler(args, 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)

        assembler.assemble = MagicMock()

        assembler.run()

        info.assert_called_once_with('Assembling shards with {}: '
                                     'iteration {}'.format(
                                         args['assembler'],
                                         assembler.state['iteration']))
Ejemplo n.º 9
0
    def test_run_called_process_error(self, error, info):
        args = {'assembler': 'my_assembler', 'timeout': 10}
        error_code = 88
        cmd = 'my command'
        error = subprocess.CalledProcessError(error_code, cmd)

        assembler = BaseAssembler(args, 'db_conn')
        assembler.set_state('blast_db', 'query_file', 99)

        assembler.assemble = MagicMock(side_effect=error)

        with pytest.raises(RuntimeError) as runtime_error:
            assembler.run()

        error_msg = str(runtime_error.value)
        if error_msg[-1] != '.':
            error_msg += '.'
        assert error_msg == (
            "The assembler failed with error: Command 'my command' "
            "returned non-zero exit status 88.")

        expect = 'Assembling shards with {}: iteration {}'.format(
            args['assembler'], assembler.state['iteration'])
        info.assert_called_once_with(expect)