def test_constructor(self): rule_queue = RuleQueue(self.rules) self.assertTrue(rule_queue.has_unapplied_rules()) rules = [] while rule_queue.has_unapplied_rules(): rules.append(rule_queue.get_next()) self.assertCountEqual(rules, self.rules)
def evaluate_rules_with_cookie(self, cookie: Cookie) -> bool: rule_queue = RuleQueue(self.rules) terminate = False while not terminate and rule_queue.has_unapplied_rules(): rule = rule_queue.get_next() isolated_cookie = copy.deepcopy(cookie) try: matches = rule.matches(isolated_cookie) if matches: terminate = rule.execute_action(isolated_cookie) except: matches = False logging.error("Error applying rule; Rule: %s; Error: %s" % (rule, traceback.format_exc())) if matches: log = RuleApplicationLog(rule.id, terminate) log_as_dict = BasicProcessor._RULE_APPLICATION_LOG_JSON_ENCODER.default(log) enrichment = Enrichment(RULE_APPLICATION, datetime.now(tz=timezone.utc), Metadata(log_as_dict)) self.cookie_jar.enrich_cookie(cookie.identifier, enrichment, mark_for_processing=False) # Update in-memory copy of cookie cookie.enrichments.add(enrichment) rule_queue.mark_as_applied(rule) return terminate
def test_mark_as_applied_unapplied_rule(self): rule_queue = RuleQueue(self.rules) applied_rules = [] while rule_queue.has_unapplied_rules(): rule = rule_queue.get_next() self.assertNotIn(rule, applied_rules) rule_queue.mark_as_applied(rule) applied_rules.append(rule)
def test_reset(self): rule_queue = RuleQueue(self.rules) rule_1 = rule_queue.get_next() rule_queue.mark_as_applied(rule_1) rule_2 = rule_queue.get_next() rule_queue.mark_as_applied(rule_2) rule_queue.reset() unapplied_counter = 0 while rule_queue.has_unapplied_rules(): rule = rule_queue.get_next() rule_queue.mark_as_applied(rule) unapplied_counter += 1 self.assertEqual(unapplied_counter, len(self.rules))
def evaluate_rules_with_cookie(self, cookie: Cookie) -> bool: rule_queue = RuleQueue(self.rules) terminate = False while not terminate and rule_queue.has_unapplied_rules(): rule = rule_queue.get_next() isolated_cookie = copy.deepcopy(cookie) try: if rule.matches(isolated_cookie): terminate = rule.execute_action(isolated_cookie) except Exception: logging.error("Error applying rule; Rule: %s; Error: %s" % (rule, traceback.format_exc())) rule_queue.mark_as_applied(rule) return terminate
def test_get_next_can_get_all_in_correct_order(self): rule_queue = RuleQueue(self.rules) rules = [] # type: List[Rule] while rule_queue.has_unapplied_rules(): rule = rule_queue.get_next() for previous_rule in rules: self.assertGreaterEqual( abs(Priority.MAX_PRIORITY - rule.priority), abs(Priority.MAX_PRIORITY - previous_rule.priority)) self.assertIn(rule, self.rules) rules.append(rule) self.assertCountEqual(rules, self.rules)
def test_has_unapplied_rules_with_no_unapplied_rules(self): rule_queue = RuleQueue([]) self.assertFalse(rule_queue.has_unapplied_rules())
def test_has_unapplied_rules_with_unapplied_rules(self): rule_queue = RuleQueue(self.rules) self.assertTrue(rule_queue.has_unapplied_rules())