Skip to content

Commit

Permalink
auth: Add test suite for username filter
Browse files Browse the repository at this point in the history
  • Loading branch information
cmouse committed May 11, 2017
1 parent 05090e8 commit 3edea87
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/auth/Makefile.am
Expand Up @@ -226,6 +226,7 @@ libstats_auth_la_SOURCES = auth-stats.c
test_programs = \
test-auth-cache \
test-auth-request-var-expand \
test-username-filter \
test-db-dict

noinst_PROGRAMS = $(test_programs)
Expand All @@ -244,6 +245,10 @@ test_auth_request_var_expand_SOURCES = test-auth-request-var-expand.c
test_auth_request_var_expand_LDADD = $(test_libs) libauth.la
test_auth_request_var_expand_DEPENDENCIES = $(pkglibexec_PROGRAMS) $(test_libs)

test_username_filter_SOURCES = test-username-filter.c
test_username_filter_LDADD = $(test_libs) $(auth_libs) $(AUTH_LIBS) $(LIBDOVECOT)
test_username_filter_DEPENDENCIES = $(pkglibexec_PROGRAMS) $(test_libs) $(LIBDOVECOT_DEPS)

test_db_dict_SOURCES = test-db-dict.c
test_db_dict_LDADD = $(test_libs) libauth.la
test_db_dict_DEPENDENCIES = $(pkglibexec_PROGRAMS) $(test_libs)
Expand Down
68 changes: 68 additions & 0 deletions src/auth/test-username-filter.c
@@ -0,0 +1,68 @@
/* Copyright (c) 2017 Dovecot authors, see the included COPYING file */

#include "lib.h"
#include "test-common.h"
#include "auth-common.h"
#include "auth-request.h"
struct auth_penalty *auth_penalty;
time_t process_start_time;
bool worker, worker_restart_request;
void auth_module_load(const char *names ATTR_UNUSED)
{
}
void auth_refresh_proctitle(void) {
}

static void test_username_filter(void)
{
const struct {
const char *filter;
const char *input;
bool accepted;
} cases[] = {
{ "", "", TRUE },
{ "*", "", TRUE },
{ "", "testuser1", TRUE },
{ "*", "testuser1", TRUE },
{ "!*", "testuser1", FALSE },
{ "!*", "", FALSE },
{ "*@*", "", FALSE },
{ "*@*", "@", TRUE },
{ "!*@*", "@", FALSE },
{ "!*@*", "", TRUE },
{ "*@*", "testuser1", FALSE },
{ "!*@*", "testuser1", TRUE },
{ "*@*", "testuser1@testdomain", TRUE },
{ "!*@*", "testuser1@testdomain", FALSE },
{ "*@testdomain *@testdomain2", "testuser1@testdomain", TRUE },
{ "*@testdomain *@testdomain2", "testuser1@testdomain2", TRUE },
{ "*@testdomain *@testdomain2", "testuser1@testdomain3", FALSE },
{ "!testuser@testdomain *@testdomain", "testuser@testdomain", FALSE },
{ "!testuser@testdomain *@testdomain", "testuser2@testdomain", TRUE },
{ "*@testdomain !testuser@testdomain !testuser2@testdomain", "testuser@testdomain", FALSE },
{ "*@testdomain !testuser@testdomain !testuser2@testdomain", "testuser3@testdomain", TRUE },
{ "!testuser@testdomain !testuser2@testdomain", "testuser", TRUE },
{ "!testuser@testdomain !testuser2@testdomain", "testuser@testdomain", FALSE },
{ "!testuser@testdomain *@testdomain !testuser2@testdomain", "testuser3@testdomain", TRUE },
{ "!testuser@testdomain *@testdomain !testuser2@testdomain", "testuser@testdomain", FALSE },
};

test_begin("test username_filter");

for(size_t i = 0; i < N_ELEMENTS(cases); i++) {
const char *const *filter = t_strsplit_spaces(cases[i].filter, " ,");
test_assert_idx(auth_request_username_accepted(filter, cases[i].input) == cases[i].accepted, i);
}

test_end();
}

int main(void)
{
static void (*test_functions[])(void) = {
test_username_filter,
NULL
};

return test_run(test_functions);
}

0 comments on commit 3edea87

Please sign in to comment.