diff --git a/src/main.c b/src/main.c index 11216141..b5722935 100644 --- a/src/main.c +++ b/src/main.c @@ -213,7 +213,7 @@ static int _tf_command_import(const char* file, int argc, char* argv[]) { sqlite3_open(args.db_path, &db); } - tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, db, NULL); + tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, db); if (extra_count) { for (int i = 0; i < extra_count; i++) @@ -280,7 +280,7 @@ static int _tf_command_export(const char* file, int argc, char* argv[]) { sqlite3_open(args.db_path, &db); } - tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, db, NULL); + tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, db); if (extra_count) { for (int i = 0; i < extra_count; i++) @@ -333,7 +333,6 @@ typedef struct tf_run_args_t { int http_port; int https_port; const char* db_path; - const char* secrets_path; int count; const char* args; bool help; @@ -356,18 +355,13 @@ static int _tf_run_task(const tf_run_args_t* args, int index) tf_task_set_https_port(task, args->https_port ? args->https_port + index : 0); tf_task_set_args(task, args->args); const char* db_path = args->db_path; - const char* secrets_path = args->secrets_path; char db_path_buffer[256]; - char secrets_path_buffer[256]; if (index) { snprintf(db_path_buffer, sizeof(db_path_buffer), "%s.%d", args->db_path, index); db_path = db_path_buffer; - snprintf(secrets_path_buffer, sizeof(secrets_path_buffer), "%s.%d", args->secrets_path, index); - secrets_path = secrets_path_buffer; } tf_task_set_db_path(task, db_path); - tf_task_set_secrets_path(task, secrets_path); tf_task_activate(task); if (args->ssb_port) { @@ -396,7 +390,6 @@ static int _tf_command_run(const char* file, int argc, char* argv[]) { "http-port", 'p', offsetof(tf_run_args_t, http_port), NULL, XOPT_TYPE_INT, NULL, "Port on which to run Tilde Friends web server (default: 12345)." }, { "https-port", 'q', offsetof(tf_run_args_t, https_port), NULL, XOPT_TYPE_INT, NULL, "Port on which to run secure Tilde Friends web server (default: 12346)." }, { "db-path", 'd', offsetof(tf_run_args_t, db_path), NULL, XOPT_TYPE_STRING, NULL, "Sqlite database path (default: db.sqlite)." }, - { "secrets-path", 'i', offsetof(tf_run_args_t, secrets_path), NULL, XOPT_TYPE_STRING, NULL, "Secrets/identity path." }, { "count", 'n', offsetof(tf_run_args_t, count), NULL, XOPT_TYPE_INT, NULL, "Number of instances to run." }, { "args", 'a', offsetof(tf_run_args_t, args), NULL, XOPT_TYPE_STRING, NULL, "Arguments of the form key=value,foo=bar,verbose=true." }, { "help", 'h', offsetof(tf_run_args_t, help), NULL, XOPT_TYPE_BOOL, NULL, "Shows this help message." }, @@ -411,7 +404,6 @@ static int _tf_command_run(const char* file, int argc, char* argv[]) .https_port = 12346, .ssb_port = 8009, .db_path = "db.sqlite", - .secrets_path = "/.config/tildefriends/secret", }; const char** extras = NULL; int extra_count = 0; @@ -555,7 +547,7 @@ static int _tf_command_post(const char* file, int argc, char* argv[]) return 2; } - tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, NULL, NULL); + tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, NULL); tf_ssb_broadcast_listener_start(ssb, false); tf_ssb_append_post(ssb, args.message); tf_ssb_destroy(ssb); diff --git a/src/ssb.c b/src/ssb.c index 93bcecbe..96bf5e47 100644 --- a/src/ssb.c +++ b/src/ssb.c @@ -39,8 +39,6 @@ const uint8_t k_ssb_network[] = { 0x08, 0x39, 0xb7, 0x55, 0x84, 0x5a, 0x9f, 0xfb }; -const char* k_secrets_path = "/.config/tildefriends/secret"; - typedef enum { k_tf_ssb_state_invalid, k_tf_ssb_state_connected, @@ -138,8 +136,6 @@ typedef struct _tf_ssb_t sqlite3* db; bool owns_db; - const char* secrets_path; - uv_loop_t own_loop; uv_loop_t* loop; uv_udp_t broadcast_listener; @@ -1367,7 +1363,6 @@ void _tf_ssb_connection_destroy(tf_ssb_connection_t* connection, const char* rea } while (connection->requests) { - printf("%d %d\n", connection->requests_count, connection->requests->request_number); _tf_ssb_connection_remove_request(connection, connection->requests->request_number); } if (!JS_IsUndefined(connection->object)) @@ -1551,139 +1546,22 @@ static void _tf_ssb_connection_on_connect(uv_connect_t* connect, int status) } } -static bool _tf_ssb_load_keys(tf_ssb_t* ssb) +static void _load_keys_callback(const char* identity, void* user_data) { - const char* home = getenv("HOME"); - if (!home) + tf_ssb_t* ssb = user_data; + if (*ssb->pub) { - return false; + return; } - bool result = false; - char* json = NULL; - size_t path_size = strlen(home) + strlen(ssb->secrets_path) + 1; - char* path = tf_malloc(path_size); - snprintf(path, path_size, "%s%s", home, ssb->secrets_path); - - FILE* file = fopen(path, "rb"); - if (!file) - { - printf("Failed to open %s: %s.\n", path, strerror(errno)); - goto failed; - } - - if (fseek(file, 0, SEEK_END) != 0) - { - printf("Failed to seek %s: %s\n.", path, strerror(errno)); - goto failed; - } - long len = ftell(file); - if (len < 0 || - fseek(file, 0, SEEK_SET) != 0) - { - printf("Failed to seek %s: %s\n.", path, strerror(errno)); - goto failed; - } - - json = tf_malloc(len + 1); - if (fread(json, 1, len, file) != (size_t)len) - { - printf("Failed to read %s: %s\n.", path, strerror(errno)); - goto failed; - } - - json[len] = '\0'; - - JSContext* context = ssb->context; - JSValue root = JS_ParseJSON(context, (const char*)json, len, NULL); - - JSValue pubvalue = JS_GetPropertyStr(context, root, "public"); - size_t pubstrlen = 0; - const char* pubstr = JS_ToCStringLen(context, &pubstrlen, pubvalue); - size_t privstrlen = 0; - JSValue privvalue = JS_GetPropertyStr(context, root, "private"); - const char* privstr = JS_ToCStringLen(context, &privstrlen, privvalue); - - if (pubstr && privstr) - { - result = - base64c_decode((const uint8_t*)pubstr, pubstrlen - strlen(".ed25519"), ssb->pub, sizeof(ssb->pub)) != 0 && - base64c_decode((const uint8_t*)privstr, privstrlen - strlen(".ed25519"), ssb->priv, sizeof(ssb->priv)) != 0; - } - - JS_FreeCString(context, pubstr); - JS_FreeCString(context, privstr); - - JS_FreeValue(context, pubvalue); - JS_FreeValue(context, privvalue); - - JS_FreeValue(context, root); - -failed: - if (json) - { - tf_free(json); - } - if (file) - { - fclose(file); - } - if (path) - { - tf_free(path); - } - return result; + tf_ssb_id_str_to_bin(ssb->pub, identity); + tf_ssb_db_identity_get_private_key(ssb, ":admin", identity, ssb->priv, sizeof(ssb->priv)); } -static bool _tf_ssb_save_keys(tf_ssb_t* ssb) +static bool _tf_ssb_load_keys(tf_ssb_t* ssb) { - bool result = false; - char private_base64[crypto_sign_SECRETKEYBYTES * 2]; - char public_base64[crypto_sign_PUBLICKEYBYTES * 2]; - char private[crypto_sign_SECRETKEYBYTES * 2 + 16]; - char public[crypto_sign_PUBLICKEYBYTES * 2 + 16]; - char id[crypto_sign_PUBLICKEYBYTES * 2 + 16]; - base64c_encode(ssb->pub, sizeof(ssb->pub), (uint8_t*)public_base64, sizeof(public_base64)); - base64c_encode(ssb->priv, sizeof(ssb->priv), (uint8_t*)private_base64, sizeof(private_base64)); - - snprintf(private, sizeof(private), "%s.ed25519", private_base64); - snprintf(public, sizeof(public), "%s.ed25519", public_base64); - snprintf(id, sizeof(id), "@%s.ed25519", public_base64); - - const char* home = getenv("HOME"); - if (!home) - { - return false; - } - - size_t path_size = strlen(home) + strlen(ssb->secrets_path) + 1; - char* path = tf_malloc(path_size); - snprintf(path, path_size, "%s%s", home, ssb->secrets_path); - - JSContext* context = ssb->context; - JSValue root = JS_NewObject(context); - JS_SetPropertyStr(context, root, "curve", JS_NewString(context, "ed25519")); - JS_SetPropertyStr(context, root, "public", JS_NewString(context, public)); - JS_SetPropertyStr(context, root, "private", JS_NewString(context, private)); - JS_SetPropertyStr(context, root, "id", JS_NewString(context, id)); - - JSValue jsonval = JS_JSONStringify(context, root, JS_NULL, JS_NewInt32(context, 2)); - size_t len = 0; - const char* json = JS_ToCStringLen(context, &len, jsonval); - - FILE* file = fopen(path, "wb"); - if (file) - { - result = fwrite(json, 1, len, file) == len; - fclose(file); - } - - JS_FreeCString(context, json); - JS_FreeValue(context, jsonval); - JS_FreeValue(context, root); - - tf_free(path); - return result; + tf_ssb_db_identity_visit(ssb, ":admin", _load_keys_callback, ssb); + return *ssb->pub != '\0' && *ssb->priv != '\0'; } static void _tf_ssb_trace_timer(uv_timer_t* timer) @@ -1738,11 +1616,10 @@ void tf_ssb_get_stats(tf_ssb_t* ssb, tf_ssb_stats_t* out_stats) ssb->rpc_out = 0; } -tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const char* secrets_path) +tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db) { tf_ssb_t* ssb = tf_malloc(sizeof(tf_ssb_t)); memset(ssb, 0, sizeof(*ssb)); - ssb->secrets_path = secrets_path ? secrets_path : k_secrets_path; if (context) { ssb->context = context; @@ -1805,8 +1682,7 @@ tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const if (!_tf_ssb_load_keys(ssb)) { printf("Generating a new keypair.\n"); - tf_ssb_generate_keys(ssb); - _tf_ssb_save_keys(ssb); + tf_ssb_db_identity_create(ssb, ":admin", ssb->pub, ssb->priv); } ssb->connections_tracker = tf_ssb_connections_create(ssb); diff --git a/src/ssb.db.c b/src/ssb.db.c index 8b6a6f24..f494912e 100644 --- a/src/ssb.db.c +++ b/src/ssb.db.c @@ -815,6 +815,24 @@ int tf_ssb_db_identity_get_count_for_user(tf_ssb_t* ssb, const char* user) return count; } +bool tf_ssb_db_identity_create(tf_ssb_t* ssb, const char* user, uint8_t* out_public_key, uint8_t* out_private_key) +{ + int count = tf_ssb_db_identity_get_count_for_user(ssb, user); + if (count < 16) + { + char public[512]; + char private[512]; + tf_ssb_generate_keys_buffer(public, sizeof(public), private, sizeof(private)); + if (tf_ssb_db_identity_add(ssb, user, public, private)) + { + tf_ssb_id_str_to_bin(out_public_key, public); + tf_ssb_id_str_to_bin(out_private_key, private); + return true; + } + } + return false; +} + bool tf_ssb_db_identity_add(tf_ssb_t* ssb, const char* user, const char* public_key, const char* private_key) { bool added = false; diff --git a/src/ssb.db.h b/src/ssb.db.h index c89c3fc2..cb5a5484 100644 --- a/src/ssb.db.h +++ b/src/ssb.db.h @@ -19,6 +19,7 @@ typedef struct sqlite3 sqlite3; bool tf_ssb_db_check(sqlite3* db, const char* author); int tf_ssb_db_identity_get_count_for_user(tf_ssb_t* ssb, const char* user); +bool tf_ssb_db_identity_create(tf_ssb_t* ssb, const char* user, uint8_t* out_public_key, uint8_t* out_private_key); bool tf_ssb_db_identity_add(tf_ssb_t* ssb, const char* user, const char* public_key, const char* private_key); void tf_ssb_db_identity_visit(tf_ssb_t* ssb, const char* user, void (*callback)(const char* identity, void* user_data), void* user_data); void tf_ssb_db_identity_visit_all(tf_ssb_t* ssb, void (*callback)(const char* identity, void* user_data), void* user_data); diff --git a/src/ssb.h b/src/ssb.h index 6e08f88c..86cc648d 100644 --- a/src/ssb.h +++ b/src/ssb.h @@ -57,7 +57,7 @@ typedef struct _tf_ssb_stats_t } callbacks; } tf_ssb_stats_t; -tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const char* secrets_path); +tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db); void tf_ssb_destroy(tf_ssb_t* ssb); sqlite3* tf_ssb_get_db(tf_ssb_t* ssb); @@ -71,11 +71,13 @@ tf_trace_t* tf_ssb_get_trace(tf_ssb_t* ssb); JSContext* tf_ssb_get_context(tf_ssb_t* ssb); +/* TODO: Delete. */ +void tf_ssb_append_message(tf_ssb_t* ssb, JSValue message); +void tf_ssb_append_post(tf_ssb_t* ssb, const char* text); + void tf_ssb_broadcast_listener_start(tf_ssb_t* ssb, bool linger); void tf_ssb_run(tf_ssb_t* ssb); -void tf_ssb_append_message(tf_ssb_t* ssb, JSValue message); void tf_ssb_append_message_with_keys(tf_ssb_t* ssb, const char* author, const uint8_t* private_key, JSValue message); -void tf_ssb_append_post(tf_ssb_t* ssb, const char* text); bool tf_ssb_whoami(tf_ssb_t* ssb, char* out_id, size_t out_id_size); void tf_ssb_visit_broadcasts(tf_ssb_t* ssb, void (*callback)(const struct sockaddr_in* addr, const uint8_t* pub, void* user_data), void* user_data); diff --git a/src/ssb.tests.c b/src/ssb.tests.c index de2a4e07..a2eb9c14 100644 --- a/src/ssb.tests.c +++ b/src/ssb.tests.c @@ -121,9 +121,9 @@ void tf_ssb_test_ssb(const tf_test_options_t* options) uv_loop_t loop = { 0 }; uv_loop_init(&loop); - tf_ssb_t* ssb0 = tf_ssb_create(&loop, NULL, db0, NULL); + tf_ssb_t* ssb0 = tf_ssb_create(&loop, NULL, db0); tf_ssb_register(tf_ssb_get_context(ssb0), ssb0); - tf_ssb_t* ssb1 = tf_ssb_create(&loop, NULL, db1, NULL); + tf_ssb_t* ssb1 = tf_ssb_create(&loop, NULL, db1); tf_ssb_register(tf_ssb_get_context(ssb1), ssb1); uv_idle_t idle0 = { .data = ssb0 }; @@ -251,13 +251,13 @@ void tf_ssb_test_following(const tf_test_options_t* options) uv_loop_t loop = { 0 }; uv_loop_init(&loop); - tf_ssb_t* ssb0 = tf_ssb_create(&loop, NULL, db0, NULL); + tf_ssb_t* ssb0 = tf_ssb_create(&loop, NULL, db0); tf_ssb_generate_keys(ssb0); - tf_ssb_t* ssb1 = tf_ssb_create(&loop, NULL, db0, NULL); + tf_ssb_t* ssb1 = tf_ssb_create(&loop, NULL, db0); tf_ssb_generate_keys(ssb1); - tf_ssb_t* ssb2 = tf_ssb_create(&loop, NULL, db0, NULL); + tf_ssb_t* ssb2 = tf_ssb_create(&loop, NULL, db0); tf_ssb_generate_keys(ssb2); char id0[k_id_base64_len] = { 0 }; diff --git a/src/task.c b/src/task.c index 2da537af..2c553001 100644 --- a/src/task.c +++ b/src/task.c @@ -121,7 +121,6 @@ typedef struct _tf_task_t int _http_port; int _https_port; char _db_path[256]; - char _secrets_path[256]; const char* _args; promise_stack_t* _promise_stacks; @@ -851,7 +850,6 @@ const char* _tf_task_get_message_type(tf_task_message_t type) case kInvokeExport: return "kInvokeExport"; case kReleaseExport: return "kReleaseExport"; case kReleaseImport: return "kReleaseImport"; - case kSetRequires: return "kSetRequires"; case kActivate: return "kActivate"; case kExecute: return "kExecute"; case kKill: return "kKill"; @@ -1565,7 +1563,7 @@ void tf_task_activate(tf_task_t* task) JS_SetPropertyStr(context, global, "TlsContext", tf_tls_context_register(context)); tf_file_register(context); - task->_ssb = tf_ssb_create(&task->_loop, task->_context, task->_db, *task->_secrets_path ? task->_secrets_path : NULL); + task->_ssb = tf_ssb_create(&task->_loop, task->_context, task->_db); tf_ssb_set_trace(task->_ssb, task->_trace); tf_ssb_register(context, task->_ssb); @@ -1786,11 +1784,6 @@ void tf_task_set_db_path(tf_task_t* task, const char* db_path) snprintf(task->_db_path, sizeof(task->_db_path), "%s", db_path); } -void tf_task_set_secrets_path(tf_task_t* task, const char* secrets_path) -{ - snprintf(task->_secrets_path, sizeof(task->_secrets_path), "%s", secrets_path); -} - void tf_task_set_args(tf_task_t* task, const char* args) { task->_args = args; diff --git a/src/task.h b/src/task.h index 94bf5e37..d0207e11 100644 --- a/src/task.h +++ b/src/task.h @@ -24,7 +24,6 @@ typedef enum _tf_task_message_t { kInvokeExport, kReleaseExport, kReleaseImport, - kSetRequires, kActivate, kExecute, kKill, @@ -42,7 +41,6 @@ void tf_task_set_ssb_port(tf_task_t* task, int port); void tf_task_set_http_port(tf_task_t* task, int port); void tf_task_set_https_port(tf_task_t* task, int port); void tf_task_set_db_path(tf_task_t* task, const char* path); -void tf_task_set_secrets_path(tf_task_t* task, const char* path); void tf_task_set_args(tf_task_t* task, const char* args); void tf_task_activate(tf_task_t* task); void tf_task_run(tf_task_t* task); diff --git a/src/taskstub.js.c b/src/taskstub.js.c index 0844dfbd..ba1ed490 100644 --- a/src/taskstub.js.c +++ b/src/taskstub.js.c @@ -52,7 +52,6 @@ static JSValue _taskstub_activate(JSContext* context, JSValueConst this_val, int static JSValue _taskstub_execute(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); static JSValue _taskstub_setImports(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); static JSValue _taskstub_getExports(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); -static JSValue _taskstub_setRequires(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); static JSValue _taskstub_kill(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); static JSValue _taskstub_get_on_exit(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); static JSValue _taskstub_set_on_exit(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); @@ -113,7 +112,6 @@ static JSValue _taskstub_create(JSContext* context, JSValueConst this_val, int a JS_SetPropertyStr(context, taskObject, "execute", JS_NewCFunction(context, _taskstub_execute, "execute", 1)); JS_SetPropertyStr(context, taskObject, "setImports", JS_NewCFunction(context, _taskstub_setImports, "setImports", 1)); JS_SetPropertyStr(context, taskObject, "getExports", JS_NewCFunction(context, _taskstub_getExports, "getExports", 0)); - JS_SetPropertyStr(context, taskObject, "setRequires", JS_NewCFunction(context, _taskstub_setRequires, "setRequires", 1)); JS_SetPropertyStr(context, taskObject, "kill", JS_NewCFunction(context, _taskstub_kill, "kill", 0)); JS_SetPropertyStr(context, taskObject, "loadFile", JS_NewCFunction(context, _taskstub_loadFile, "loadFile", 1)); @@ -328,17 +326,6 @@ static JSValue _taskstub_setImports(JSContext* context, JSValueConst this_val, i return JS_UNDEFINED; } -static JSValue _taskstub_setRequires(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) -{ - tf_taskstub_t* stub = JS_GetOpaque(this_val, _classId); - void* buffer; - size_t size; - tf_serialize_store(tf_task_get(context), stub, &buffer, &size, argv[0]); - tf_packetstream_send(stub->_stream, kSetRequires, (char*)buffer, size); - tf_free(buffer); - return JS_UNDEFINED; -} - static JSValue _taskstub_loadFile(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) { tf_taskstub_t* stub = JS_GetOpaque(this_val, _classId); diff --git a/src/tests.c b/src/tests.c index 448baa6d..4f6e4908 100644 --- a/src/tests.c +++ b/src/tests.c @@ -22,7 +22,7 @@ static void _test_nop(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); (void)result; @@ -53,7 +53,7 @@ static void _test_child(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); (void)result; @@ -95,7 +95,7 @@ static void _test_promise(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); (void)result; @@ -141,7 +141,7 @@ static void _test_promise_remote_throw(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); (void)result; @@ -189,7 +189,7 @@ static void _test_promise_remote_reject(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); (void)result; @@ -235,7 +235,7 @@ static void _test_database(const tf_test_options_t* options) unlink("out/testdb.sqlite"); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=out/testdb.sqlite -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: --db-path=out/testdb.sqlite -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -256,7 +256,7 @@ static void _test_this(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -289,7 +289,7 @@ static void _test_await(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -325,14 +325,14 @@ static void _test_import(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); assert(WIFEXITED(result)); assert(WEXITSTATUS(result) == 0); - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/bad.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/bad.js", options->exe_path); printf("%s\n", command); result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -355,7 +355,7 @@ static void _test_exit(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -375,7 +375,7 @@ static void _test_icu(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -427,7 +427,7 @@ static void _test_uint8array(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -453,14 +453,14 @@ static void _test_socket(const tf_test_options_t* options) "print('noDelay', s.noDelay);\n" "s.noDelay = true;\n" "s.connect('www.unprompted.com', 80).then(function() {\n" - " print('connected', s.isConnected);\n" + " print('connected', 'www.unprompted.com', 80, s.isConnected);\n" " print(s.peerName);\n" " s.read(function(data) {\n" " print('read', data ? data.length : null);\n" " });\n" " s.write('GET / HTTP/1.0\\r\\n\\r\\n');\n" - "}).then(function() {\n" - " print('closed');\n" + "}).then(function(e) {\n" + " print('closed 1');\n" "});\n" "\n" "var s2 = new Socket();\n" @@ -473,7 +473,7 @@ static void _test_socket(const tf_test_options_t* options) "print('noDelay', s2.noDelay);\n" "s2.noDelay = true;\n" "s2.connect('www.unprompted.com', 443).then(function() {\n" - " print('connected');\n" + " print('connected', 'www.unprompted.com', 443);\n" " s2.read(function(data) {\n" " print('read', data ? data.length : null);\n" " });\n" @@ -498,7 +498,7 @@ static void _test_socket(const tf_test_options_t* options) "print('noDelay', s3.noDelay);\n" "s3.noDelay = true;\n" "s3.connect('0.0.0.0', 443).then(function() {\n" - " print('connected');\n" + " print('connected', '0.0.0.0', 443);\n" " s3.read(function(data) {\n" " print('read', data ? data.length : null);\n" " });\n" @@ -516,7 +516,7 @@ static void _test_socket(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -575,7 +575,7 @@ static void _test_file(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -607,7 +607,7 @@ static void _test_sign(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result)); @@ -630,7 +630,7 @@ static void _test_b64(const tf_test_options_t* options) fclose(file); char command[256]; - snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", options->exe_path); + snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=:memory: -s out/test.js", options->exe_path); printf("%s\n", command); int result = system(command); printf("returned %d\n", WEXITSTATUS(result));