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 }
};
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
*/
test_simple_post,
test_second_post,
test_bad_settings,
+ test_set_event,
+ test_set_no_event,
NULL
};
})
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