From: Sergey Matveev Date: Sun, 15 Dec 2024 16:55:54 +0000 (+0300) Subject: Check mk-fuzz-inputs output X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2d356f8fe8d43b87c09988faed9ff297767792e04939fd69669df82e9db3213f;p=keks.git Check mk-fuzz-inputs output --- diff --git a/pyac/tests/.gitignore b/pyac/tests/.gitignore new file mode 100644 index 0000000..0ecebdc --- /dev/null +++ b/pyac/tests/.gitignore @@ -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 index 0000000..964a19e --- /dev/null +++ b/pyac/tests/test_fuzz_inputs.py @@ -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") + )))