# 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()