예제 #1
0
 def test_correct_start_date_time(self):
     file_name = 'tests/test/data/correct_start_datetime.pbs'
     event_names = []
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEqual(len(event_names), len(parser.events))
예제 #2
0
 def test_missing_l_resource(self):
     file_name = 'tests/test/data/missing_l_resource.pbs'
     event_names = []
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEqual(len(event_names), len(parser.events))
 def test_size_in_bytes(self):
     file_name = 'data/size_in_bytes.pbs'
     size = 4096
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     job = parser.job
     self.assertEquals(size, job.resource_specs['mem'])
예제 #4
0
 def test_compute(self):
     file_name = 'data/correct.pbs'
     expected_cost = 685.99
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     quote_calc = QuoteCalculator(self._config)
     credits = quote_calc.compute(parser.job)
     self.assertAlmostEqual(expected_cost, credits, delta=0.1)
 def test_mem_specs(self):
     file_name = 'data/mem_specs.pbs'
     event_names = ['invalid_mem_format']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
 def test_pbs_space_directive(self):
     file_name = 'data/pbs_space_directive.pbs'
     event_names = ['space_in_pbs_dir']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), parser.nr_warnings)
 def test_wrong_options(self):
     file_name = 'data/wrong_options.pbs'
     event_names = ['invalid_join', 'invalid_job_name']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), parser.nr_errors)
예제 #8
0
 def test_confused_mail_options(self):
     file_name = 'tests/test/data/confused_mail_options.pbs'
     event_names = ['invalid_mail_address']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEqual(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEqual(len(event_names), parser.nr_warnings)
 def test_misplaced_shebang(self):
     file_name = 'data/misplaced_shebang.pbs'
     event_names = ['missing_shebang', 'misplaced_shebang']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), parser.nr_warnings)
예제 #10
0
 def test_no_dash_options(self):
     file_name = 'tests/test/data/no_dash_option.pbs'
     event_names = ['malformed_pbs_dir']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEqual(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEqual(len(event_names), parser.nr_errors)
예제 #11
0
 def test_invalid_start_date_time(self):
     file_name = 'tests/test/data/invalid_start_datetime.pbs'
     event_names = ['invalid_datetime']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEqual(len(event_names), len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEqual(len(event_names), parser.nr_errors)
예제 #12
0
 def test_correct(self):
     file_name = 'data/correct.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 0
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
예제 #13
0
 def test_correct(self):
     file_name = 'data/correct.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 0
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
예제 #14
0
 def test_dos(self):
     file_name = 'data/dos.pbs'
     nr_syntax_events = 4
     event_names = ['dos_format']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(nr_syntax_events, parser.nr_errors)
예제 #15
0
 def test_nodes_ppn_wrong_spec(self):
     file_name = 'data/nodes_ppn_wrong_spec.pbs'
     nr_syntax_events = 1
     event_names = ['ppn_no_number']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     for event in parser.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(nr_syntax_events, parser.nr_errors)
예제 #16
0
 def test_pmem_violation(self):
     file_name = 'data/pmem_violation.pbs'
     event_names = ['insufficient_nodes_mem']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(len(event_names), len(checker.events))
     for event in checker.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), checker.nr_errors)
예제 #17
0
 def test_mem_pmem(self):
     file_name = 'data/mem_pmem.pbs'
     event_names = ['both_mem_pmem_specs']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(len(event_names), len(checker.events))
     for event in checker.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), checker.nr_warnings)
예제 #18
0
 def test_mem_pmem(self):
     file_name = 'data/mem_pmem.pbs'
     event_names = ['both_mem_pmem_specs']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(len(event_names), len(checker.events))
     for event in checker.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), checker.nr_warnings)
예제 #19
0
 def test_pmem_violation(self):
     file_name = 'data/pmem_violation.pbs'
     event_names = ['insufficient_nodes_mem']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(len(event_names), len(checker.events))
     for event in checker.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEquals(len(event_names), checker.nr_errors)
예제 #20
0
 def test_unknown_feature(self):
     file_name = 'data/unknown_feature.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 1
     event_name = 'unknown_feature'
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
     self.assertEquals(event_name, checker.events[0]['id'])
예제 #21
0
 def test_too_large_ppn(self):
     file_name = 'data/too_large_ppn.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 1
     event_name = 'insufficient_ppn_nodes'
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
     self.assertEquals(event_name, checker.events[0]['id'])
예제 #22
0
 def test_too_large_ppn(self):
     file_name = 'data/too_large_ppn.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 1
     event_name = 'insufficient_ppn_nodes'
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
     self.assertEquals(event_name, checker.events[0]['id'])
예제 #23
0
 def test_unknown_feature(self):
     file_name = 'data/unknown_feature.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 1
     event_name = 'unknown_feature'
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
     self.assertEquals(event_name, checker.events[0]['id'])
예제 #24
0
 def test_too_many_nodes(self):
     file_name = 'data/too_many_nodes.pbs'
     nr_syntax_events = 0
     event_names = ['insufficient_nodes', 'insufficient_ppn_nodes',
                    'insufficient_nodes_mem']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(len(event_names), len(checker.events))
     for event in checker.events:
         self.assertTrue(event['id'] in event_names)
예제 #25
0
 def test_too_many_nodes(self):
     file_name = 'data/too_many_nodes.pbs'
     nr_syntax_events = 0
     event_names = ['insufficient_nodes', 'insufficient_ppn_nodes',
                    'insufficient_nodes_mem']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(len(event_names), len(checker.events))
     for event in checker.events:
         self.assertTrue(event['id'] in event_names)
예제 #26
0
 def test_simple(self):
     file_name = 'tests/test/data/simple.pbs'
     nodes = 2
     ppn = 4
     walltime = 72*3600
     partition = self._config['default_partition']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     job = parser.job
     nodes_specs = job.resource_specs['nodes'][0]
     self.assertEqual(nodes, nodes_specs['nodes'])
     self.assertEqual(ppn, nodes_specs['ppn'])
     self.assertEqual(walltime, job.resource_specs['walltime'])
     self.assertEqual(partition, job.resource_specs['partition'])
예제 #27
0
 def test_working_dir_no_var(self):
     file_name = 'tests/test/data/working_dir_no_var.pbs'
     event_names = ['missspelled']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEqual(0, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     script_checker = ScriptChecker(self._config, self._event_defs)
     script_checker.check(parser.job, parser.script_first_line_nr)
     self.assertEqual(len(event_names), len(script_checker.events))
     for event in script_checker.events:
         self.assertTrue(event['id'] in event_names)
     self.assertEqual(len(event_names), script_checker.nr_warnings)
예제 #28
0
 def test_walltime_no_queue(self):
     file_name = 'data/walltime_no_queue.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 0
     queue_name = 'qdef'
     expected_walltime = 45*3600 + 15*60
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
     job = parser.job
     self.assertEquals(queue_name, job.queue)
     self.assertEquals(expected_walltime, job.resource_spec('walltime'))
예제 #29
0
 def test_walltime_no_queue(self):
     file_name = 'data/walltime_no_queue.pbs'
     nr_syntax_events = 0
     nr_semantic_events = 0
     queue_name = 'qdef'
     expected_walltime = 45*3600 + 15*60
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     self.assertEquals(nr_syntax_events, len(parser.events))
     checker = JobChecker(self._config, self._event_defs)
     checker.check(parser.job)
     self.assertEquals(nr_semantic_events, len(checker.events))
     job = parser.job
     self.assertEquals(queue_name, job.queue)
     self.assertEquals(expected_walltime, job.resource_spec('walltime'))
예제 #30
0
 def test_multiple_resources(self):
     file_name = 'data/multiple_resources.pbs'
     nr_specs = 2
     nr_nodes = [3, 5]
     features = ['mem128', 'mem64']
     nr_features = 1
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     job = parser.job
     node_specs = job.resource_specs['nodes']
     self.assertEquals(nr_specs, len(node_specs))
     for i, node_spec in enumerate(node_specs):
         self.assertEquals(nr_nodes[i], node_spec['nodes'])
         self.assertEquals(nr_features, len(node_spec['features']))
         self.assertEquals(features[i], node_spec['features'][0])
예제 #31
0
 def test_simple(self):
     file_name = 'data/simple.pbs'
     project = 'lp_qlint'
     nodes = 2
     ppn = 4
     walltime = 72*3600
     partition = self._config['default_partition']
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     job = parser.job
     nodes_specs = job.resource_specs['nodes'][0]
     self.assertEquals(nodes, nodes_specs['nodes'])
     self.assertEquals(ppn, nodes_specs['ppn'])
     self.assertEquals(walltime, job.resource_specs['walltime'])
     self.assertEquals(partition, job.resource_specs['partition'])
예제 #32
0
 def test_parsing(self):
     file_name = 'data/correct.pbs'
     name = 'my_job'
     project = 'lp_qlint'
     nodes = 2
     ppn = 4
     walltime = 72*3600
     qos = 'debugging'
     join = 'oe'
     parser = PbsScriptParser(self._config, self._event_defs)
     with open(file_name, 'r') as pbs_file:
         parser.parse_file(pbs_file)
     job = parser.job
     self.assertEquals(name, job.name)
     self.assertEquals(project, job.project)
     nodes_specs = job.resource_specs['nodes'][0]
     self.assertEquals(nodes, nodes_specs['nodes'])
     self.assertEquals(ppn, nodes_specs['ppn'])
     self.assertEquals(walltime, job.resource_specs['walltime'])
     self.assertEquals(qos, job.resource_specs['qos'])
     self.assertEquals(join, job.join)
예제 #33
0
파일: qlint.py 프로젝트: gjbex/qlint
 if options.events:
     conf['event_file'] = options.events
 if not os.path.isfile(conf['cluster_db']):
     msg = "### error: can not open cluster DB '{0}'\n"
     sys.stderr.write(msg.format(conf['cluster_db']))
     sys.exit(CAN_NOT_OPEN_CLUSTER_DB_FILE)
 try:
     with open(conf['event_file']) as event_file:
         event_defs = json.load(event_file)
 except EnvironmentError as error:
     msg = "### error: can not open event file '{0}'\n"
     sys.stderr.write(msg.format(conf['event_file']))
     sys.exit(CAN_NOT_OPEN_EVENT_FILE)
 indent = ' '*conf['report_indent']
 try:
     pbs_parser = PbsScriptParser(conf, event_defs)
     try:
         with open(options.pbs_file, 'r') as pbs_file:
             pbs_parser.parse_file(pbs_file)
     except EnvironmentError as error:
         msg = "### error: can not open PBS file '{0}'\n"
         sys.stderr.write(msg.format(options.events))
         sys.exit(CAN_NOT_OPEN_PBS)
     job_checker = JobChecker(conf, event_defs)
     job_checker.check(pbs_parser.job)
     pbs_parser.context = 'semantics'
     pbs_parser.merge_events(job_checker.events)
     script_checker = ScriptChecker(conf, event_defs)
     script_checker.check(pbs_parser.job,
                          pbs_parser.script_first_line_nr)
     pbs_parser.context = 'file'