Esempio n. 1
0
 def test_empty_payload(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "v1"}}
     trigger_instance = copy.deepcopy(MOCK_TRIGGER_INSTANCE)
     trigger_instance.payload = None
     f = RuleFilter(trigger_instance, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), "equals check should have failed.")
Esempio n. 2
0
 def test_empty_payload(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v1'}}
     trigger_instance = copy.deepcopy(MOCK_TRIGGER_INSTANCE)
     trigger_instance.payload = None
     f = RuleFilter(trigger_instance, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), 'equals check should have failed.')
Esempio n. 3
0
 def test_empty_criteria_and_empty_payload(self):
     rule = MOCK_RULE_1
     rule.criteria = {}
     trigger_instance = copy.deepcopy(MOCK_TRIGGER_INSTANCE)
     trigger_instance.payload = None
     f = RuleFilter(trigger_instance, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'equals check should have failed.')
Esempio n. 4
0
 def test_empty_payload(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "v1"}}
     trigger_instance = copy.deepcopy(MOCK_TRIGGER_INSTANCE)
     trigger_instance.payload = None
     f = RuleFilter(trigger_instance, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), "equals check should have failed.")
Esempio n. 5
0
 def test_empty_payload(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v1'}}
     trigger_instance = copy.deepcopy(MOCK_TRIGGER_INSTANCE)
     trigger_instance.payload = None
     f = RuleFilter(trigger_instance, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), 'equals check should have failed.')
Esempio n. 6
0
 def test_empty_criteria_and_empty_payload(self):
     rule = MOCK_RULE_1
     rule.criteria = {}
     trigger_instance = copy.deepcopy(MOCK_TRIGGER_INSTANCE)
     trigger_instance.payload = None
     f = RuleFilter(trigger_instance, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'equals check should have failed.')
Esempio n. 7
0
 def test_nexists(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.float': {'type': 'nexists'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), '"float" key exists in trigger. Should return false.')
     rule.criteria = {'trigger.floattt': {'type': 'nexists'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), '"floattt" key ain\'t exist in trigger. Should return true.')
Esempio n. 8
0
 def test_matchregex_operator_pass_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         "trigger.p1": {
             "type": "matchregex",
             "pattern": "v1$"
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), "Failed to pass evaluation.")
Esempio n. 9
0
 def test_matchregex_operator_pass_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.p1': {
             'type': 'matchregex',
             'pattern': 'v1$'
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'Failed to pass evaluation.')
Esempio n. 10
0
    def test_equals_float_value(self):
        rule = MOCK_RULE_1
        rule.criteria = {'trigger.float': {'type': 'equals', 'pattern': 0.8}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {'trigger.float': {'type': 'equals', 'pattern': '{{trigger.float}}'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')
Esempio n. 11
0
    def test_hash_strip_int_value(self):
        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.int": {
                "type": "gt",
                "pattern": 0
            },
            "trigger.int#2": {
                "type": "lt",
                "pattern": 2
            },
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.int": {
                "type": "gt",
                "pattern": 2
            },
            "trigger.int#2": {
                "type": "lt",
                "pattern": 3
            },
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(),
                         "trigger value is gt than 0 but didn't match.")

        rule = MOCK_RULE_1
        rule.criteria = {"trigger.int#1": {"type": "lt", "pattern": 2}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(),
                        "trigger value is gt than 0 but didn't match.")
Esempio n. 12
0
    def test_equals_bool_value(self):
        rule = MOCK_RULE_1
        rule.criteria = {"trigger.bool": {"type": "equals", "pattern": True}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.bool": {
                "type": "equals",
                "pattern": "{{trigger.bool}}"
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.bool": {
                "type": "equals",
                "pattern": "{{ trigger.bool }}"
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")
Esempio n. 13
0
    def test_equals_bool_value(self):
        rule = MOCK_RULE_1
        rule.criteria = {'trigger.bool': {'type': 'equals', 'pattern': True}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.bool': {
                'type': 'equals',
                'pattern': '{{trigger.bool}}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.bool': {
                'type': 'equals',
                'pattern': '{{ trigger.bool }}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')
Esempio n. 14
0
    def test_criteria_pattern_references_a_datastore_item(self, mock_KeyValueLookup):
        class MockResultLookup(object):
            pass

        class MockSystemLookup(object):
            system = MockResultLookup()

        rule = MOCK_RULE_2

        # Using a variable in pattern, referencing an inexistent datastore value
        rule.criteria = {'trigger.p1': {
            'type': 'equals',
            'pattern': '{{ system.inexistent_value }}'}
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which doesn't match
        mock_result = MockSystemLookup()
        mock_result.test_value_1 = 'non matching'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': '{{ system.test_value_1 }}'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which does match
        mock_result = MockSystemLookup()
        mock_result.test_value_2 = 'v1'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': '{{ system.test_value_2 }}'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = 'YYY'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {'trigger.p2': {'type': 'equals', 'pattern': '{{ system.test_value_3 }}'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = 'YYY'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {'trigger.p2': {
            'type': 'equals',
            'pattern': 'pre{{ system.test_value_3 }}post'}
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())
Esempio n. 15
0
    def test_equals_operator_fail_criteria(self):
        rule = MOCK_RULE_1
        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'equals check should have failed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': '{{trigger.p2}}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'equals check should have failed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.list': {
                'type':
                'equals',
                'pattern':
                """
                    [
                        {% for item in trigger.list %}
                        {{item}}
                        {% endfor %}
                    ]
                """
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'equals check should have failed.')
Esempio n. 16
0
    def test_equals_operator_fail_criteria(self):
        rule = MOCK_RULE_1
        rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "v"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), "equals check should have failed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.p1": {
                "type": "equals",
                "pattern": "{{trigger.p2}}"
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), "equals check should have failed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.list": {
                "type":
                "equals",
                "pattern":
                """
                    [
                        {% for item in trigger.list %}
                        {{item}}
                        {% endfor %}
                    ]
                """,
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), "equals check should have failed.")
Esempio n. 17
0
    def test_gt_lt_falsy_pattern(self):
        # Make sure that the falsy value (number 0) is handled correctly
        rule = MOCK_RULE_1

        rule.criteria = {'trigger.int': {'type': 'gt', 'pattern': 0}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'trigger value is gt than 0 but didn\'t match')

        rule.criteria = {'trigger.int': {'type': 'lt', 'pattern': 0}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'trigger value is gt than 0 but didn\'t fail')
Esempio n. 18
0
    def test_criteria_pattern_references_a_datastore_item(self, mock_KeyValueLookup):
        class MockResultLookup(object):
            pass

        class MockSystemLookup(object):
            system = MockResultLookup()

        rule = MOCK_RULE_2

        # Using a variable in pattern, referencing an inexistent datastore value
        rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "{{ system.inexistent_value }}"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which doesn't match
        mock_result = MockSystemLookup()
        mock_result.test_value_1 = "non matching"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "{{ system.test_value_1 }}"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which does match
        mock_result = MockSystemLookup()
        mock_result.test_value_2 = "v1"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "{{ system.test_value_2 }}"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = "YYY"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {"trigger.p2": {"type": "equals", "pattern": "{{ system.test_value_3 }}"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = "YYY"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {"trigger.p2": {"type": "equals", "pattern": "pre{{ system.test_value_3 }}post"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())
Esempio n. 19
0
 def test_search_operator_pass_all_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.recursive_list': {
             'type': 'search',
             'condition': 'all',
             'pattern': {
                 'item.field_name': {
                     'type': 'startswith',
                     'pattern': 'S',
                 }
             }
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'Failed evaluation')
Esempio n. 20
0
 def test_search_operator_pass_all_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         "trigger.recursive_list": {
             "type": "search",
             "condition": "all",
             "pattern": {
                 "item.field_name": {
                     "type": "startswith",
                     "pattern": "S",
                 }
             },
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), "Failed evaluation")
Esempio n. 21
0
 def test_search_operator_pass_all_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.recursive_list': {
             'type': 'search',
             'condition': 'all',
             'pattern': {
                 'item.field_name': {
                     'type': 'startswith',
                     'pattern': 'S',
                 }
             }
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'Failed evaluation')
Esempio n. 22
0
 def get_matching_rules(self):
     first_pass, second_pass = self._split_rules_into_passes()
     # first pass
     rule_filters = [
         RuleFilter(trigger_instance=self.trigger_instance,
                    trigger=self.trigger,
                    rule=rule,
                    extra_info=self.extra_info) for rule in first_pass
     ]
     matched_rules = [
         rule_filter.rule for rule_filter in rule_filters
         if rule_filter.filter()
     ]
     LOG.debug('[1st_pass] %d rule(s) found to enforce for %s.',
               len(matched_rules), self.trigger['name'])
     # second pass
     rule_filters = [
         SecondPassRuleFilter(self.trigger_instance, self.trigger, rule,
                              matched_rules) for rule in second_pass
     ]
     matched_in_second_pass = [
         rule_filter.rule for rule_filter in rule_filters
         if rule_filter.filter()
     ]
     LOG.debug('[2nd_pass] %d rule(s) found to enforce for %s.',
               len(matched_in_second_pass), self.trigger['name'])
     matched_rules.extend(matched_in_second_pass)
     LOG.info('%d rule(s) found to enforce for %s.', len(matched_rules),
              self.trigger['name'])
     return matched_rules
Esempio n. 23
0
 def test_search_operator_fail_all_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.recursive_list': {
             'type': 'search',
             'condition': 'all',
             'pattern': {
                 'item.field_name': {
                     'type': 'equals',
                     'pattern': 'Status',
                 },
                 'item.to_value': {
                     'type': 'equals',
                     'pattern': 'Denied',
                 }
             }
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), 'Passed evaluation')
Esempio n. 24
0
 def test_search_operator_fail_all_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.recursive_list': {
             'type': 'search',
             'condition': 'all',
             'pattern': {
                 'item.field_name': {
                     'type': 'equals',
                     'pattern': 'Status',
                 },
                 'item.to_value': {
                     'type': 'equals',
                     'pattern': 'Denied',
                 }
             }
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), 'Passed evaluation')
Esempio n. 25
0
 def test_search_operator_pass_any_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.recursive_list': {
             'type': 'search',
             'condition': 'any',
             'pattern': {
                 'item.field_name': {
                     'type': 'equals',
                     'pattern': 'Status',
                 },
                 'item.to_value': {
                     'type': 'equals',
                     'pattern': 'Approved'
                 }
             }
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'Failed evaluation')
Esempio n. 26
0
 def test_search_operator_pass_any_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         "trigger.recursive_list": {
             "type": "search",
             "condition": "any",
             "pattern": {
                 "item.field_name": {
                     "type": "equals",
                     "pattern": "Status",
                 },
                 "item.to_value": {
                     "type": "equals",
                     "pattern": "Approved"
                 },
             },
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), "Failed evaluation")
Esempio n. 27
0
 def test_search_operator_fail_all_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         "trigger.recursive_list": {
             "type": "search",
             "condition": "all",
             "pattern": {
                 "item.field_name": {
                     "type": "equals",
                     "pattern": "Status",
                 },
                 "item.to_value": {
                     "type": "equals",
                     "pattern": "Denied",
                 },
             },
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), "Passed evaluation")
Esempio n. 28
0
 def test_search_operator_pass_any_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {
         'trigger.recursive_list': {
             'type': 'search',
             'condition': 'any',
             'pattern': {
                 'item.field_name': {
                     'type': 'equals',
                     'pattern': 'Status',
                 },
                 'item.to_value': {
                     'type': 'equals',
                     'pattern': 'Approved'
                 }
             }
         }
     }
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'Failed evaluation')
Esempio n. 29
0
File: matcher.py Progetto: timff/st2
 def get_matching_rules(self):
     rule_filters = [
         RuleFilter(self.trigger_instance, self.trigger, rule)
         for rule in self.rules
     ]
     matched_rules = [
         rule_filter.rule for rule_filter in rule_filters
         if rule_filter.filter()
     ]
     LOG.info('%d rule(s) found to enforce for %s.', len(matched_rules),
              self.trigger['name'])
     return matched_rules
Esempio n. 30
0
    def test_equals_operator_fail_criteria(self):
        rule = MOCK_RULE_1
        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'equals check should have failed.')

        rule = MOCK_RULE_1
        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': '{{trigger.p2}}'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'equals check should have failed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.list': {
                'type': 'equals',
                'pattern': """
                    [
                        {% for item in trigger.list %}
                        {{item}}
                        {% endfor %}
                    ]
                """
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(), 'equals check should have failed.')
Esempio n. 31
0
 def test_nexists(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.float': {'type': 'nexists'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), '"float" key exists in trigger. Should return false.')
     rule.criteria = {'trigger.floattt': {'type': 'nexists'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), '"floattt" key ain\'t exist in trigger. Should return true.')
Esempio n. 32
0
    def test_gt_lt_falsy_pattern(self):
        # Make sure that the falsy value (number 0) is handled correctly
        rule = MOCK_RULE_1

        rule.criteria = {"trigger.int": {"type": "gt", "pattern": 0}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(),
                        "trigger value is gt than 0 but didn't match")

        rule.criteria = {"trigger.int": {"type": "lt", "pattern": 0}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(),
                         "trigger value is gt than 0 but didn't fail")
Esempio n. 33
0
    def test_gt_lt_falsy_pattern(self):
        # Make sure that the falsy value (number 0) is handled correctly
        rule = MOCK_RULE_1

        rule.criteria = {'trigger.int': {'type': 'gt', 'pattern': 0}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(),
                        'trigger value is gt than 0 but didn\'t match')

        rule.criteria = {'trigger.int': {'type': 'lt', 'pattern': 0}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter(),
                         'trigger value is gt than 0 but didn\'t fail')
Esempio n. 34
0
    def test_equals_operator_pass_criteria(self):
        rule = MOCK_RULE_1
        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v1'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': '{{trigger.p1}}'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': "{{'%s' % trigger.p1 if trigger.int}}"
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        # Test our filter works if proper JSON is returned from user pattern
        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.list': {
                'type': 'equals',
                'pattern': """
                    [
                        {% for item in trigger.list %}
                        {{item}}{% if not loop.last %},{% endif %}
                        {% endfor %}
                    ]
                """
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')
Esempio n. 35
0
 def test_matchregex_operator_fail_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.p1": {"type": "matchregex", "pattern": "v$"}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), "regex check should have failed.")
Esempio n. 36
0
 def test_matchregex_operator_fail_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.p1": {"type": "matchregex", "pattern": "v$"}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), "regex check should have failed.")
Esempio n. 37
0
    def test_criteria_pattern_references_a_datastore_item(
            self, mock_KeyValueLookup):
        class MockResultLookup(object):
            pass

        class MockSystemLookup(object):
            system = MockResultLookup()

        rule = MOCK_RULE_2

        # Using a variable in pattern, referencing an inexistent datastore value
        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': '{{ st2kv.system.inexistent_value }}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which doesn't match
        mock_result = MockSystemLookup()
        mock_result.test_value_1 = 'non matching'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': '{{ st2kv.system.test_value_1 }}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which does match
        mock_result = MockSystemLookup()
        mock_result.test_value_2 = 'v1'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': '{{ st2kv.system.test_value_2 }}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = 'YYY'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            'trigger.p2': {
                'type': 'equals',
                'pattern': '{{ st2kv.system.test_value_3 }}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = 'YYY'
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            'trigger.p2': {
                'type': 'equals',
                'pattern': 'pre{{ st2kv.system.test_value_3 }}post'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())
Esempio n. 38
0
 def test_empty_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'equals check should have failed.')
Esempio n. 39
0
 def test_equals_float_value(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.float': {'type': 'equals', 'pattern': 0.8}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'equals check should have passed.')
Esempio n. 40
0
    def test_equals_operator_pass_criteria(self):
        rule = MOCK_RULE_1
        rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "v1"}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.p1": {
                "type": "equals",
                "pattern": "{{trigger.p1}}"
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")

        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.p1": {
                "type": "equals",
                "pattern": "{{'%s' % trigger.p1 if trigger.int}}",
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")

        # Test our filter works if proper JSON is returned from user pattern
        rule = MOCK_RULE_1
        rule.criteria = {
            "trigger.list": {
                "type":
                "equals",
                "pattern":
                """
                    [
                        {% for item in trigger.list %}
                        {{item}}{% if not loop.last %},{% endif %}
                        {% endfor %}
                    ]
                """,
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), "equals check should have passed.")
Esempio n. 41
0
 def test_equals_float_value(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.float": {"type": "equals", "pattern": 0.8}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), "equals check should have passed.")
Esempio n. 42
0
 def test_equals_operator_pass_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v1'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'regex check should have failed.')
Esempio n. 43
0
 def test_empty_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'equals check should have failed.')
Esempio n. 44
0
 def test_equals_operator_pass_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.p1": {"type": "equals", "pattern": "v1"}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), "regex check should have failed.")
Esempio n. 45
0
    def test_equals_operator_pass_criteria(self):
        rule = MOCK_RULE_1
        rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v1'}}
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': '{{trigger.p1}}'
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.p1': {
                'type': 'equals',
                'pattern': "{{'%s' % trigger.p1 if trigger.int}}"
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')

        # Test our filter works if proper JSON is returned from user pattern
        rule = MOCK_RULE_1
        rule.criteria = {
            'trigger.list': {
                'type':
                'equals',
                'pattern':
                """
                    [
                        {% for item in trigger.list %}
                        {{item}}{% if not loop.last %},{% endif %}
                        {% endfor %}
                    ]
                """
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter(), 'equals check should have passed.')
Esempio n. 46
0
 def test_matchregex_operator_pass_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {"trigger.p1": {"type": "matchregex", "pattern": "v1$"}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), "Failed to pass evaluation.")
Esempio n. 47
0
 def test_matchregex_operator_pass_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.p1': {'type': 'matchregex', 'pattern': 'v1$'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'Failed to pass evaluation.')
Esempio n. 48
0
 def test_equals_operator_fail_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.p1': {'type': 'equals', 'pattern': 'v'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), 'equals check should have failed.')
Esempio n. 49
0
 def test_equals_bool_value(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.bool': {'type': 'equals', 'pattern': True}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertTrue(f.filter(), 'equals check should have passed.')
Esempio n. 50
0
 def test_matchregex_operator_fail_criteria(self):
     rule = MOCK_RULE_1
     rule.criteria = {'trigger.p1': {'type': 'matchregex', 'pattern': 'v$'}}
     f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
     self.assertFalse(f.filter(), 'regex check should have failed.')
Esempio n. 51
0
    def test_criteria_pattern_references_a_datastore_item(
            self, mock_KeyValueLookup):
        class MockResultLookup(object):
            pass

        class MockSystemLookup(object):
            system = MockResultLookup()

        rule = MOCK_RULE_2

        # Using a variable in pattern, referencing an inexistent datastore value
        rule.criteria = {
            "trigger.p1": {
                "type": "equals",
                "pattern": "{{ st2kv.system.inexistent_value }}",
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which doesn't match
        mock_result = MockSystemLookup()
        mock_result.test_value_1 = "non matching"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            "trigger.p1": {
                "type": "equals",
                "pattern": "{{ st2kv.system.test_value_1 }}",
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which does match
        mock_result = MockSystemLookup()
        mock_result.test_value_2 = "v1"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            "trigger.p1": {
                "type": "equals",
                "pattern": "{{ st2kv.system.test_value_2 }}",
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = "YYY"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            "trigger.p2": {
                "type": "equals",
                "pattern": "{{ st2kv.system.test_value_3 }}",
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertFalse(f.filter())

        # Using a variable in pattern, referencing an existing value which matches partially
        mock_result = MockSystemLookup()
        mock_result.test_value_3 = "YYY"
        mock_KeyValueLookup.return_value = mock_result

        rule.criteria = {
            "trigger.p2": {
                "type": "equals",
                "pattern": "pre{{ st2kv.system.test_value_3 }}post",
            }
        }
        f = RuleFilter(MOCK_TRIGGER_INSTANCE, MOCK_TRIGGER, rule)
        self.assertTrue(f.filter())