|
|
@ -5,30 +5,67 @@ import os |
|
|
|
import logging |
|
|
|
import csv |
|
|
|
|
|
|
|
TESTS_DIR = 'tests' |
|
|
|
TESTS_DIR = "tests" |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
|
|
DB = database.Database() |
|
|
|
log = logging.getLogger('tests') |
|
|
|
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: |
|
|
|
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.info("Testing %s (%s)", test['url'], test['comment']) |
|
|
|
log.debug("Testing %s (%s)", test["url"], test["comment"]) |
|
|
|
count_ent += 1 |
|
|
|
passed = True |
|
|
|
|
|
|
|
for allow in test['allow'].split(':'): |
|
|
|
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(':'): |
|
|
|
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, |
|
|
|
) |