]> Cypherpunks repositories - keks.git/commitdiff
Check mk-fuzz-inputs output
authorSergey Matveev <stargrave@stargrave.org>
Sun, 15 Dec 2024 16:55:54 +0000 (19:55 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 15 Dec 2024 16:57:37 +0000 (19:57 +0300)
pyac/tests/.gitignore [new file with mode: 0644]
pyac/tests/test_fuzz_inputs.py [new file with mode: 0644]

diff --git a/pyac/tests/.gitignore b/pyac/tests/.gitignore
new file mode 100644 (file)
index 0000000..0ecebdc
--- /dev/null
@@ -0,0 +1 @@
+fuzz-inputs/
diff --git a/pyac/tests/test_fuzz_inputs.py b/pyac/tests/test_fuzz_inputs.py
new file mode 100644 (file)
index 0000000..964a19e
--- /dev/null
@@ -0,0 +1,79 @@
+from datetime import datetime
+from os import listdir
+from os.path import abspath
+from os.path import dirname
+from os.path import join as path_join
+from unittest import skipIf
+from unittest import TestCase
+
+from pyac import Blob
+from pyac import Leapsecs1972
+from pyac import loads
+from pyac import Raw
+from pyac import TagTAI64
+from pyac import TagTAI64N
+from pyac import TagTAI64NA
+from pyac import TAI64Base
+
+
+testsDir = dirname(abspath(__file__))
+fuzzInputs = "fuzz-inputs"
+fuzzInputsExists = False
+try:
+    if len(listdir(path_join(testsDir, fuzzInputs))) > 0:
+        fuzzInputsExists = True
+except FileNotFoundError:
+    pass
+
+
+def readInput(name: str) -> bytes:
+    with open(path_join(testsDir, fuzzInputs, name), "rb") as fd:
+        data = fd.read()
+    ret, tail = loads(data)
+    assert tail == b""
+    return ret
+
+
+class TestFuzzInputs(TestCase):
+    """Check tyac/mk-fuzz-inputs output
+
+    You have to create fuzz-inputs directory in tests and fill it up
+    with mk-fuzz-inputs.
+    """
+    @skipIf(not fuzzInputsExists, "no fuzz-inputs/ found")
+    def runTest(self) -> None:
+        self.assertEqual(readInput("bin-empty"), b"")
+        self.assertEqual(readInput("bin-1234"), b"\x01\x02\x03\x04")
+        self.assertEqual(readInput("str-empty"), "")
+        self.assertEqual(readInput("str-foo"), "foo")
+        self.assertIs(readInput("true"), True)
+        self.assertIs(readInput("false"), False)
+        self.assertIs(readInput("nil"), None)
+        self.assertEqual(readInput("int=0"), 0)
+        self.assertEqual(readInput("int=-1"), -1)
+        self.assertEqual(readInput("int=10"), 10)
+        self.assertEqual(readInput("int=-10"), -10)
+        self.assertEqual(readInput("int=500"), 500)
+        self.assertEqual(readInput("int=-500"), -500)
+        self.assertEqual(readInput("blob-empty"), Blob(l=2, v=b""))
+        self.assertEqual(readInput("blob-f"), Blob(l=2, v=b"f"))
+        self.assertEqual(readInput("blob-fo"), Blob(l=2, v=b"fo"))
+        self.assertEqual(readInput("blob-foo"), Blob(l=2, v=b"foo"))
+        self.assertEqual(readInput("list-empty"), [])
+        self.assertEqual(readInput("list-nil"), [None])
+        self.assertEqual(readInput("list-bool"), [True, False])
+        self.assertEqual(readInput("map-empty"), dict())
+        self.assertEqual(readInput("map-foo"), {"a": [None]})
+        self.assertEqual(readInput("tai-utc0"), datetime(1970, 1, 1, 0, 0))
+        self.assertEqual(readInput("tai-before"), datetime(1969, 12, 31, 23, 59, 49))
+        self.assertEqual(readInput("tai-leap"), Raw(
+            t=TagTAI64, v=bytes.fromhex("40000000586846A4"),
+        ))
+        self.assertEqual(readInput("tai-ns"), Raw(t=TagTAI64N, v=(
+            (TAI64Base + Leapsecs1972 + 1234).to_bytes(8, "big") +
+            (1234).to_bytes(4, "big")
+        )))
+        self.assertEqual(readInput("tai-as"), Raw(t=TagTAI64NA, v=(
+            (TAI64Base + Leapsecs1972 + 1234).to_bytes(8, "big") +
+            2 * (1234).to_bytes(4, "big")
+        )))