def test_is_tarmember_safe(self): params = D3RParameters() task = ExternalDataSubmissionTask('/foo', 'name', '/remote/celpp_week12_2016_' 'dockedresults_name.tar.gz', params) # path starts with / val = task._is_tarmembername_safe('/celpp_week12', 'celpp_week12') self.assertFalse(val) self.assertEqual(task.get_email_log(), 'Skipping, path starts with ' '/ : /celpp_week12\n') task.set_email_log('') # path does not start with chall_name val = task._is_tarmembername_safe('celpp', 'celpp_week12') self.assertFalse(val) self.assertEqual(task.get_email_log(), 'Skipping, path does not' ' conform: celpp\n') task.set_email_log('') # path has .. in it val = task._is_tarmembername_safe('celpp/../yo', 'celpp') self.assertFalse(val) self.assertEqual(task.get_email_log(), 'Skipping, found .. in path:' ' celpp/../yo\n') task.set_email_log('') chall_name = 'celpp_week12_2016_dockedresults_name' # valid path val = task._is_tarmembername_safe(chall_name + '/5xjv/yo.pdb', chall_name) self.assertTrue(val) self.assertEqual(task.get_email_log(), '')
def test_untar_challenge_data_package_dotdot_tarfile(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = ExternalDataSubmissionTask(temp_dir, 'hello', 'hi', params) task.create_dir() self.create_bad_tarfile_dotdot_path(task.get_dir(), 'hello') c = task._untar_challenge_data_package('hello.tar.gz') self.assertEqual(c, 'hello') self.assertTrue('Skipping, found .. in ' 'path: hello/5juw/apo-' '5juw_2eb2_..docked.mol\n' in task.get_email_log()) self.assertTrue('Ignoring non dir/file ' 'entry in tar 5juw/' 'hello\n' in task.get_email_log()) candidate = os.path.join(task.get_dir(), 'hello', '5juw') self.assertTrue(os.path.isdir(candidate)) mypdb = os.path.join(candidate, 'apo-5juw_2eb2_docked.pdb') mymol = os.path.join(candidate, 'apo-5juw_2eb2.._docked.mol') self.assertTrue(os.path.isfile(mypdb)) self.assertFalse(os.path.isfile(mymol)) finally: shutil.rmtree(temp_dir)
def test_run_fail(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() pkg = '/remote/celpp1_2017_dockedresults_yo.tar.gz' task = ExternalDataSubmissionTask(temp_dir, 'yo', pkg, params) mockft = D3RParameters() mockft.connect = Mock(side_effect=IOError('error')) mockft.download_file = Mock(return_value=True) mockft.disconnect = Mock(return_value=None) task.set_file_transfer(mockft) task.run() self.assertEqual( task.get_error(), 'Caught exception Unable to ' 'download celpp1_2017_docked' 'results_yo.tar.gz') self.assertEqual( task.get_email_log(), 'Try # 1 of 3 to download ' 'celpp1_2017_dockedresults' '_yo.tar.gz\nTry # 2 of 3 ' 'to download celpp1_2017_d' 'ockedresults_yo.tar.gz\n' 'Try # 3 of 3 to download ' 'celpp1_2017_dockedresults' '_yo.tar.gz\n') finally: shutil.rmtree(temp_dir)
def test_run_unable_to_run_cause_can_run_is_false(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() pkg = '/remote/celpp2_3.tar.gz' task = ExternalDataSubmissionTask(temp_dir, 'yo', pkg, params) task.create_dir() task.run() self.assertEqual(task.get_email_log(), None) self.assertEqual(task.get_error(), 'stage.6.yo.extsubmission ' 'already exists and status ' 'is unknown') finally: shutil.rmtree(temp_dir)
def test_untar_challenge_data_package_good_tarfile(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() task = ExternalDataSubmissionTask(temp_dir, 'hello', 'hi', params) task.create_dir() self.create_good_tarfile(task.get_dir(), 'hello') c = task._untar_challenge_data_package('hello.tar.gz') self.assertEqual(c, 'hello') self.assertEqual(task.get_email_log(), None) candidate = os.path.join(task.get_dir(), 'hello', '5juw') self.assertTrue(os.path.isdir(candidate)) mypdb = os.path.join(candidate, 'apo-5juw_2eb2_docked.pdb') mymol = os.path.join(candidate, 'apo-5juw_2eb2_docked.mol') self.assertTrue(os.path.isfile(mypdb)) self.assertTrue(os.path.isfile(mymol)) finally: shutil.rmtree(temp_dir)
def test_runtask_success(self): temp_dir = tempfile.mkdtemp() try: params = D3RParameters() pkg = '/remote/celpp1_2017_dockedresults_yo.tar.gz' task = ExternalDataSubmissionTask(temp_dir, 'yo', pkg, params) mockft = D3RParameters() mockft.connect = Mock(return_value=None) mockft.download_file = Mock(return_value=True) mockft.disconnect = Mock(return_value=None) task.set_file_transfer(mockft) task.create_dir() self.create_good_tarfile(task.get_dir(), 'celpp1_2017_dockedresults_yo') task._runtask() self.assertEqual(task.get_error(), None) self.assertEqual(task.get_email_log(), '') finally: shutil.rmtree(temp_dir)