Skip to content

Commit

Permalink
lib-smtp: test-smtp-client-errors: Terminate the test if it is hangin…
Browse files Browse the repository at this point in the history
…g for some reason.
  • Loading branch information
stephanbosch authored and villesavolainen committed Feb 6, 2019
1 parent fc5a561 commit fd52ec2
Showing 1 changed file with 38 additions and 4 deletions.
42 changes: 38 additions & 4 deletions src/lib-smtp/test-smtp-client-errors.c
Expand Up @@ -22,6 +22,8 @@
#include <signal.h>
#include <unistd.h>

#define CLIENT_PROGRESS_TIMEOUT 10

/*
* Types
*/
Expand Down Expand Up @@ -79,6 +81,7 @@ static int (*test_server_init)(struct server_connection *conn);
static void (*test_server_deinit)(struct server_connection *conn);

/* client */
static struct timeout *to_client_progress = NULL;
static struct smtp_client *smtp_client = NULL;

/*
Expand Down Expand Up @@ -2568,11 +2571,44 @@ test_client_defaults(struct smtp_client_settings *smtp_set)
smtp_set->debug = debug;
}

static void
test_client_progress_timeout(void *context ATTR_UNUSED)
{
/* Terminate test due to lack of progress */
test_assert(FALSE);
timeout_remove(&to_client_progress);
io_loop_stop(current_ioloop);
}

static bool
test_client_init(test_client_init_t client_test,
const struct smtp_client_settings *client_set)
{
i_assert(client_test != NULL);
if (!client_test(client_set))
return FALSE;

to_client_progress = timeout_add(CLIENT_PROGRESS_TIMEOUT*1000,
test_client_progress_timeout, NULL);

return TRUE;
}

static void test_client_deinit(void)
{
timeout_remove(&to_client_progress);

if (smtp_client != NULL)
smtp_client_deinit(&smtp_client);
smtp_client = NULL;
}

static void
test_client_run(test_client_init_t client_test,
const struct smtp_client_settings *client_set)
{
if (test_client_init(client_test, client_set))
io_loop_run(ioloop);
test_client_deinit();
}

/*
Expand Down Expand Up @@ -2902,9 +2938,7 @@ static void test_run_client_server(

lib_signals_ignore(SIGPIPE, TRUE);
ioloop = io_loop_create();
if (client_test(client_set))
io_loop_run(ioloop);
test_client_deinit();
test_client_run(client_test, client_set);
io_loop_destroy(&ioloop);

test_servers_kill_all();
Expand Down

0 comments on commit fd52ec2

Please sign in to comment.