From: Aki Tuomi Date: Wed, 23 Oct 2024 10:06:20 +0000 (+0300) Subject: auth: Add test for auth request export import X-Git-Tag: 2.4.1~577 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b02eb4c198474e462b9d8672c8f6aa8385a79d2;p=thirdparty%2Fdovecot%2Fcore.git auth: Add test for auth request export import --- diff --git a/src/auth/test-auth-request-fields.c b/src/auth/test-auth-request-fields.c index 98600c32d3..ffe8963b5d 100644 --- a/src/auth/test-auth-request-fields.c +++ b/src/auth/test-auth-request-fields.c @@ -1,6 +1,7 @@ /* Copyright (c) 2020 Dovecot authors, see the included COPYING file */ #include "test-auth.h" +#include "auth-common.h" #include "str.h" #include "strescape.h" #include "auth-request.h" @@ -48,11 +49,13 @@ test_auth_request_init(const struct mech_module *mech) { struct auth_request *request; pool_t pool = pool_alloconly_create("test auth request", 1024); - request = p_new(pool, struct auth_request, 1); request->pool = pool; request->event = event_create(NULL); request->mech = mech; + request->set = global_auth_settings; + request->refcount = 1; + p_array_init(&request->authdb_event, pool, 1); auth_request_fields_init(request); /* fill out fields that are always exported */ @@ -138,10 +141,38 @@ static void test_auth_request_fields_secured(void) test_auth_request_deinit(request); } +static void test_auth_request_export_import(void) +{ + struct auth_request *request_a = test_auth_request_init(mech_module_find("PLAIN")); + string_t *exported_a = t_str_new(128); + string_t *exported_b = t_str_new(128); + request_a->passdb_success = TRUE; + auth_request_set_field(request_a, "event_brand with fun = \" values", "this = has _ fun \t values \"", "PLAIN"); + auth_request_export(request_a, exported_a); + test_auth_request_deinit(request_a); + + /* then import it */ + struct auth_request *request_b = test_auth_request_init(mech_module_find("PLAIN")); + const char *const *args = t_strsplit_tabescaped(str_c(exported_a)); + for (; *args != NULL; args++) { + const char *value = strchr(*args, '='); + if (value == NULL) + (void)auth_request_import(request_b, *args, ""); + else { + const char *key = t_strdup_until(*args, value++); + (void)auth_request_import(request_b, key, value); + } + } + auth_request_export(request_b, exported_b); + test_auth_request_deinit(request_b); + test_assert_strcmp(str_c(exported_a), str_c(exported_b)); +} + void test_auth_request_fields(void) { test_begin("auth request fields"); test_auth_request_fields_list(); test_auth_request_fields_secured(); + test_auth_request_export_import(); test_end(); } diff --git a/src/auth/test-main.c b/src/auth/test-main.c index 1312fedc5b..d82f44f7ef 100644 --- a/src/auth/test-main.c +++ b/src/auth/test-main.c @@ -5,6 +5,7 @@ #include "auth-settings.h" #include "test-common.h" #include "test-auth.h" +#include "auth-common.h" #include "password-scheme.h" #include "passdb.h" @@ -31,6 +32,7 @@ int main(int argc, char *argv[]) service_flags, &argc, &argv, ""); master_service_init_finish(master_service); + auth_event = event_create(NULL); password_schemes_init(); passdbs_init(); passdb_mock_mod_init(); @@ -43,6 +45,7 @@ int main(int argc, char *argv[]) passdb_mock_mod_deinit(); password_schemes_deinit(); passdbs_deinit(); + event_unref(&auth_event); master_service_deinit(&master_service);