def test_countRealRunning_match(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) match_obj = compile('True', "<string>", "eval") actual = glideinFrontendLib.countRealRunning(match_obj, cq_run_dict, self.glidein_dict, {}) expected = ( {self.glidein_dict_k1: 1, self.glidein_dict_k2: 4, self.glidein_dict_k3: 0}, {self.glidein_dict_k1: 1, self.glidein_dict_k2: 3, self.glidein_dict_k3: 0}) self.assertEqual(expected, actual) match_obj = compile('False', "<string>", "eval") actual = glideinFrontendLib.countRealRunning(match_obj, cq_run_dict, self.glidein_dict, {}) expected = ( {self.glidein_dict_k1: 0, self.glidein_dict_k2: 0, self.glidein_dict_k3: 0}, {self.glidein_dict_k1: 0, self.glidein_dict_k2: 0, self.glidein_dict_k3: 0}) self.assertEqual(expected, actual) match_expr = 'glidein["attrs"].get("GLIDEIN_Site") in job.get("DESIRED_Sites", [])' match_obj = compile(match_expr, "<string>", "eval") actual = glideinFrontendLib.countRealRunning(match_obj, cq_run_dict, self.glidein_dict, {}) expected = ( {self.glidein_dict_k1: 1, self.glidein_dict_k2: 1, self.glidein_dict_k3: 0}, {self.glidein_dict_k1: 1, self.glidein_dict_k2: 1, self.glidein_dict_k3: 0}) self.assertEqual(expected, actual)
def test_countRealRunning_match(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) match_obj = compile('True', "<string>", "eval") actual = glideinFrontendLib.countRealRunning( match_obj, cq_run_dict, self.glidein_dict, {}) expected = ( {self.glidein_dict_k1: 1, self.glidein_dict_k2: 4, self.glidein_dict_k3: 0}, {self.glidein_dict_k1: 1, self.glidein_dict_k2: 3, self.glidein_dict_k3: 0}) self.assertEqual(expected, actual) match_obj = compile('False', "<string>", "eval") actual = glideinFrontendLib.countRealRunning( match_obj, cq_run_dict, self.glidein_dict, {}) expected = ( {self.glidein_dict_k1: 0, self.glidein_dict_k2: 0, self.glidein_dict_k3: 0}, {self.glidein_dict_k1: 0, self.glidein_dict_k2: 0, self.glidein_dict_k3: 0}) self.assertEqual(expected, actual) match_expr = 'glidein["attrs"].get("GLIDEIN_Site") in job.get("DESIRED_Sites", [])' match_obj = compile(match_expr, "<string>", "eval") actual = glideinFrontendLib.countRealRunning( match_obj, cq_run_dict, self.glidein_dict, {}) expected = ( {self.glidein_dict_k1: 1, self.glidein_dict_k2: 1, self.glidein_dict_k3: 0}, {self.glidein_dict_k1: 1, self.glidein_dict_k2: 1, self.glidein_dict_k3: 0}) self.assertEqual(expected, actual)
def test_countRealRunning_otherException(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) with mock.patch.object(glideinwms.frontend.glideinFrontendLib.logSupport.log, 'debug') as m_debug: match_obj = compile('3/0', "<string>", "eval") actual = glideinFrontendLib.countRealRunning(match_obj, cq_run_dict, self.glidein_dict, {}) log_msg = m_debug.call_args[0] self.assertTrue('exceptions in countMatch subprocess. Most recent traceback') in log_msg self.assertTrue('ZeroDivisionError: integer division or modulo by zero') in log_msg
def test_countRealRunning_missingKey(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) with mock.patch.object(glideinwms.frontend.glideinFrontendLib.logSupport.log, 'debug') as m_debug: match_obj = compile('glidein["attrs"]["FOO"] == 3', "<string>", "eval") actual = glideinFrontendLib.countRealRunning(match_obj, cq_run_dict, self.glidein_dict, {}) m_debug.assert_any_call( "Failed to evaluate resource match in countRealRunning. Possibly match_expr has " "errors and trying to reference job or site attribute(s) ''FOO'' in an inappropriate way.")
def test_countRealRunning_otherException(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) with mock.patch.object(glideinwms.frontend.glideinFrontendLib.logSupport.log, 'debug') as m_debug: match_obj = compile('3/0', "<string>", "eval") actual = glideinFrontendLib.countRealRunning( match_obj, cq_run_dict, self.glidein_dict, {}) log_msg = m_debug.call_args[0] self.assertTrue( 'Running glidein ids at ' in str(log_msg), log_msg) self.assertTrue( 'total glideins: 0, total jobs 0, cluster matches: 0' in str(log_msg), log_msg)
def test_countRealRunning_missingKey(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) with mock.patch.object(glideinwms.frontend.glideinFrontendLib.logSupport.log, 'debug') as m_debug: match_obj = compile( 'glidein["attrs"]["FOO"] == 3', "<string>", "eval") actual = glideinFrontendLib.countRealRunning( match_obj, cq_run_dict, self.glidein_dict, {}) m_debug.assert_any_call( "Failed to evaluate resource match in countRealRunning. Possibly match_expr has " "errors and trying to reference job or site attribute(s) ''FOO'' in an inappropriate way.")
def test_countRealRunning_otherException(self): cq_run_dict = glideinFrontendLib.getRunningCondorQ(self.condorq_dict) glideinFrontendLib.appendRealRunning(cq_run_dict, self.status_dict) with mock.patch.object( glideinwms.frontend.glideinFrontendLib.logSupport.log, 'debug') as m_debug: match_obj = compile('3/0', "<string>", "eval") actual = glideinFrontendLib.countRealRunning( match_obj, cq_run_dict, self.glidein_dict, {}) log_msg = m_debug.call_args[0] self.assertTrue( 'exceptions in countMatch subprocess. Most recent traceback' ) in log_msg self.assertTrue( 'ZeroDivisionError: integer division or modulo by zero' ) in log_msg
condorq_match_list.append(f[0]) #logSupport.log.debug("realcount: %s\n\n" % glideinFrontendLib.countRealRunning(elementDescript.merged_data['MatchExprCompiledObj'],condorq_dict_running,glidein_dict)) logSupport.log.info("Counting subprocess created") pipe_ids={} for dt in condorq_dict_types.keys()+['Real','Glidein']: # will make calculations in parallel,using multiple processes r,w=os.pipe() pid=os.fork() if pid==0: # this is the child... return output as a pickled object via the pipe os.close(r) try: if dt=='Real': out=glideinFrontendLib.countRealRunning(elementDescript.merged_data['MatchExprCompiledObj'],condorq_dict_running,glidein_dict,attr_dict,condorq_match_list) elif dt=='Glidein': count_status_multi={} for glideid in glidein_dict.keys(): request_name=glideid[1] count_status_multi[request_name]={} for st in status_dict_types.keys(): c=glideinFrontendLib.getClientCondorStatus(status_dict_types[st]['dict'],frontend_name,group_name,request_name) count_status_multi[request_name][st]=glideinFrontendLib.countCondorStatus(c) out=count_status_multi else: c,p,h=glideinFrontendLib.countMatch(elementDescript.merged_data['MatchExprCompiledObj'],condorq_dict_types[dt]['dict'],glidein_dict,attr_dict,condorq_match_list) t=glideinFrontendLib.countCondorQ(condorq_dict_types[dt]['dict']) out=(c,p,h,t)