ssb: Exercise at least calling adding/removing blocks in a test.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 9m12s

This commit is contained in:
2025-11-27 16:06:33 -05:00
parent ddc4603f13
commit eecdbf6852
5 changed files with 93 additions and 12 deletions

View File

@@ -1851,4 +1851,70 @@ void tf_ssb_test_following_perf(const tf_test_options_t* options)
uv_run(&loop, UV_RUN_DEFAULT);
uv_loop_close(&loop);
}
static void _store_callback(const char* id, bool verified, bool is_new, void* user_data)
{
tf_string_set(user_data, k_id_base64_len, id);
}
void tf_ssb_test_blocks(const tf_test_options_t* options)
{
uv_loop_t loop = { 0 };
uv_loop_init(&loop);
tf_printf("Testing blocks.\n");
unlink("out/test_db0.sqlite");
tf_ssb_t* ssb = tf_ssb_create(&loop, NULL, "file:out/test_db0.sqlite", NULL);
tf_ssb_generate_keys(ssb);
uint8_t priv[512] = { 0 };
tf_ssb_get_private_key(ssb, priv, sizeof(priv));
char id[k_id_base64_len] = { 0 };
tf_ssb_whoami(ssb, id, sizeof(id));
tf_printf("ID %s\n", id);
char blob_id[k_id_base64_len] = { 0 };
const char* k_blob = "Hello, blob!";
bool blob_stored = false;
tf_ssb_add_blob_stored_callback(ssb, _blob_stored, NULL, &blob_stored);
tf_ssb_db_blob_store(ssb, (const uint8_t*)k_blob, strlen(k_blob), blob_id, sizeof(blob_id), NULL);
tf_ssb_notify_blob_stored(ssb, blob_id);
tf_ssb_remove_blob_stored_callback(ssb, _blob_stored, &blob_stored);
assert(blob_stored);
JSContext* context = tf_ssb_get_context(ssb);
JSValue obj = JS_NewObject(context);
JS_SetPropertyStr(context, obj, "type", JS_NewString(context, "post"));
JS_SetPropertyStr(context, obj, "text", JS_NewString(context, "First post."));
JSValue mentions = JS_NewArray(context);
JSValue mention = JS_NewObject(context);
JS_SetPropertyStr(context, mention, "link", JS_NewString(context, blob_id));
JS_SetPropertyUint32(context, mentions, 0, mention);
JS_SetPropertyStr(context, obj, "mentions", mentions);
JSValue signed_message = tf_ssb_sign_message(ssb, id, priv, obj, NULL, 0);
char message_id[k_id_base64_len] = { 0 };
tf_ssb_verify_strip_and_store_message(ssb, signed_message, _store_callback, message_id);
JS_FreeValue(context, signed_message);
while (!*message_id)
{
uv_run(tf_ssb_get_loop(ssb), UV_RUN_ONCE);
}
JS_FreeValue(context, obj);
sqlite3* db = tf_ssb_acquire_db_writer(ssb);
tf_ssb_db_add_block(db, message_id);
tf_ssb_db_add_block(db, blob_id);
tf_ssb_db_add_block(db, id);
tf_ssb_db_remove_block(db, blob_id);
tf_ssb_db_remove_block(db, message_id);
tf_ssb_db_remove_block(db, id);
tf_ssb_release_db_writer(ssb, db);
tf_ssb_destroy(ssb);
uv_run(&loop, UV_RUN_DEFAULT);
uv_loop_close(&loop);
}
#endif