def test_run_fails_cause_genchallenge_is_not_found(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() params.genchallenge = '/bin/doesnotexist' params.pdbdb = '/foo' params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) chall.run() self.assertEqual(chall.get_error(), 'Caught Exception trying to run ' + '/bin/doesnotexist --candidatedir ' + blastnfilter.get_dir() + ' --pdbdb ' + '/foo --outdir ' + chall.get_dir() + '/' + chall.get_celpp_challenge_data_dir_name() + ' : [Errno 2] No such file or directory') # test files get created errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), True) finally: shutil.rmtree(temp_dir)
def test_run_fails_cause_genchallenge_fails(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() params.genchallenge = 'false' params.pdbdb = '/foo' params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) chall.run() self.assertEqual(chall.get_error(), 'Non zero exit code: 1 received. Standard out: ' + ' Standard error: ') # test file gets created errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), True) stderr = os.path.join(chall.get_dir(), 'false.stderr') self.assertEqual(os.path.isfile(stderr), True) stdout = os.path.join(chall.get_dir(), 'false.stdout') self.assertEqual(os.path.isfile(stdout), True) finally: shutil.rmtree(temp_dir)
def test_run_success_with_ftp_upload(self): temp_dir = tempfile.mkdtemp() try: script = self.create_gen_challenge_script(temp_dir) params = D3RParameters() params.genchallenge = script params.pdbdb = '/foo' params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) mockftp = D3RParameters() mockftp.put = Mock(side_effect=[3, 5]) ftp = FtpFileTransfer(None) ftp.set_remote_challenge_dir('/challenge') ftp.set_connection(mockftp) chall.set_file_transfer(ftp) dimport = DataImportTask(temp_dir, params) dimport.create_dir() ctsv = dimport.get_crystalph_tsv() f = open(ctsv, 'w') f.write('crystal') f.flush() f.close() nonpoly = dimport.get_nonpolymer_tsv() f = open(nonpoly, 'w') f.write('nonpoly') f.flush() f.close() seq = dimport.get_sequence_tsv() f = open(seq, 'w') f.write('seq') f.flush() f.close() chall.run() self.assertEqual(chall.get_error(), None) # verify test files get created errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), False) compfile = os.path.join(chall.get_dir(), D3RTask.COMPLETE_FILE) self.assertEqual(os.path.isfile(compfile), True) ftp.disconnect() finally: shutil.rmtree(temp_dir)
def test_run_fails_cause_can_run_is_false(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() params.version = '1' # return immediately cause can_run is false chall = ChallengeDataTask(temp_dir, params) chall.run() self.assertEqual(chall.get_error(), 'blastnfilter task has notfound status') finally: shutil.rmtree(temp_dir)
def test_can_run(self): temp_dir = tempfile.mkdtemp() try: # no blast task found so it cannot run params = D3RParameters() task = ChallengeDataTask(temp_dir, params) self.assertEqual(task.can_run(), False) self.assertEqual(task.get_error(), 'blastnfilter task has notfound status') # blastn filter running blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.START_FILE), 'a').close() task = ChallengeDataTask(temp_dir, params) self.assertEqual(task.can_run(), False) self.assertEqual(task.get_error(), 'blastnfilter task has start status') # blastnfilter failed error_file = os.path.join(blastnfilter.get_dir(), D3RTask.ERROR_FILE) open(error_file, 'a').close() task = ChallengeDataTask(temp_dir, params) self.assertEqual(task.can_run(), False) self.assertEqual(task.get_error(), 'blastnfilter task has error status') # blastnfilter success os.remove(error_file) open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() task = ChallengeDataTask(temp_dir, params) self.assertEqual(task.can_run(), True) self.assertEqual(task.get_error(), None) # proteinligprep task exists already task = ChallengeDataTask(temp_dir, params) task.create_dir() self.assertEqual(task.can_run(), False) self.assertEqual(task.get_error(), task.get_dir_name() + ' already exists and status is unknown') # proteinlibprep already complete task = ChallengeDataTask(temp_dir, params) open(os.path.join(task.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() self.assertEqual(task.can_run(), False) self.assertEqual(task.get_error(), None) finally: shutil.rmtree(temp_dir)
def test_run_fails_cause_genchallenge_not_set(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) chall.run() self.assertEqual(chall.get_error(), 'genchallenge not set') # test files get created self.assertEqual(os.path.isdir(chall.get_dir()), True) errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), True) finally: shutil.rmtree(temp_dir)
def test_run_succeeds_no_ftp(self): temp_dir = tempfile.mkdtemp() try: script = self.create_gen_challenge_script(temp_dir) params = D3RParameters() params.genchallenge = script params.pdbdb = '/foo' params.version = '1' blastnfilter = BlastNFilterTask(temp_dir, params) blastnfilter.create_dir() open(os.path.join(blastnfilter.get_dir(), D3RTask.COMPLETE_FILE), 'a').close() chall = ChallengeDataTask(temp_dir, params) dimport = DataImportTask(temp_dir, params) dimport.create_dir() ctsv = dimport.get_crystalph_tsv() f = open(ctsv, 'w') f.write('crystal') f.flush() f.close() nonpoly = dimport.get_nonpolymer_tsv() f = open(nonpoly, 'w') f.write('nonpoly') f.flush() f.close() seq = dimport.get_sequence_tsv() f = open(seq, 'w') f.write('seq') f.flush() f.close() chall.run() self.assertEqual(chall.get_error(), None) # verify test files get created errfile = os.path.join(chall.get_dir(), D3RTask.ERROR_FILE) self.assertEqual(os.path.isfile(errfile), False) compfile = os.path.join(chall.get_dir(), D3RTask.COMPLETE_FILE) self.assertEqual(os.path.isfile(compfile), True) stderr = os.path.join(chall.get_dir(), 'genchallenge.py.stderr') self.assertEqual(os.path.isfile(stderr), True) stdout = os.path.join(chall.get_dir(), 'genchallenge.py.stdout') self.assertEqual(os.path.isfile(stdout), True) # verify challenge directory is created and # filled with valid files chall_dir = os.path.join(chall.get_dir(), chall.get_celpp_challenge_data_dir_name()) self.assertEqual(os.path.isdir(chall_dir), True) readme = os.path.join(chall_dir, ChallengeDataTask.README_TXT_FILE) self.assertEqual(os.path.isfile(readme), True) crystal = os.path.join(chall_dir, DataImportTask.CRYSTALPH_TSV) self.assertEqual(os.path.isfile(crystal), True) seq = os.path.join(chall_dir, DataImportTask.SEQUENCE_TSV) self.assertEqual(os.path.isfile(seq), True) nonpoly = os.path.join(chall_dir, DataImportTask.NONPOLYMER_TSV) self.assertEqual(os.path.isfile(nonpoly), True) fivehibdir = os.path.join(chall_dir, '5hib') fivehibtxt = os.path.join(fivehibdir, '5hib.txt') self.assertEqual(os.path.isfile(fivehibtxt), True) fivehibfas = os.path.join(fivehibdir, '5hib.fasta') self.assertEqual(os.path.isfile(fivehibfas), True) fivehicdir = os.path.join(chall_dir, '5hic') fivehictxt = os.path.join(fivehicdir, '5hic.txt') self.assertEqual(os.path.isfile(fivehictxt), True) fivehicfas = os.path.join(fivehicdir, '5hic.fasta') self.assertEqual(os.path.isfile(fivehicfas), True) # verify tarball is created tfile = chall.get_celpp_challenge_data_tar_file() self.assertEqual(os.path.isfile(tfile), True) foodir = os.path.join(temp_dir, 'foo') os.mkdir(foodir) tar = tarfile.open(tfile, 'r:*') tar.extractall(path=foodir) tar.close() name = chall.get_celpp_challenge_data_dir_name() cdir = os.path.join(foodir, name) readme = os.path.join(cdir, ChallengeDataTask.README_TXT_FILE) self.assertEqual(os.path.isfile(readme), True) final = os.path.join(foodir, name, 'final.log') self.assertEqual(os.path.isfile(final), False) e_con = os.path.join(foodir, name, 'error_container') self.assertEqual(os.path.isdir(e_con), False) finally: shutil.rmtree(temp_dir)