Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
    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.")
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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.")
Esempio n. 8
0
    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)