From b736068ee7b82e05c2ede8bc48ace7ffa4709e29 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Wed, 24 Jul 2024 23:40:11 -0400 Subject: Initial commit. --- utils/rust_monolith_test.py | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 utils/rust_monolith_test.py (limited to 'utils/rust_monolith_test.py') diff --git a/utils/rust_monolith_test.py b/utils/rust_monolith_test.py new file mode 100644 index 0000000..a66eea4 --- /dev/null +++ b/utils/rust_monolith_test.py @@ -0,0 +1,92 @@ +# Chris Xiong 2024 +# License: Expat (MIT) +# +# shitty tests for the Rust Monolith representation + +import os +import sys +import random +import tempfile +import subprocess + +import monolith +import monolith_test +from config import conf + +def make_random_monolith(dir): + filename = "posts.monolith" + m = monolith.Monolith(os.path.join(dir, filename)) + nposts = random.randint(10, 100) + last_time = 0 + posts = [] + for _ in range(0, nposts): + p = monolith_test.randpost(last_time) + last_time = p.date + posts.append(p) + m.append(p) + m.write_index() + m.generate_page_index() + with open(os.path.join(dir, "notekins.conf"), "w"): pass + return posts + +def run_rust_monolith_debug(dir, method, param): + p = subprocess.run([sys.argv[1], method, str(param)], capture_output=True, cwd=dir) + return p.stdout.decode("utf-8") + +def dbg_output(p): + pyout = p.content + '\n' + pyout += str(p.date) + '\n' + for m in p.media: + if m.type == monolith.MediaType.IMAGE: + pyout += f"Image {m.thumbnail} {m.original}\n" + for t in p.tags: + pyout += t + '\n' + return pyout + +def run_tests(dir): + posts = make_random_monolith(dir) + failed = False + for p in posts: + o = run_rust_monolith_debug(dir, "get_post", p.date) + e = dbg_output(p) + if o != e: + print(f"get_post failed, date: {p.date}") + print(f"expected\n{e}\ngot\n{o}") + failed = True + input() + o = run_rust_monolith_debug(dir, "get_post2", p.date) + e = dbg_output(p) + if o != e: + print(f"get_post2 failed, date: {p.date}") + print(f"expected\n{e}\ngot\n{o}") + failed = True + input() + posts_per_page = conf.POSTS_PER_PAGE + for page, ub in enumerate(range(len(posts), 0, -posts_per_page)): + pl = max(ub - posts_per_page, 0) + pr = ub - 1 + if (pr - pl + 1 > posts_per_page): + failed = True + print(f"paging error ???") + input() + e = "" + for x in range(pl, pr + 1): + e += dbg_output(posts[x]) + o = run_rust_monolith_debug(dir, "get_page", page) + if o != e: + print(f"get_page failed, page: {page}") + print(f"expected\n{e}\ngot\n{o}") + failed = True + input() + if not failed: + print(f"test of monolith with {len(posts)} posts passed.") + +def test_rust_monolith(): + if len(sys.argv) < 2: + print("missing path to executable") + for _ in range(0, 100): + with tempfile.TemporaryDirectory() as dir: + run_tests(dir) + +if __name__ == "__main__": + test_rust_monolith() -- cgit v1.2.3