aboutsummaryrefslogtreecommitdiff
path: root/utils/rust_monolith_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/rust_monolith_test.py')
-rw-r--r--utils/rust_monolith_test.py92
1 files changed, 92 insertions, 0 deletions
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()