def test_bprule_expand_template_macros(self):
        svc_cor = self.sched.services.find_srv_by_name_and_hostname(
            "dummy", "formatted_bp_rule_output")
        self.assertIs(True, svc_cor.got_business_rule)
        self.assertIsNot(svc_cor.business_rule, None)

        svc1 = self.sched.services.find_srv_by_name_and_hostname(
            "test_host_01", "srv1")
        svc2 = self.sched.services.find_srv_by_name_and_hostname(
            "test_host_02", "srv2")
        svc3 = self.sched.services.find_srv_by_name_and_hostname(
            "test_host_03", "srv3")
        hst4 = self.sched.hosts.find_by_name("test_host_04")

        for i in range(2):
            self.scheduler_loop(1, [[svc1, 0, 'OK test_host_01/srv1'],
                                    [svc2, 1, 'WARNING test_host_02/srv2'],
                                    [svc3, 2, 'CRITICAL test_host_03/srv3'],
                                    [hst4, 2, 'DOWN test_host_04']])

        time.sleep(61)
        self.sched.manage_internal_checks()
        self.sched.consume_results()

        # Performs checks
        m = MacroResolver()
        template = "$STATUS$,$SHORTSTATUS$,$HOSTNAME$,$SERVICEDESC$,$FULLNAME$"
        data = svc1.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("OK,O,test_host_01,srv1,test_host_01/srv1", output)
        data = svc2.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("WARNING,W,test_host_02,srv2,test_host_02/srv2",
                         output)
        data = svc3.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("CRITICAL,C,test_host_03,srv3,test_host_03/srv3",
                         output)
        data = hst4.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("DOWN,D,test_host_04,,test_host_04", output)
        data = svc_cor.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual(
            "CRITICAL,C,dummy,formatted_bp_rule_output,dummy/formatted_bp_rule_output",
            output)
    def test_bprule_expand_template_macros(self):
        svc_cor = self.sched.services.find_srv_by_name_and_hostname("dummy", "formatted_bp_rule_output")
        self.assertIs(True, svc_cor.got_business_rule)
        self.assertIsNot(svc_cor.business_rule, None)

        svc1 = self.sched.services.find_srv_by_name_and_hostname("test_host_01", "srv1")
        svc2 = self.sched.services.find_srv_by_name_and_hostname("test_host_02", "srv2")
        svc3 = self.sched.services.find_srv_by_name_and_hostname("test_host_03", "srv3")
        hst4 = self.sched.hosts.find_by_name("test_host_04")

        for i in range(2):
            self.scheduler_loop(1, [
                [svc1, 0, 'OK test_host_01/srv1'],
                [svc2, 1, 'WARNING test_host_02/srv2'],
                [svc3, 2, 'CRITICAL test_host_03/srv3'],
                [hst4, 2, 'DOWN test_host_04']])

        time.sleep(61)
        self.sched.manage_internal_checks()
        self.sched.consume_results()

        # Performs checks
        m = MacroResolver()
        template = "$STATUS$,$SHORTSTATUS$,$HOSTNAME$,$SERVICEDESC$,$FULLNAME$"
        data = svc1.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("OK,O,test_host_01,srv1,test_host_01/srv1", output)
        data = svc2.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("WARNING,W,test_host_02,srv2,test_host_02/srv2", output)
        data = svc3.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("CRITICAL,C,test_host_03,srv3,test_host_03/srv3", output)
        data = hst4.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("DOWN,D,test_host_04,,test_host_04", output)
        data = svc_cor.get_data_for_checks()
        output = m.resolve_simple_macros_in_string(template, data)
        self.assertEqual("CRITICAL,C,dummy,formatted_bp_rule_output,dummy/formatted_bp_rule_output", output)
    def test_bprule_expand_template_macros(self):
        """ BR - expand template macros"""
        svc_cor = self._sched.services.find_srv_by_name_and_hostname(
            "dummy", "formatted_bp_rule_output")
        svc_cor.act_depend_of = []  # no host checks on critical check results
        # Is a Business Rule, not a simple service...
        assert svc_cor.got_business_rule
        assert svc_cor.business_rule is not None
        assert "$STATUS$ $([$STATUS$: $FULLNAME$] )$" == \
                         svc_cor.business_rule_output_template

        svc1 = self._sched.services.find_srv_by_name_and_hostname(
            "test_host_01", "srv1")
        svc1.act_depend_of = []  # no host checks on critical check results
        svc2 = self._sched.services.find_srv_by_name_and_hostname(
            "test_host_02", "srv2")
        svc2.act_depend_of = []  # no host checks on critical check results
        svc3 = self._sched.services.find_srv_by_name_and_hostname(
            "test_host_03", "srv3")
        svc3.act_depend_of = []  # no host checks on critical check results
        hst4 = self._sched.hosts.find_by_name("test_host_04")
        hst4.act_depend_of = []  # no host checks on critical check results

        self.scheduler_loop(3, [[svc1, 0, 'OK test_host_01/srv1'],
                                [svc2, 1, 'WARNING test_host_02/srv2'],
                                [svc3, 2, 'CRITICAL test_host_03/srv3'],
                                [hst4, 2, 'DOWN test_host_04']])
        assert 'OK' == svc1.state
        assert 'HARD' == svc1.state_type
        assert 'WARNING' == svc2.state
        assert 'HARD' == svc2.state_type
        assert 'CRITICAL' == svc3.state
        assert 'HARD' == svc3.state_type
        assert 'DOWN' == hst4.state
        assert 'HARD' == hst4.state_type

        time.sleep(1)

        # Launch an internal check
        self.launch_internal_check(svc_cor)

        # Performs checks
        m = MacroResolver()
        template = "$STATUS$,$SHORTSTATUS$,$HOSTNAME$,$SERVICEDESC$,$FULLNAME$"
        host = self._sched.hosts[svc1.host]
        data = [host, svc1]
        output = m.resolve_simple_macros_in_string(
            template, data, self._sched.macromodulations,
            self._sched.timeperiods)
        assert "OK,O,test_host_01,srv1,test_host_01/srv1" == output
        host = self._sched.hosts[svc2.host]
        data = [host, svc2]
        output = m.resolve_simple_macros_in_string(
            template, data, self._sched.macromodulations,
            self._sched.timeperiods)
        assert "WARNING,W,test_host_02,srv2,test_host_02/srv2" == output
        host = self._sched.hosts[svc3.host]
        data = [host, svc3]
        output = m.resolve_simple_macros_in_string(
            template, data, self._sched.macromodulations,
            self._sched.timeperiods)
        assert "CRITICAL,C,test_host_03,srv3,test_host_03/srv3" == output
        data = [hst4]
        output = m.resolve_simple_macros_in_string(
            template, data, self._sched.macromodulations,
            self._sched.timeperiods)
        assert "DOWN,D,test_host_04,,test_host_04" == output
        host = self._sched.hosts[svc_cor.host]
        data = [host, svc_cor]
        output = m.resolve_simple_macros_in_string(
            template, data, self._sched.macromodulations,
            self._sched.timeperiods)
        assert "CRITICAL,C,dummy,formatted_bp_rule_output,dummy/formatted_bp_rule_output" == \
                         output
    def test_bprule_expand_template_macros(self):
        """ BR - expand template macros"""
        svc_cor = self._sched.services.find_srv_by_name_and_hostname("dummy",
                                                                     "formatted_bp_rule_output")
        svc_cor.act_depend_of = []  # no host checks on critical check results
        # Is a Business Rule, not a simple service...
        assert svc_cor.got_business_rule
        assert svc_cor.business_rule is not None
        assert "$STATUS$ $([$STATUS$: $FULLNAME$] )$" == \
                         svc_cor.business_rule_output_template

        svc1 = self._sched.services.find_srv_by_name_and_hostname("test_host_01", "srv1")
        svc1.act_depend_of = []  # no host checks on critical check results
        svc2 = self._sched.services.find_srv_by_name_and_hostname("test_host_02", "srv2")
        svc2.act_depend_of = []  # no host checks on critical check results
        svc3 = self._sched.services.find_srv_by_name_and_hostname("test_host_03", "srv3")
        svc3.act_depend_of = []  # no host checks on critical check results
        hst4 = self._sched.hosts.find_by_name("test_host_04")
        hst4.act_depend_of = []  # no host checks on critical check results

        self.scheduler_loop(3, [
            [svc1, 0, 'OK test_host_01/srv1'],
            [svc2, 1, 'WARNING test_host_02/srv2'],
            [svc3, 2, 'CRITICAL test_host_03/srv3'],
            [hst4, 2, 'DOWN test_host_04']])
        assert 'OK' == svc1.state
        assert 'HARD' == svc1.state_type
        assert 'WARNING' == svc2.state
        assert 'HARD' == svc2.state_type
        assert 'CRITICAL' == svc3.state
        assert 'HARD' == svc3.state_type
        assert 'DOWN' == hst4.state
        assert 'HARD' == hst4.state_type

        time.sleep(1)

        # Launch an internal check
        self.launch_internal_check(svc_cor)

        # Performs checks
        m = MacroResolver()
        template = "$STATUS$,$SHORTSTATUS$,$HOSTNAME$,$SERVICEDESC$,$FULLNAME$"
        host = self._sched.hosts[svc1.host]
        data = [host, svc1]
        output = m.resolve_simple_macros_in_string(template, data,
                                                   self._sched.macromodulations,
                                                   self._sched.timeperiods)
        assert "OK,O,test_host_01,srv1,test_host_01/srv1" == output
        host = self._sched.hosts[svc2.host]
        data = [host, svc2]
        output = m.resolve_simple_macros_in_string(template, data,
                                                   self._sched.macromodulations,
                                                   self._sched.timeperiods)
        assert "WARNING,W,test_host_02,srv2,test_host_02/srv2" == output
        host = self._sched.hosts[svc3.host]
        data = [host, svc3]
        output = m.resolve_simple_macros_in_string(template, data,
                                                   self._sched.macromodulations,
                                                   self._sched.timeperiods)
        assert "CRITICAL,C,test_host_03,srv3,test_host_03/srv3" == output
        data = [hst4]
        output = m.resolve_simple_macros_in_string(template, data,
                                                   self._sched.macromodulations,
                                                   self._sched.timeperiods)
        assert "DOWN,D,test_host_04,,test_host_04" == output
        host = self._sched.hosts[svc_cor.host]
        data = [host, svc_cor]
        output = m.resolve_simple_macros_in_string(template, data,
                                                   self._sched.macromodulations,
                                                   self._sched.timeperiods)
        assert "CRITICAL,C,dummy,formatted_bp_rule_output,dummy/formatted_bp_rule_output" == \
                         output