|
|
|
@ -63,9 +63,9 @@ static void test_owner_sizes(struct UASYNC* ua) { |
|
|
|
assert(sc_ed25519_sign(owner_priv, msg, n, owner) == SC_OK); |
|
|
|
assert(sc_ed25519_sign(owner_priv, msg, n, owner) == SC_OK); |
|
|
|
assert(member_sync_apply_record(&source, "1001", source.node_id, &rec) & MS_APPLY_CHANGED); |
|
|
|
assert(member_sync_apply_record(&source, "1001", source.node_id, &rec) & MS_APPLY_CHANGED); |
|
|
|
assert(member_sync_verify_local_record(source.topo_sqlite_db, "1001", &rec) == 1); |
|
|
|
assert(member_sync_verify_local_record(source.topo_sqlite_db, "1001", &rec) == 1); |
|
|
|
size_t bytes = sizeof(page); uint64_t next; int more; |
|
|
|
size_t bytes = sizeof(page); merkle_key_t next, after = {{0}}; int more; |
|
|
|
assert(_member_get_page(&source, "1001", merkle_sync_level_prefix(nid, 5), 0, 0, page, &bytes, &next, &more) == 0); |
|
|
|
assert(_member_get_page(&source, "1001", merkle_sync_level_prefix(nid, 5), 0, &after, page, &bytes, &next, &more) == 0); |
|
|
|
assert(next == nid && !more && bytes < MT_PAGE_SIZE); |
|
|
|
assert(member_read64(next.bytes) == nid && !more && bytes < MT_PAGE_SIZE); |
|
|
|
struct member_wire w; size_t used; |
|
|
|
struct member_wire w; size_t used; |
|
|
|
assert(member_decode(page + 2, bytes - 2, &w, &used) == 0 && used == bytes - 2 && !strcmp(w.rec.adm_tags, tags)); |
|
|
|
assert(member_decode(page + 2, bytes - 2, &w, &used) == 0 && used == bytes - 2 && !strcmp(w.rec.adm_tags, tags)); |
|
|
|
assert(!strcmp(w.rec.userinfo, userinfo)); |
|
|
|
assert(!strcmp(w.rec.userinfo, userinfo)); |
|
|
|
@ -144,17 +144,17 @@ int main(void) { |
|
|
|
put(&source, 1); put(&source, 2); |
|
|
|
put(&source, 1); put(&source, 2); |
|
|
|
|
|
|
|
|
|
|
|
uint8_t raw[2049], *page = raw + 1; /* проверяем невыровненный буфер */ |
|
|
|
uint8_t raw[2049], *page = raw + 1; /* проверяем невыровненный буфер */ |
|
|
|
size_t len = 300; uint64_t next; int more; |
|
|
|
size_t len = 300; merkle_key_t next, after = {{0}}; int more; |
|
|
|
assert(_member_get_page(&source, "1001", 0, 0, 0, page, &len, &next, &more) == 0); |
|
|
|
assert(_member_get_page(&source, "1001", 0, 0, &after, page, &len, &next, &more) == 0); |
|
|
|
assert(page[0] == 0 && page[1] == 1 && next == 1 && more == 1 && len <= 300); |
|
|
|
assert(page[0] == 0 && page[1] == 1 && member_read64(next.bytes) == 1 && more == 1 && len <= 300); |
|
|
|
struct member_wire w; size_t used; |
|
|
|
struct member_wire w; size_t used; |
|
|
|
assert(member_decode(page + 2, len - 2, &w, &used) == 0 && w.rec.node_id == 1 && used == len - 2); |
|
|
|
assert(member_decode(page + 2, len - 2, &w, &used) == 0 && w.rec.node_id == 1 && used == len - 2); |
|
|
|
len = 300; |
|
|
|
len = 300; |
|
|
|
assert(_member_get_page(&source, "1001", 0, 1, next, page, &len, &next, &more) == 0 && next == 2 && !more); |
|
|
|
assert(_member_get_page(&source, "1001", 0, 1, &next, page, &len, &next, &more) == 0 && member_read64(next.bytes) == 2 && !more); |
|
|
|
puts("PASS: bounded member pages, canonical integers and unaligned buffers"); |
|
|
|
puts("PASS: bounded member pages, canonical integers and unaligned buffers"); |
|
|
|
|
|
|
|
|
|
|
|
len = 2048; |
|
|
|
len = 2048; |
|
|
|
assert(_member_get_page(&source, "1001", 0, 0, 0, page, &len, &next, &more) == 0 && page[1] == 2 && !more); |
|
|
|
assert(_member_get_page(&source, "1001", 0, 0, &after, page, &len, &next, &more) == 0 && page[1] == 2 && !more); |
|
|
|
assert(_member_apply_items(&target, "1001", 1, page, len - 1) < 0 && member_sync_count(&target, "1001") == 0); |
|
|
|
assert(_member_apply_items(&target, "1001", 1, page, len - 1) < 0 && member_sync_count(&target, "1001") == 0); |
|
|
|
sqlite3* db = target.topo_sqlite_db; |
|
|
|
sqlite3* db = target.topo_sqlite_db; |
|
|
|
assert(sqlite3_exec(db, "CREATE TRIGGER fail_second BEFORE INSERT ON peers_1001 WHEN NEW.node_id=2 " |
|
|
|
assert(sqlite3_exec(db, "CREATE TRIGGER fail_second BEFORE INSERT ON peers_1001 WHEN NEW.node_id=2 " |
|
|
|
@ -171,7 +171,7 @@ int main(void) { |
|
|
|
assert(merkle_sync_recompute_path(&target, "1001", 1) < 0); |
|
|
|
assert(merkle_sync_recompute_path(&target, "1001", 1) < 0); |
|
|
|
root(&target, hash); assert(!memcmp(hash, expected, 32)); |
|
|
|
root(&target, hash); assert(!memcmp(hash, expected, 32)); |
|
|
|
len = 2048; |
|
|
|
len = 2048; |
|
|
|
assert(_member_get_page(&target, "1001", 0, 0, 0, page, &len, &next, &more) < 0); |
|
|
|
assert(_member_get_page(&target, "1001", 0, 0, &after, page, &len, &next, &more) < 0); |
|
|
|
puts("PASS: corrupt BLOB cannot be hashed or serialized"); |
|
|
|
puts("PASS: corrupt BLOB cannot be hashed or serialized"); |
|
|
|
|
|
|
|
|
|
|
|
member_sync_destroy(&target); member_sync_destroy(&source); |
|
|
|
member_sync_destroy(&target); member_sync_destroy(&source); |
|
|
|
|