def setUp(self): env.reset() subprocess.call('sos remove -s', shell=True) #self.resetDir('~/.sos') self.temp_files = [] self.resetDir('temp') Host.reset()
def setUp(self): env.reset() #self.resetDir('~/.sos') self.temp_files = [] Host.reset() # remove .status file left by failed workflows. subprocess.call('sos purge', shell=True)
def testRemoteExecution(self): subprocess.check_output('sos purge', shell=True).decode() script = SoS_Script(''' [10] input: for_each={'i': range(5)} task: run: expand=True echo I am {i} sleep {5+i} ''') wf = script.workflow() res = Base_Executor(wf, config={ 'config_file': '~/docker.yml', # do not wait for jobs 'wait_for_task': False, 'default_queue': 'docker', 'max_running_jobs': 5, 'sig_mode': 'force', }).run() import time # we should be able to get status tasks = ' '.join(res['pending_tasks']) # wait another 15 seconds? time.sleep(15) out = subprocess.check_output('sos status {} -c ~/docker.yml -q docker'.format(tasks), shell=True).decode() self.assertEqual(out.count('completed'), len(res['pending_tasks']), 'Expect all completed jobs: ' + out) Host.reset() # until we run the workflow again #st = time.time() Base_Executor(wf, config={ 'config_file': '~/docker.yml', # do not wait for jobs 'wait_for_task': True, 'default_queue': 'docker', 'resume_mode': True, }).run() # should finish relatively fast? #self.assertLess(time.time() - st, 5) out = subprocess.check_output('sos status {} -c ~/docker.yml'.format(tasks), shell=True).decode() self.assertEqual(out.count('completed'), len(res['pending_tasks']), 'Expect all completed jobs: ' + out)
def testActiveActionOption(self): '''Test the active option of actions''' # disallow self.assertRaises( ParsingError, SoS_Script, ''' [1] rep = range(5) input: for_each = 'rep' # ff should change and be usable inside run ff = f"{_rep}.txt" run: expand=True, active=1,2 echo {ff} touch temp/{ff} ''') # for active, result in [ ('0', ['temp/0.txt']), ('-1', ['temp/4.txt']), ('(1,2)', ['temp/1.txt', 'temp/2.txt']), ('[2,3]', ['temp/2.txt', 'temp/3.txt']), ('(0,2,4)', ['temp/0.txt', 'temp/2.txt', 'temp/4.txt']), ('slice(1,None)', ['temp/1.txt', 'temp/2.txt', 'temp/3.txt', 'temp/4.txt']), ('slice(1,-2)', ['temp/1.txt', 'temp/2.txt']), ('slice(None,None,2)', ['temp/0.txt', 'temp/2.txt', 'temp/4.txt']), ]: if os.path.isdir('temp'): shutil.rmtree('temp') os.mkdir('temp') # test first iteration script = SoS_Script((''' [1] rep = range(5) input: for_each = 'rep' # ff should change and be usable inside run ff = f"{_rep}.txt" run: expand=True, active=%s echo {ff} touch temp/{ff} ''' % active).replace('/', os.sep)) wf = script.workflow() env.config['sig_mode'] = 'force' env.config['wait_for_task'] = True Host.reset() Base_Executor(wf).run() files = list(glob.glob(os.path.join('temp', '*.txt'))) self.assertEqual(sorted(files), sorted([x.replace('/', os.sep) for x in result])) # # test last iteration shutil.rmtree('temp') # # test active option for task os.mkdir('temp') script = SoS_Script((''' [1] rep = range(5) input: for_each = 'rep' # ff should change and be usable inside run ff = f"{_rep}.txt" task: active=%s run: expand=True echo {ff} touch temp/{ff} ''' % active).replace('/', os.sep)) wf = script.workflow() env.config['sig_mode'] = 'force' env.config['wait_for_task'] = True Host.reset() Base_Executor(wf).run() files = list(glob.glob(os.path.join('temp', '*.txt'))) self.assertEqual(sorted(files), sorted([x.replace('/', os.sep) for x in result]), 'With option {}'.format(active)) # # test last iteration shutil.rmtree('temp')