Esempio n. 1
0
def test_parse_rule(rulefile, expectation):
    rules = WhisperRules()
    rulefile = Path(rule_path(rulefile))
    rule_id, rule = load_yaml_from_file(rulefile).popitem()
    with expectation:
        parsed_rule = rules.parse_rule(rule_id, rule)
        assert parsed_rule["message"] == rule["message"]
Esempio n. 2
0
 def load_rules_from_file(self, rulefile: Path):
     if not rulefile.exists():
         raise FileNotFoundError(
             f"Rule file {rulefile.as_posix()} not found")
     rules = load_yaml_from_file(rulefile)
     for rule_id, rule in rules.items():
         self.load_rule(rule_id, rule)
Esempio n. 3
0
def test_load_rule(dups, expectation):
    rules = WhisperRules()
    rulefile = Path(rule_path("valid.yml"))
    rule_id, rule = load_yaml_from_file(rulefile).popitem()
    with expectation:
        for _ in range(dups):
            rules.load_rule(rule_id, rule)
            assert rule_id in rules.rules
            assert rules.rules[rule_id] == rule
Esempio n. 4
0
def test_load_rules(rulefile, expectation):
    rules = WhisperRules(rule_path("empty.yml"))
    rulefile = rule_path(rulefile)
    ruleyaml = load_yaml_from_file(Path(rulefile))
    with expectation:
        rules.load_rules(rulefile)
        assert len(rules.rules) == len(ruleyaml)
        for rule_id in ruleyaml.keys():
            assert rule_id in rules.rules
Esempio n. 5
0
def load_config(configfile, src="."):
    configfile = Path(configfile)
    if not configfile.exists():
        debug(f"{configfile} does not exist")
        raise FileNotFoundError

    if not configfile.is_file():
        debug(f"{configfile} is not a file")
        raise TypeError

    config = load_yaml_from_file(configfile)

    # Ensure minimal expected config structure
    try:
        if "exclude" not in config:
            config["exclude"] = {"files": [], "keys": [], "values": []}
        else:
            for idx in ["files", "keys", "values"]:
                if idx not in config["exclude"]:
                    config["exclude"][idx] = []
        if "include" not in config:
            config["include"] = {"files": ["**/*"]}
        elif "files" not in config["include"]:
            config["include"]["files"] = ["**/*"]
    except Exception:
        debug(f"{configfile} is not valid")
        raise NameError

    # Glob excluded files
    exfiles = []
    for fileglob in config["exclude"]["files"]:
        for filepath in Path(src).glob(fileglob):
            exfiles.append(filepath)
    config["exclude"]["files"] = exfiles

    # Compile regex from excluded keys and values
    for param in ["keys", "values"]:
        excluded = []
        for item in config["exclude"][param]:
            excluded.append(re.compile(item, flags=re.IGNORECASE))
        config["exclude"][param] = excluded

    # Optional: rules
    if "rules" not in config:
        config["rules"] = {}

    return config
Esempio n. 6
0
def test_load_rules_from_dict(rulefile, rules_added):
    rules = WhisperRules()
    rules_len = len(rules.rules)
    custom_rules = load_yaml_from_file(Path(rule_path(rulefile)))
    rules.load_rules_from_dict(custom_rules)
    assert len(rules.rules) == rules_len + rules_added
Esempio n. 7
0
def test_load_yaml_from_file(rulefile, expected_count):
    rulefile = Path(rule_path(rulefile))
    assert len(load_yaml_from_file(rulefile)) == expected_count