72 lines
2.2 KiB
Python
Executable file
72 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import database
|
|
import os
|
|
import logging
|
|
import csv
|
|
|
|
TESTS_DIR = "tests"
|
|
|
|
if __name__ == "__main__":
|
|
|
|
DB = database.Database()
|
|
log = logging.getLogger("tests")
|
|
|
|
for filename in os.listdir(TESTS_DIR):
|
|
if not filename.lower().endswith(".csv"):
|
|
continue
|
|
log.info("")
|
|
log.info("Running tests from %s", filename)
|
|
path = os.path.join(TESTS_DIR, filename)
|
|
with open(path, "rt") as fdesc:
|
|
count_ent = 0
|
|
count_all = 0
|
|
count_den = 0
|
|
pass_ent = 0
|
|
pass_all = 0
|
|
pass_den = 0
|
|
reader = csv.DictReader(fdesc)
|
|
for test in reader:
|
|
log.debug("Testing %s (%s)", test["url"], test["comment"])
|
|
count_ent += 1
|
|
passed = True
|
|
|
|
for allow in test["allow"].split(":"):
|
|
if not allow:
|
|
continue
|
|
count_all += 1
|
|
if any(DB.get_domain(allow)):
|
|
log.error("False positive: %s", allow)
|
|
passed = False
|
|
else:
|
|
pass_all += 1
|
|
|
|
for deny in test["deny"].split(":"):
|
|
if not deny:
|
|
continue
|
|
count_den += 1
|
|
if not any(DB.get_domain(deny)):
|
|
log.error("False negative: %s", deny)
|
|
passed = False
|
|
else:
|
|
pass_den += 1
|
|
|
|
if passed:
|
|
pass_ent += 1
|
|
perc_ent = (100 * pass_ent / count_ent) if count_ent else 100
|
|
perc_all = (100 * pass_all / count_all) if count_all else 100
|
|
perc_den = (100 * pass_den / count_den) if count_den else 100
|
|
log.info(
|
|
"%s: Entries %d/%d (%.2f%%) | Allow %d/%d (%.2f%%) | Deny %d/%d (%.2f%%)",
|
|
filename,
|
|
pass_ent,
|
|
count_ent,
|
|
perc_ent,
|
|
pass_all,
|
|
count_all,
|
|
perc_all,
|
|
pass_den,
|
|
count_den,
|
|
perc_den,
|
|
)
|