From e803ea0cc5a5db01dfba8de597550d7f3316560b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 10 May 2026 10:33:48 +0200 Subject: (test) Chunked object type and parsing Changelog: Support for `chunked` object type. --- storage.et | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/storage.et b/storage.et index 16b66e2..45e8ce1 100644 --- a/storage.et +++ b/storage.et @@ -625,3 +625,63 @@ test ObjectFormat: send "load-type $r" expect /load-type (.*)/ capture type guard (type == "ondemand") + + # Empty chunked object + local: + send "store-raw EOF" + send "chunked 2\n0\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "chunked") + + send "store blob" + send "test" + send "" + expect /store-done ($refpat)/ capture blob_test_ref + + # Chunked object + local: + send "store-raw EOF" + send "chunked 146\n8\n$blob_test_ref\n$blob_test_ref\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "chunked") + + # Invalid chunked object (missing last newline) + local: + send "store-raw EOF" + send "chunked 145\n8\n$blob_test_ref\n$blob_test_ref" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "unknown chunked") + + # Invalid chunked object (missing size) + local: + send "store-raw EOF" + send "chunked 144\n$blob_test_ref\n$blob_test_ref\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "unknown chunked") + + # Invalid chunked object (invalid ref) + local: + send "store-raw EOF" + send "chunked 78\n8\nabc\n$blob_test_ref\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "unknown chunked") -- cgit v1.2.3 From 5bfe403526ce557ddcffb4ec5c47e977a44b228c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 10 May 2026 11:51:44 +0200 Subject: (test) Dir object type and parsing Changelog: Support for `dir` object type. --- storage.et | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/storage.et b/storage.et index 45e8ce1..ee19e6e 100644 --- a/storage.et +++ b/storage.et @@ -685,3 +685,54 @@ test ObjectFormat: send "load-type $r" expect /load-type (.*)/ capture type guard (type == "unknown chunked") + + # Empty dir object + local: + send "store-raw EOF" + send "dir 0\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "dir") + + # Small dir object + local: + send: + "store dir" + "$blob_test_ref $empty_rec_ref some_file" + "$blob_test_ref $empty_rec_ref some file" + "$blob_test_ref $empty_rec_ref some file\n\twith\n\tnewlines" + "$blob_test_ref $empty_rec_ref special chars !@#\$%^&*()\\/=?+" + "$blob_test_ref $empty_rec_ref last file" + "" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "dir") + + # Invalid dir object + local: + send: + "store dir" + "$blob_test_ref some_file" + "" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "unknown dir") + + # Invalid dir object + local: + send: + "store dir" + "0" + "" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "unknown dir") -- cgit v1.2.3 From 476df4dc490798a13df300e6717386967f715a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 30 May 2026 21:20:14 +0200 Subject: (test) Graph: common ancestors search --- graph.et | 216 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) diff --git a/graph.et b/graph.et index 38ec3c4..059b0cc 100644 --- a/graph.et +++ b/graph.et @@ -1,5 +1,221 @@ module graph + +test FilterCommon: + spawn as p + with p: + send: + "store rec" + "num:i 1" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r1_1 + + send: + "store rec" + "num:i 1" + "PREV:r $r1_1" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r2_1 + + send: + "store rec" + "num:i 1" + "PREV:r $r2_1" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r3_1 + + send: + "store rec" + "num:i 1" + "PREV:r $r3_1" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r4_1 + + # r4_1 + # | + # r3_1 + # | + # r2_1 + # | + # r1_1 + + send "stored-common-ancestors $r2_1 | $r4_1" + expect /stored-common-ancestors-item $r2_1/ + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + + send: + "store rec" + "num:i 2" + "PREV:r $r2_1" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r3_2 + + send: + "store rec" + "num:i 2" + "PREV:r $r3_2" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r4_2 + + # r4_1 r4_2 + # | | + # r3_1 r3_2 + # \ / + # r2_1 + # | + # r1_1 + + send "stored-common-ancestors $r4_1 | $r4_2" + expect /stored-common-ancestors-item $r2_1/ + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + + send: + "store rec" + "num:i 3" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r1_3 + + send: + "store rec" + "num:i 3" + "PREV:r $r1_3" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r2_3 + + # r4_1 r4_2 + # | | + # r3_1 r3_2 + # \ / + # r2_1 r2_3 + # | | + # r1_1 r1_2 + + send "stored-common-ancestors $r4_1 $r4_2 | $r2_3" + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + + send: + "store rec" + "num:i 1" + "PREV:r $r4_1" + "PREV:r $r4_2" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r5_1 + + # r5_1 + # / \ + # r4_1 r4_2 + # | | + # r3_1 r3_2 + # \ / + # r2_1 + # | + # r1_1 + + send "stored-common-ancestors $r5_1 | $r3_2" + expect /stored-common-ancestors-item $r3_2/ + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + + send: + "store rec" + "num:i 2" + "PREV:r $r4_2" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r5_2 + + # r5_1 r5_2 + # / \ / + # r4_1 r4_2 + # | | + # r3_1 r3_2 + # \ / + # r2_1 + # | + # r1_1 + + send "stored-common-ancestors $r5_1 | $r5_2 $r3_1" + expect /stored-common-ancestors-item $r3_1/ + expect /stored-common-ancestors-item $r4_2/ + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + + send: + "store rec" + "num:i 3" + "PREV:r $r2_3" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r3_3 + + send: + "store rec" + "num:i 4" + "PREV:r $r2_3" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r3_4 + + # r4_1 r4_2 + # | | + # r3_1 r3_2 r3_3 r3_4 + # \ / \ / + # r2_1 r2_3 + # | | + # r1_1 r1_2 + + send "stored-common-ancestors $r4_1 $r3_3 | $r4_2 $r3_4" + expect /stored-common-ancestors-item $r2_1/ + expect /stored-common-ancestors-item $r2_3/ + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + + send: + "store rec" + "num:i 1" + "PREV:r $r4_2" + "PREV:r $r3_3" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r5_3 + + send: + "store rec" + "num:i 1" + "PREV:r $r4_1" + "PREV:r $r3_4" + "" + expect /store-done (blake2#[0-9a-f]*)/ capture r5_4 + + # -> r5_3 <--r5_4 + # / / \ | + # r4_1 r4_2 \ | + # | | | | + # r3_1 r3_2 r3_3 r3_4 + # \ / \ / + # r2_1 r2_3 + # | | + # r1_1 r1_2 + + send "stored-common-ancestors $r5_3 | $r5_4" + expect /stored-common-ancestors-item $r2_1/ + expect /stored-common-ancestors-item $r2_3/ + local: + expect /stored-common-ancestors-(.*)/ capture done + guard (done == "done") + + test StoredDifference: spawn as p1 with p1: -- cgit v1.2.3 From 70c630cb27256bda88c7dd39ad6137315383b815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 7 Jun 2026 11:42:13 +0200 Subject: (test) Test: log direct message history changes with removals --- message.et | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/message.et b/message.et index 3609da5..f160cd8 100644 --- a/message.et +++ b/message.et @@ -324,8 +324,10 @@ test DirectMessageSeen: send "identity-info $p2id" to p2 expect /identity-info ref $p2id base ($refpat) owner ($refpat).*/ from p2 capture p2base, p2owner - send "start-server services $services" to p1 - send "start-server services $services" to p2 + for p in [ p1, p2 ]: + send "start-server services $services" to p + send "dm-log-change" to p + expect /dm-log-change-done/ from p expect from p1: /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2 @@ -335,22 +337,29 @@ test DirectMessageSeen: /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1 /peer $peer2_1 id Device1 Owner1/ - for i in [ 1 .. 2 ]: + for i in [ 1 .. 3 ]: send "dm-send-peer $peer1_2 msg_a_$i" to p1 expect /dm-sent from Owner1 new no text msg_a_$i/ from p1 expect /dm-received from Owner1 new yes text msg_a_$i/ from p2 - for i in [ 1 .. 2 ]: + send "dm-send-peer $peer2_1 msg_b_1" to p2 + expect /dm-removed 3/ from p2 + for i in [ 1 .. 3 ]: + expect /dm-received from Owner1 new no text msg_a_$i/ from p2 + expect /dm-sent from Owner2 new no text msg_b_1/ from p2 + expect /dm-received from Owner2 new yes text msg_b_1/ from p1 + + for i in [ 2 .. 3 ]: send "dm-send-peer $peer2_1 msg_b_$i" to p2 expect /dm-sent from Owner2 new no text msg_b_$i/ from p2 expect /dm-received from Owner2 new yes text msg_b_$i/ from p1 send "dm-list-identity $p2owner" to p1 send "dm-list-identity $p1owner" to p2 - for i in [ 1 .. 2 ]: + for i in [ 1 .. 3 ]: expect /dm-list-item from Owner1 new no text msg_a_$i/ from p1 expect /dm-list-item from Owner1 new no text msg_a_$i/ from p2 - for i in [ 1 .. 2 ]: + for i in [ 1 .. 3 ]: expect /dm-list-item from Owner2 new yes text msg_b_$i/ from p1 expect /dm-list-item from Owner2 new no text msg_b_$i/ from p2 for p in [ p1, p2 ]: @@ -364,10 +373,10 @@ test DirectMessageSeen: send "dm-list-identity $p2owner" to p1 send "dm-list-identity $p1owner" to p2 - for i in [1..2]: + for i in [ 1 .. 3 ]: expect /dm-list-item from Owner1 new no text msg_a_$i/ from p1 expect /dm-list-item from Owner1 new no text msg_a_$i/ from p2 - for i in [1..2]: + for i in [ 1 .. 3 ]: expect /dm-list-item from Owner2 new no text msg_b_$i/ from p1 expect /dm-list-item from Owner2 new no text msg_b_$i/ from p2 for p in [ p1, p2 ]: -- cgit v1.2.3