from distutils.version import LooseVersion
from pathlib import Path
from tempfile import TemporaryDirectory
from common_helper_yara.common import get_yara_version
from common_helper_yara.yara_compile import compile_rules
from common_helper_yara.yara_scan import scan
DIR_OF_CURRENT_FILE = Path(__file__).parent
COMPILED_FLAG = get_yara_version() >= LooseVersion('3.9')
def test_compile_and_scan():
with TemporaryDirectory(prefix="common_helper_yara_test_") as tmp_dir:
input_dir = DIR_OF_CURRENT_FILE / 'data/rules'
signature_file = Path(tmp_dir) / 'test.yc'
data_files = DIR_OF_CURRENT_FILE / 'data/data_files'
compile_rules(input_dir, signature_file, external_variables={'test_flag': 'true'})
assert signature_file.exists(), "file not created"
result = scan(signature_file, data_files, recursive=True, compiled=COMPILED_FLAG)
assert 'lighttpd' in result.keys(), "at least one match missing"
assert 'lighttpd_simple' in result.keys(), "at least one match missing"