def test_parse_common_joblist_output(self): """ Test whether _parse_joblist can parse the bjobs output """ # pylint: disable=too-many-locals,too-many-statements import datetime scheduler = LsfScheduler() # Disable logging to avoid excessive output during test logging.disable(logging.ERROR) retval = 255 stdout = BJOBS_STDOUT_TO_TEST stderr = BJOBS_STDERR_TO_TEST with self.assertRaises(SchedulerError): job_list = scheduler._parse_joblist_output(retval, stdout, stderr) retval = 0 stdout = BJOBS_STDOUT_TO_TEST stderr = '' job_list = scheduler._parse_joblist_output(retval, stdout, stderr) # The parameters are hard coded in the text to parse job_on_cluster = 7 job_parsed = len(job_list) self.assertEqual(job_parsed, job_on_cluster) job_queued = 2 job_queue_name = ['8nm', 'test'] job_queued_parsed = len([ j for j in job_list if j.job_state and j.job_state == JobState.QUEUED ]) job_queue_name_parsed = [ j.queue_name for j in job_list if j.job_state and j.job_state == JobState.QUEUED ] self.assertEqual(job_queued, job_queued_parsed) self.assertEqual(job_queue_name, job_queue_name_parsed) job_done = 2 job_done_title = ['aiida-1033269', 'test'] job_done_annotation = [ 'TERM_RUNLIMIT: job killed after reaching LSF run time limit', '-' ] job_done_parsed = len([ j for j in job_list if j.job_state and j.job_state == JobState.DONE ]) job_done_title_parsed = [ j.title for j in job_list if j.job_state and j.job_state == JobState.DONE ] job_done_annotation_parsed = [ j.annotation for j in job_list if j.job_state and j.job_state == JobState.DONE ] self.assertEqual(job_done, job_done_parsed) self.assertEqual(job_done_title, job_done_title_parsed) self.assertEqual(job_done_annotation, job_done_annotation_parsed) job_running = 3 job_running_parsed = len([ j for j in job_list if j.job_state and j.job_state == JobState.RUNNING ]) self.assertEqual(job_running, job_running_parsed) running_users = ['inewton', 'inewton', 'dbowie'] parsed_running_users = [ j.job_owner for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] self.assertEqual(running_users, parsed_running_users) running_jobs = ['764254593', '764255172', '764245175'] num_machines = [1, 1, 1] allocated_machines = ['lxbsu2710', 'b68ac74822', 'b68ac74822'] parsed_running_jobs = [ j.job_id for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] parsed_num_machines = [ j.num_machines for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] parsed_allocated_machines = [ j.allocated_machines_raw for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] self.assertEqual(running_jobs, parsed_running_jobs) self.assertEqual(num_machines, parsed_num_machines) self.assertEqual(allocated_machines, parsed_allocated_machines) self.assertEqual([ j.requested_wallclock_time_seconds for j in job_list if j.job_id == '764254593' ][0], 60) # pylint: disable=invalid-name self.assertEqual([ j.wallclock_time_seconds for j in job_list if j.job_id == '764255172' ][0], 9) self.assertEqual([ j.wallclock_time_seconds for j in job_list if j.job_id == '764245175' ][0], 4785) current_year = datetime.datetime.now().year self.assertEqual([ j.submission_time for j in job_list if j.job_id == '764245175' ][0], datetime.datetime(current_year, 12, 31, 23, 40)) # Important to enable again logs! logging.disable(logging.NOTSET)
def test_parse_common_joblist_output(): """ Tests to verify if the function _parse_joblist_output can parse the bjobs output. The tests is done parsing a string defined above, to be used offline """ # pylint: disable=too-many-locals,too-many-statements import datetime scheduler = LsfScheduler() # Disable logging to avoid excessive output during test logging.disable(logging.ERROR) retval = 255 stdout = BJOBS_STDOUT_TO_TEST stderr = BJOBS_STDERR_TO_TEST with pytest.raises(SchedulerError): job_list = scheduler._parse_joblist_output(retval, stdout, stderr) retval = 0 stdout = BJOBS_STDOUT_TO_TEST stderr = '' job_list = scheduler._parse_joblist_output(retval, stdout, stderr) # The parameters are hard coded in the text to parse job_on_cluster = 7 job_parsed = len(job_list) assert job_parsed == job_on_cluster job_queued = 2 job_queue_name = ['8nm', 'test'] job_queued_parsed = len([ j for j in job_list if j.job_state and j.job_state == JobState.QUEUED ]) job_queue_name_parsed = [ j.queue_name for j in job_list if j.job_state and j.job_state == JobState.QUEUED ] assert job_queued == job_queued_parsed assert job_queue_name == job_queue_name_parsed job_done = 2 job_done_title = ['aiida-1033269', 'test'] job_done_annotation = [ 'TERM_RUNLIMIT: job killed after reaching LSF run time limit', '-' ] job_done_parsed = len( [j for j in job_list if j.job_state and j.job_state == JobState.DONE]) job_done_title_parsed = [ j.title for j in job_list if j.job_state and j.job_state == JobState.DONE ] job_done_annotation_parsed = [ j.annotation for j in job_list if j.job_state and j.job_state == JobState.DONE ] assert job_done == job_done_parsed assert job_done_title == job_done_title_parsed assert job_done_annotation == job_done_annotation_parsed job_running = 3 job_running_parsed = len([ j for j in job_list if j.job_state and j.job_state == JobState.RUNNING ]) assert job_running == job_running_parsed running_users = ['inewton', 'inewton', 'dbowie'] parsed_running_users = [ j.job_owner for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] assert running_users == parsed_running_users running_jobs = ['764254593', '764255172', '764245175'] num_machines = [1, 1, 1] allocated_machines = ['lxbsu2710', 'b68ac74822', 'b68ac74822'] parsed_running_jobs = [ j.job_id for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] parsed_num_machines = [ j.num_machines for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] parsed_allocated_machines = [ j.allocated_machines_raw for j in job_list if j.job_state and j.job_state == JobState.RUNNING ] assert running_jobs == parsed_running_jobs assert num_machines == parsed_num_machines assert allocated_machines == parsed_allocated_machines assert [ j.requested_wallclock_time_seconds for j in job_list if j.job_id == '764254593' ][0] == 60 # pylint: disable=invalid-name assert [ j.wallclock_time_seconds for j in job_list if j.job_id == '764255172' ][0] == 9 assert [ j.wallclock_time_seconds for j in job_list if j.job_id == '764245175' ][0] == 4785 current_year = datetime.datetime.now().year assert [j.submission_time for j in job_list if j.job_id == '764245175' ][0] == datetime.datetime(current_year, 12, 31, 23, 40) # Important to enable again logs! logging.disable(logging.NOTSET)