From: Markus Valentin Date: Tue, 9 Dec 2025 14:11:23 +0000 (+0100) Subject: lib-lua: Add "set_event" and "get_event" function for dlua http_request X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b98b7e1189769a0c01938c57d30d57187b497ab8;p=thirdparty%2Fdovecot%2Fcore.git lib-lua: Add "set_event" and "get_event" function for dlua http_request --- diff --git a/src/lib-lua/dlua-dovecot-http.c b/src/lib-lua/dlua-dovecot-http.c index fe793f7ef1..38e0de648b 100644 --- a/src/lib-lua/dlua-dovecot-http.c +++ b/src/lib-lua/dlua-dovecot-http.c @@ -126,11 +126,35 @@ static int dlua_http_request_submit(lua_State *L) return 1; } +static int dlua_http_request_set_event(lua_State *L) +{ + DLUA_REQUIRE_ARGS(L, 2); + + struct http_client_request *req = dlua_check_http_request(L, 1); + struct event *event = dlua_check_event(L, 2); + + http_client_request_set_event(req, event); + + return 0; +} + +static int dlua_http_request_get_event(lua_State *L) +{ + DLUA_REQUIRE_ARGS(L, 1); + + struct http_client_request *req = dlua_check_http_request(L, 1); + dlua_push_event(L, req->event); + + return 1; +} + static luaL_Reg lua_dovecot_http_request_methods[] = { { "add_header", dlua_http_request_add_header }, { "remove_header", dlua_http_request_remove_header }, { "set_payload", dlua_http_request_set_payload }, { "submit", dlua_http_request_submit }, + { "set_event", dlua_http_request_set_event }, + { "get_event", dlua_http_request_get_event }, { NULL, NULL } }; diff --git a/src/lib-lua/test-lua-http-client.c b/src/lib-lua/test-lua-http-client.c index 29239cbca1..f925040dcd 100644 --- a/src/lib-lua/test-lua-http-client.c +++ b/src/lib-lua/test-lua-http-client.c @@ -430,6 +430,69 @@ static void test_bad_settings(void) test_end(); } +static void test_set_event(void) +{ + struct dlua_script *script; + const char *error; + + test_begin("set event"); + + if (dlua_script_create_file( + TEST_LUA_SCRIPT_DIR "/test-lua-http-client.lua", + &script, common_event, &error) < 0) + i_fatal("dlua_script_create_file() failed: %s", error); + + + dlua_dovecot_register(script); + if (dlua_script_init(script, &error) < 0) + i_fatal("dlua_script_init() failed: %s", error); + + struct event *event = event_create(NULL); + event_set_forced_debug(event, TRUE); + dlua_push_event(script->L, event); + lua_pushstring(script->L, "https://localhost"); + test_assert(dlua_pcall(script->L, "test_http_request_set_event", 2, 1, &error) == 1); + struct event *child_event = dlua_check_event(script->L, 1); + test_assert(event_get_parent(child_event) == event); + test_assert(event_get_parent(child_event) != common_event); + event_unref(&event); + dlua_script_unref(&script); + + test_end(); +} + +static void test_set_no_event(void) +{ + struct dlua_script *script; + const char *error; + + test_begin("set no event"); + + if (dlua_script_create_file( + TEST_LUA_SCRIPT_DIR "/test-lua-http-client.lua", + &script, common_event, &error) < 0) + i_fatal("dlua_script_create_file() failed: %s", error); + + + dlua_dovecot_register(script); + if (dlua_script_init(script, &error) < 0) + i_fatal("dlua_script_init() failed: %s", error); + + struct event *event = event_create(NULL); + event_set_forced_debug(event, TRUE); + dlua_push_event(script->L, event); + lua_pushstring(script->L, "https://localhost"); + test_assert(dlua_pcall(script->L, "test_http_request_set_no_event", 2, 1, &error) == 1); + struct event *child_event = dlua_check_event(script->L, 1); + /* if request:set_event() is not used the returned event + will not be a child of the event previously created */ + test_assert(event_get_parent(child_event) != event); + event_unref(&event); + dlua_script_unref(&script); + + test_end(); +} + /* * All tests */ @@ -438,6 +501,8 @@ static void (*const test_functions[])(void) = { test_simple_post, test_second_post, test_bad_settings, + test_set_event, + test_set_no_event, NULL }; diff --git a/src/lib-lua/test-lua-http-client.lua b/src/lib-lua/test-lua-http-client.lua index 0d740495df..9b49b09326 100644 --- a/src/lib-lua/test-lua-http-client.lua +++ b/src/lib-lua/test-lua-http-client.lua @@ -75,3 +75,26 @@ function test_invalid_set_value_3() }) return 0 end + +function test_http_request_set_event(event, url) + local request = http_client:request { + url = url, + method = "POST" + } + request:add_header("Cache-Control", "no-cache") + request:add_header("Content-Type", "application/x-www-form-urlencoded") + request:set_payload("some+foolish+payload+for+funsies\r\n", true) + request:set_event(event) + return request:get_event() +end + +function test_http_request_set_no_event(event, url) + local request = http_client:request { + url = url, + method = "POST" + } + request:add_header("Cache-Control", "no-cache") + request:add_header("Content-Type", "application/x-www-form-urlencoded") + request:set_payload("some+foolish+payload+for+funsies\r\n", true) + return request:get_event() +end