]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Add test for auth request export import
authorAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 23 Oct 2024 10:06:20 +0000 (13:06 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:40:00 +0000 (10:40 +0200)
src/auth/test-auth-request-fields.c
src/auth/test-main.c

index 98600c32d3b17f0203c1a7bb970d483a6a8e26cc..ffe8963b5d4f08c28823d5453720906d75089532 100644 (file)
@@ -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();
 }
index 1312fedc5b01f24070b49b785ee961dbf4ff3c7e..d82f44f7efc352d1e7d98dd5cb041418b83ec495 100644 (file)
@@ -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);