Ejemplo n.º 1
0
    def test_upload_task(self):
        task = D3RTask(None, D3RParameters())
        self.assertEqual(task._file_uploader, None)
        # try calling upload_task where _file_uploader is None
        task._upload_task()

        # try calling upload_task where _file_uploader is NOT None
        params = D3RParameters()
        params.ftpconfig = 'foo'
        task = D3RTask(None, params)
        self.assertEqual(task._file_uploader, None)
        # try calling upload_task where _file_uploader is None
        task._upload_task()

        # try calling upload_task where _file_uploader.upload_files
        # throws exception
        uploader = MockFileTransfer()
        uploader.set_upload_files_exception(MockException('hi'))
        task = D3RTask(None, D3RParameters())
        task.set_file_transfer(uploader)
        task._upload_task()

        # try calling where upload_summary throws exception
        uploader.set_upload_files_exception(None)
        uploader.set_upload_summary_exception(MockException('boo'))
        task._upload_task()

        # try calling where upload_summary returns None
        uploader.set_upload_summary_exception(None)
        uploader.set_upload_summary(None)
        task._upload_task()

        uploader.set_upload_summary('hello')
        task._upload_task()
        self.assertEqual(task._email_log, '\nhello\n')
Ejemplo n.º 2
0
    def test_constructor(self):
        params = D3RParameters()
        task = D3RTask('/path', params)
        self.assertEqual(task.get_name(), None)
        self.assertEqual(task.get_path(), '/path')
        self.assertEqual(task.get_stage(), None)
        self.assertEqual(task.get_status(), D3RTask.UNKNOWN_STATUS)
        self.assertEqual(task.get_error(), None)
        task.set_name('foo')
        task.set_path('blah')
        task.set_stage(4)
        task.set_status(D3RTask.START_STATUS)
        task.set_error('error')
        task.set_file_transfer('yah')

        self.assertEqual(task.get_name(), 'foo')
        self.assertEqual(task.get_path(), 'blah')
        self.assertEqual(task.get_stage(), 4)
        self.assertEqual(task.get_status(), D3RTask.START_STATUS)
        self.assertEqual(task.get_error(), 'error')
        self.assertEqual(task.get_file_transfer(), 'yah')

        params.ftpconfig = '/somefile'
        task = D3RTask('/path', params)
        self.assertEqual(task.get_file_transfer(), None)
Ejemplo n.º 3
0
 def test_get_program_version(self):
     params = D3RParameters()
     task = D3RTask(None, params)
     self.assertEqual(task.get_program_version(), '')
     params.version = '0.1.1'
     task = D3RTask(None, params)
     self.assertEqual(task.get_program_version(), '0.1.1')
Ejemplo n.º 4
0
 def test_get_program_name(self):
     params = D3RParameters()
     task = D3RTask(None, params)
     self.assertTrue(task._get_program_name().find('task.py') > 0,
                     task._get_program_name())
     params.program = 'proggy'
     params.version = 'versy'
     task = D3RTask(None, params)
     self.assertEqual(task._get_program_name(), 'proggy versy')
Ejemplo n.º 5
0
 def test_get_mail_truncated_string_truncated(self):
     params = D3RParameters()
     task = D3RTask('/foo', params)
     val = '123456789 abcdefghijklmnop'
     res = task._get_email_truncated_string(val, 15)
     self.assertEqual(res, D3RTask.TEXT_TRUNCATED_STR +
                      'bcdefghijklmnop')
Ejemplo n.º 6
0
    def test_get_dir(self):
        params = D3RParameters()
        task = D3RTask(None, params)
        try:
            task.get_dir()
            self.fail('Expected UnsetPathError')
        except UnsetPathError:
            pass

        task.set_path('/blah')

        try:
            task.get_dir()
            self.fail('Expected UnsetStageError')
        except UnsetStageError:
            pass

        task.set_stage(1)
        try:
            task.get_dir()
            self.fail('Expected UnsetNameError')
        except UnsetNameError:
            pass

        task.set_name('foo')

        self.assertEqual(task.get_dir(), '/blah/stage.1.foo')
Ejemplo n.º 7
0
    def test_send_external_submission_email_sendmail_exception(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.program = 'foo'
            params.version = '1'
            dtask = D3RTask('/foo', params)
            dtask.set_name('12345' + EvaluationTask.EXT_SUBMISSION_SUFFIX)
            task = EvaluationTask(temp_dir, dtask.get_name(), dtask, params)
            plist = [
                Participant('1name', '1d3rusername', '12345', '*****@*****.**')
            ]
            # try single email address
            smtpemailer = SmtpEmailer()
            mockserver = D3RParameters()
            mockserver.sendmail = Mock(side_effect=IOError('ha'))
            mockserver.quit = Mock()
            smtpemailer.set_alternate_smtp_server(mockserver)
            emailer = EvaluationEmailer(ParticipantDatabase(plist), None)
            emailer.set_alternate_smtp_emailer(smtpemailer)
            emailer.send_evaluation_email(task)
            mockserver.quit.assert_any_call()
            self.assertEqual(
                emailer.get_message_log(),
                '\nCaught exception trying to email '
                'participant : Caught exception ha\n')

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 8
0
    def test_send_external_submission_email_success(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.program = 'foo'
            params.version = '1'
            dtask = D3RTask('/foo', params)
            dtask.set_name('12345' + EvaluationTask.EXT_SUBMISSION_SUFFIX)
            task = EvaluationTask(temp_dir, dtask.get_name(), dtask, params)
            task.create_dir()
            f = open(task.get_rmsd_txt(), 'w')
            f.write('hi\n')
            f.flush()
            f.close()
            plist = [
                Participant('1name', '1d3rusername', '12345', '*****@*****.**')
            ]
            # try single email address
            smtpemailer = SmtpEmailer()
            mockserver = D3RParameters()
            mockserver.sendmail = Mock()
            mockserver.quit = Mock()
            smtpemailer.set_alternate_smtp_server(mockserver)
            emailer = EvaluationEmailer(ParticipantDatabase(plist), None)

            emailer.set_alternate_smtp_emailer(smtpemailer)
            emailer.send_evaluation_email(task)
            mockserver.quit.assert_any_call()
            self.assertEqual(emailer.get_message_log(),
                             '\nSent evaluation email to: [email protected]\n')
            self.assertEqual(mockserver.sendmail.call_count, 1)

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 9
0
    def test_end(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            task = D3RTask(temp_dir, params)
            task.set_stage(1)
            task.set_name('foo')
            task.start()
            task.end()
            self.assertEqual(
                os.path.isfile(
                    os.path.join(task.get_dir(), D3RTask.COMPLETE_FILE)), True)
            self.assertEqual(task.get_error(), None)
            self.assertEqual(task.get_status(), D3RTask.COMPLETE_STATUS)
            task.set_error('some error')
            task.end()
            self.assertEqual(task.get_error(), 'some error')
            self.assertEqual(task.get_status(), D3RTask.ERROR_STATUS)

            err_file = os.path.join(task.get_dir(), D3RTask.ERROR_FILE)

            self.assertEqual(os.path.isfile(err_file), True)
            f = open(err_file, 'r')
            err_msg = f.readline()
            self.assertEqual(err_msg, 'some error\n')
            task.set_status(D3RTask.ERROR_STATUS)
            os.remove(err_file)
            task.set_error(None)
            task.end()
            self.assertEqual(task.get_status(), D3RTask.ERROR_STATUS)
            self.assertEqual(os.path.isfile(err_file), True)
            self.assertEqual(os.path.getsize(err_file), 0)

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 10
0
    def test_get_external_submitter_email_valid(self):

        params = D3RParameters()
        dtask = D3RTask('/foo', params)
        dtask.set_name('12345' + EvaluationTask.EXT_SUBMISSION_SUFFIX)
        task = EvaluationTask('/foo', dtask.get_name(), dtask, params)
        plist = [Participant('1name', '1d3rusername', '12345', '*****@*****.**')]
        # try single email address
        emailer = EvaluationEmailer(ParticipantDatabase(plist), None)
        emails = emailer._get_external_submitter_email(task)
        self.assertEqual(emails[0], '*****@*****.**')
        self.assertEqual(len(emails), 1)
        self.assertEqual(emailer.get_message_log(), None)

        # try multiple email address
        plist = [
            Participant('1name', '1d3rusername', '12345',
                        '[email protected],[email protected]')
        ]
        # try single email address
        emailer = EvaluationEmailer(ParticipantDatabase(plist), None)
        emails = emailer._get_external_submitter_email(task)
        self.assertEqual(emails[0], '*****@*****.**')
        self.assertEqual(emails[1], '*****@*****.**')
        self.assertEqual(len(emails), 2)
        self.assertEqual(emailer.get_message_log(), None)
Ejemplo n.º 11
0
    def test_run_external_command_withtimeout_cmd_succeeds(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            task = D3RTask(None, params)
            task.set_name('foo')
            task.set_stage(1)
            task.set_path(temp_dir)
            task.create_dir()
            task.set_path(temp_dir)
            self.assertEquals(
                0, task.run_external_command('hi',
                                             'echo hi',
                                             False,
                                             timeout=30))
            self.assertEquals(task.get_error(), None)
            self.assertEquals(task.get_status(), D3RTask.UNKNOWN_STATUS)
            self.assertEquals(
                os.path.exists(os.path.join(task.get_dir(), 'hi.stdout')),
                True)
            self.assertEquals(
                os.path.exists(os.path.join(task.get_dir(), 'hi.stderr')),
                True)

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 12
0
 def test_generate_external_submission_email_body(self):
     temp_dir = tempfile.mkdtemp()
     try:
         params = D3RParameters()
         dtask = D3RTask('/foo', params)
         dtask.set_name('foo')
         task = EvaluationTask(temp_dir, dtask.get_name(), dtask, params)
         task.create_dir()
         emailer = EvaluationEmailer(None, None)
         task.set_evaluation_emailer(emailer)
         rmsd = task.get_rmsd_txt()
         f = open(rmsd, 'w')
         f.write('  LMCSS  XXX\n1fcz  0.2  0.4\n')
         f.flush()
         f.close()
         subject, body = emailer\
             ._generate_external_submission_email_body(task)
         self.assertEqual(subject,
                          '[d3rcelpp] Week 0 evaluation results for foo')
         self.assertEqual(
             body, 'Dear CELPP Participant,\n\nHere are your '
             'docking evaluation results '
             '(RMSD, Angstroms) '
             'for CELPP week '
             '0\n\n\nEvaluation of docking'
             '\n=====================\n  LMCSS  XXX\n'
             '1fcz  0.2  0.4\n\n\n\nSincerely,\n\n'
             'CELPP Automation')
     finally:
         shutil.rmtree(temp_dir)
Ejemplo n.º 13
0
    def test_run_succeeds_no_emailer(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.evaluation = 'true'
            params.pdbdb = '/data/pdb'
            docktask = D3RTask(temp_dir, params)
            docktask.set_name('foo')
            docktask.set_stage(EvaluationTaskFactory.DOCKSTAGE)
            docktask.create_dir()
            open(os.path.join(docktask.get_dir(), D3RTask.COMPLETE_FILE),
                 'a').close()
            evaluation = EvaluationTask(temp_dir, 'foo.evaluation', docktask,
                                        params)
            evaluation.run()
            self.assertEqual(evaluation.get_error(), None)
            # test files get created
            errfile = os.path.join(evaluation.get_dir(), D3RTask.ERROR_FILE)
            self.assertEqual(os.path.isfile(errfile), False)

            compfile = os.path.join(evaluation.get_dir(),
                                    D3RTask.COMPLETE_FILE)
            self.assertEqual(os.path.isfile(compfile), True)
            stderr = os.path.join(evaluation.get_dir(), 'true.stderr')
            self.assertEqual(os.path.isfile(stderr), True)
            stdout = os.path.join(evaluation.get_dir(), 'true.stdout')
            self.assertEqual(os.path.isfile(stdout), True)
        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 14
0
    def test_run_fails_cause_evaluation_is_not_found(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.evaluation = '/bin/doesnotexist'
            params.pdbdb = '/data/pdb'
            docktask = D3RTask(temp_dir, params)
            docktask.set_name('foo')
            docktask.set_stage(EvaluationTaskFactory.DOCKSTAGE)
            docktask.create_dir()
            open(os.path.join(docktask.get_dir(), D3RTask.COMPLETE_FILE),
                 'a').close()
            evaluation = EvaluationTask(temp_dir, 'foo.evaluation', docktask,
                                        params)
            evaluation.run()
            self.assertEqual(
                evaluation.get_error(), 'Caught Exception trying to run ' +
                '/bin/doesnotexist --pdbdb /data/pdb ' + '--dockdir ' +
                docktask.get_dir() + ' --outdir ' + evaluation.get_dir() +
                ' : [Errno 2] No such file or directory')

            # test files get created
            errfile = os.path.join(evaluation.get_dir(), D3RTask.ERROR_FILE)
            self.assertEqual(os.path.isfile(errfile), True)
        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 15
0
    def test_run_fails_cause_evaluation_fails(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.evaluation = 'false'
            params.pdbdb = '/data/pdb'
            docktask = D3RTask(temp_dir, params)
            docktask.set_name('foo')
            docktask.set_stage(EvaluationTaskFactory.DOCKSTAGE)
            docktask.create_dir()
            open(os.path.join(docktask.get_dir(), D3RTask.COMPLETE_FILE),
                 'a').close()
            evaluation = EvaluationTask(temp_dir, 'foo.evaluation', docktask,
                                        params)
            evaluation.run()
            self.assertEqual(
                evaluation.get_error(),
                'Non zero exit code: 1 received. Standard out: ' +
                ' Standard error: ')
            # test file gets created
            errfile = os.path.join(evaluation.get_dir(), D3RTask.ERROR_FILE)
            self.assertEqual(os.path.isfile(errfile), True)

            stderr = os.path.join(evaluation.get_dir(), 'false.stderr')
            self.assertEqual(os.path.isfile(stderr), True)
            stdout = os.path.join(evaluation.get_dir(), 'false.stdout')
            self.assertEqual(os.path.isfile(stdout), True)
        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 16
0
 def test_send_email_where_email_is_none(self):
     params = D3RParameters()
     params.email = None
     task = D3RTask('/foo', params)
     task.set_stage(1)
     task.set_name('foo')
     task._send_end_email()
Ejemplo n.º 17
0
    def test_start_with_version(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.version = '1.6.0'
            task = D3RTask(temp_dir, params)
            task.set_stage(1)
            task.set_name('foo')
            task.start()
            sfile = os.path.join(task.get_dir(), D3RTask.START_FILE)

            self.assertEqual(os.path.isfile(sfile), True)
            f = open(sfile, 'r')
            self.assertEqual(f.read(), '1.6.0')
            self.assertEqual(task.get_error(), None)
            self.assertEqual(task.get_status(), D3RTask.START_STATUS)
            task.start()
            self.assertNotEqual(task.get_error(), None)
            self.assertEqual(task.get_status(), D3RTask.ERROR_STATUS)
            self.assertEqual(
                os.path.isfile(os.path.join(task.get_dir(),
                                            D3RTask.ERROR_FILE)), True)

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 18
0
    def test_run_external_command_cmd_raises_exception(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            task = D3RTask(None, params)
            task.set_name('foo')
            task.set_stage(1)
            task.set_path(temp_dir)
            task.create_dir()
            task.set_path(temp_dir)
            self.assertEquals(
                1, task.run_external_command('hi', 'asdfasdf', None))
            self.assertEquals(
                task.get_error(), 'Caught Exception trying ' +
                'to run asdfasdf : [Errno 2] No such file ' + 'or directory')

            self.assertEquals(
                os.path.exists(os.path.join(task.get_dir(), 'hi.stdout')),
                False)
            self.assertEquals(
                os.path.exists(os.path.join(task.get_dir(), 'hi.stderr')),
                False)

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 19
0
    def test_write_to_file(self):
        tempDir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            task = D3RTask(None, params)
            try:
                task.write_to_file('hello', None)
                self.fail('Expected UnsetFileNameError')
            except UnsetFileNameError:
                pass
            try:
                task.write_to_file('hello', 'foo')
                self.fail('Expected UnsetPathError')
            except UnsetPathError:
                pass
            task.set_name('foo')
            task.set_stage(1)
            task.set_path(tempDir)

            try:
                task.write_to_file('hello', 'foo')
                self.fail('Expected IOError')
            except IOError:
                pass
            task.create_dir()
            task.write_to_file('hello', 'foo')
            self.assertEqual(
                os.path.isfile(os.path.join(task.get_dir(), 'foo')), True)
        finally:
            shutil.rmtree(tempDir)
Ejemplo n.º 20
0
    def test_update_status_from_filesystem(self):
        params = D3RParameters()
        task = D3RTask(None, params)

        try:
            task.update_status_from_filesystem()
            self.fail("Expected UnsetPathError")
        except UnsetPathError:
            pass

        tempDir = tempfile.mkdtemp()
        try:
            task.set_path(tempDir)

            # Test unset stage
            try:
                task.update_status_from_filesystem()
                self.fail("Expected UnsetStageError")
            except UnsetStageError:
                pass
        finally:
            shutil.rmtree(tempDir)

        task.set_stage(1)
        task.set_name('foo')

        try_update_status_from_filesystem(self, task)
Ejemplo n.º 21
0
 def test_is_external_submission(self):
     params = D3RParameters()
     dtask = D3RTask('/ha', params)
     task = EvaluationTask('/ha', 'foo', dtask, params)
     dtask.set_name('blah')
     self.assertEqual(task.is_external_submission(), False)
     dtask.set_name('blah' + EvaluationTask.EXT_SUBMISSION_SUFFIX)
     self.assertEqual(task.is_external_submission(), True)
Ejemplo n.º 22
0
    def test_get_mail_truncated_string_maxchars_none_or_negative(self):
        params = D3RParameters()
        task = D3RTask('/foo', params)
        self.assertEqual(task._get_email_truncated_string('foo',
                                                          None), 'foo')

        self.assertEqual(task._get_email_truncated_string('foo',
                                                          -1), 'foo')
Ejemplo n.º 23
0
 def test_run_external_command_name_cmd_to_run_None(self):
     params = D3RParameters()
     task = D3RTask(None, params)
     try:
         task.run_external_command('hello', None, None)
         self.fail('expected UnsetCommandError')
     except UnsetCommandError:
         pass
Ejemplo n.º 24
0
 def test_run_external_command_name_None(self):
     params = D3RParameters()
     task = D3RTask(None, params)
     try:
         task.run_external_command(None, 'true', None)
         self.fail('expected UnsetNameError')
     except UnsetNameError:
         pass
Ejemplo n.º 25
0
    def get_evaluation_tasks(self):
        """Generate EvaluationTasks

           This method examines the path directory
           set via the constructor or set_path() method
           for all stage 4 tasks excluding tasks
           that end with 'webdata'  A EvaluationTask
           object is created for each of these tasks
           and returned in a list.
           :return: list of EvaluationTask objects or empty list if none found
        """
        path = self.get_path()
        logger.debug('Examining ' + path + ' for docking tasks')
        if not os.path.isdir(path):
            raise PathNotDirectoryError(path + ' is not a directory')
        scoring_tasks = []

        path_list = os.listdir(path)

        participant_db = self._get_participant_database()
        efac = SmtpEmailerFactory(self.get_args())
        emailer = EvaluationEmailer(participant_db, efac.get_smtp_emailer())

        for entry in path_list:
            logger.debug('Checking if ' + entry + ' is a docking task')
            full_path = os.path.join(path, entry)
            if os.path.isdir(full_path):
                if entry.startswith(EvaluationTaskFactory.DOCKSTAGE_PREFIX):
                    if entry.endswith(EvaluationTaskFactory.WEB_DATA_SUFFIX):
                        logger.debug('Skipping ' + entry + ' due to suffix')
                        continue

                    # we have a valid docking path
                    docktask = D3RTask(path, self.get_args())
                    docktask.set_stage(EvaluationTaskFactory.DOCKSTAGE)
                    docktask.set_name(
                        entry[len(EvaluationTaskFactory.DOCKSTAGE_PREFIX):])
                    stask = EvaluationTask(
                        path,
                        docktask.get_name() + '.' +
                        EvaluationTaskFactory.SCORING_SUFFIX, docktask,
                        self.get_args())
                    if stask.can_run():
                        logger.debug('Adding task ' + stask.get_name())
                        stask.set_evaluation_emailer(emailer)
                        scoring_tasks.append(stask)
                    else:
                        if stask.get_error() is None:
                            logger.debug(stask.get_name() + ' cannot be' +
                                         ' added, no error though')
                        else:
                            logger.debug(stask.get_name() + ' cannot be' +
                                         ' added : ' + stask.get_error())

        return self._sort_tasks_by_participant_priority(
            scoring_tasks, participant_db)
Ejemplo n.º 26
0
    def test_evaluationtask_constructor(self):
        params = D3RParameters()
        # no dock task found so it cannot run
        docktask = D3RTask('/blah', params)
        docktask.set_name('foo')
        docktask.set_stage(EvaluationTaskFactory.DOCKSTAGE)

        evaluation = EvaluationTask('/blah', 'foo.evaluation', docktask,
                                    params)
        self.assertEquals(evaluation.get_name(), 'foo.evaluation')
        self.assertEquals(evaluation.get_stage(), 7)
Ejemplo n.º 27
0
    def test_get_external_submitter_email_no_participant_email(self):

        params = D3RParameters()
        dtask = D3RTask('/foo', params)
        dtask.set_name('444' + EvaluationTask.EXT_SUBMISSION_SUFFIX)
        task = EvaluationTask('/foo', dtask.get_name(), dtask, params)
        plist = [Participant('1name', '1d3rusername', '444', None)]
        emailer = EvaluationEmailer(ParticipantDatabase(plist), None)
        self.assertEqual(emailer._get_external_submitter_email(task), None)
        self.assertEqual(emailer.get_message_log(),
                         '\nEmail not set for participant\n')
Ejemplo n.º 28
0
 def test_send_evaluation_email_no_database(self):
     params = D3RParameters()
     dtask = D3RTask('/foo', params)
     dtask.set_name('444' + EvaluationTask.EXT_SUBMISSION_SUFFIX)
     task = EvaluationTask('/foo', dtask.get_name(), dtask, params)
     emailer = EvaluationEmailer(None, None)
     emailer.send_evaluation_email(task)
     self.assertEqual(
         emailer.get_message_log(),
         '\nParticipant database is None cannot send docking '
         'evaluation email!!!\n')
Ejemplo n.º 29
0
    def test_send_end_email_throws_exception(self):
        temp_dir = tempfile.mkdtemp()
        try:
            params = D3RParameters()
            params.smtp = 'doesnotexistxxx.x.x'
            params.smtpport = 12345
            params.email = '*****@*****.**'
            task = D3RTask(temp_dir, params)
            task.set_stage(1)
            task.set_name('foo')
            task._send_end_email()

        finally:
            shutil.rmtree(temp_dir)
Ejemplo n.º 30
0
    def test_get_uploadable_files(self):
        task = D3RTask(None, D3RParameters())
        self.assertEqual(task.get_uploadable_files(), [])
        temp_dir = tempfile.mkdtemp()
        try:
            task = D3RTask(temp_dir, D3RParameters())
            task.set_stage(1)
            task.set_name('foo')
            task.create_dir()
            self.assertEqual(task.get_uploadable_files(), [])

            # add error file
            err_file = os.path.join(task.get_dir(), D3RTask.ERROR_FILE)
            open(err_file, 'a').close()
            flist = task.get_uploadable_files()
            self.assertEqual(len(flist), 1)
            self.assertEqual(flist[0], err_file)

            # add stderr file
            foostderr = os.path.join(task.get_dir(), 'foo.stderr')
            open(foostderr, 'a').close()
            flist = task.get_uploadable_files()
            flist.index(err_file)
            flist.index(foostderr)
            self.assertEqual(len(flist), 2)

            # add stdout file
            foostdout = os.path.join(task.get_dir(), 'foo.stdout')
            open(foostdout, 'a').close()
            flist = task.get_uploadable_files()
            self.assertEqual(len(flist), 3)
            flist.index(err_file)
            flist.index(foostderr)
            flist.index(foostdout)
        finally:
            shutil.rmtree(temp_dir)