import difflib
import glob
import json
import re
import sys
import unittest
def versioncompare(safe_version, find_version):
safe_version_tup = [int(x) for x in safe_version.split(".")]
find_version_tup = [int(x) for x in find_version.split(".")]
return find_version_tup < safe_version_tup
class TestJsonLint(unittest.TestCase):
@unittest.skipIf(
sys.version_info < (3, 6, 0), "json.dumps force-sorts on python 3.5"
)
def test_json_lint(self):
valid = True
for f in glob.glob("freewvsdb/*.json"):
fp = open(f, encoding="ascii")
orig = fp.read()
fp.close()
tmp = json.loads(orig)
new = json.dumps(tmp, indent=2) + "\n"
if orig != new:
print(f"json {f} not valid")
sys.stdout.writelines(difflib.unified_diff(orig, new))
valid = False
self.assertTrue(valid)
def test_json_values(self):
jconfig = []
for cfile in glob.glob("freewvsdb/*.json"):
with open(cfile, encoding="ascii") as json_file:
jconfig += json.load(json_file)
mkeys = {"name", "url", "safe", "vuln", "detection"}
for item in jconfig:
# check for all mandatory keys
self.assertEqual(
mkeys.intersection(item.keys()),
mkeys,
msg=f"Missing key in {item['name']}",
)
# check we have at least one detection
self.assertTrue(
len(item["detection"]) >= 1, msg=f"No detection in {item['name']}"
)