util-tests.c revision 2aa96da5f3a9485d598e345e183a59a4b8e80abb
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen Stephen Gallagher <sgallagh@redhat.com>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen Copyright (C) 2010 Red Hat
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen This program is free software; you can redistribute it and/or modify
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen it under the terms of the GNU General Public License as published by
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen the Free Software Foundation; either version 3 of the License, or
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen (at your option) any later version.
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen This program is distributed in the hope that it will be useful,
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen GNU General Public License for more details.
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen You should have received a copy of the GNU General Public License
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen#define FILENAME_TEMPLATE "tests-atomicio-XXXXXX"
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EINVAL, "NULL input accepted");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen ret = add_string_to_list(global_talloc_context, "ABC", &list);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EOK, "Adding string to non-existing list failed.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(list != NULL, "No new list created.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(list[0] != NULL, "String not added to new list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen "Wrong string added to newly created list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen "Missing terminating NULL in newly created list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen ret = add_string_to_list(global_talloc_context, "DEF", &list);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EOK, "Adding string to list failed.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(list != NULL, "No list returned.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(list[0], "ABC") == 0, "Wrong first string in new list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(list[1], "DEF") == 0, "Wrong string added to list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(list[2] == NULL, "Missing terminating NULL.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen ret = add_string_to_list(global_talloc_context, "ABC", &list);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EOK, "Adding string to empty list failed.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(list != NULL, "No list returned.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(list[0] != NULL, "String not added to empty list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen "Wrong string added to empty list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen "Missing terminating NULL in newly created list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "NULL string is in NULL list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen is_in = string_in_list(NULL, empty_list, false);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "NULL string is in empty list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "NULL string is in list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "String is in NULL list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen is_in = string_in_list("ABC", empty_list, false);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "String is in empty list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(is_in, "String is not case in-sensitive list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "Wrong string found in case sensitive list.");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(!is_in, "Wrong string found in list.");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen const char **parsed;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen /* Positive tests */
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const char *parsed4[] = { "foo", "a c", NULL };
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const char *parsed5[] = { "foo", "a", "d", NULL };
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const char *parsed6[] = { "foo", "a", "e", NULL };
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const char *parsed7[] = { "foo", "a", "f", NULL };
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const char *parsed8[] = { "foo", "a\tg", NULL };
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_if(parsed == NULL && tc[i].parsed != NULL,
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen "Could not parse correct argument string '%s'\n");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen ret = diff_string_lists(test_ctx, parsed, discard_const(tc[i].parsed),
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_ret[0] == NULL, "The parser returned more data than expected\n");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_exp[0] == NULL, "The parser returned less data than expected\n");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen for (ii = 0; parsed[ii]; ii++) free(parsed[ii]);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen /* Test with all values returned */
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l1[0], "a") == 0, "Missing \"a\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l1[1] == NULL, "only_l1 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l2[0], "d") == 0, "Missing \"d\" from only_l2");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l2[1] == NULL, "only_l2 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(both[0], "c") == 0, "Missing \"c\" from both");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(both[1], "b") == 0, "Missing \"b\" from both");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(both[2] == NULL, "both not NULL-terminated");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen /* Test with restricted return values */
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(only_l1[0], "a") == 0, "Missing \"a\" from only_l1");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(only_l1[1] == NULL, "only_l1 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l2[0], "d") == 0, "Missing \"d\" from only_l2");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(only_l2[1] == NULL, "only_l2 not NULL-terminated");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(both == NULL, "Nothing returned to both");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l1[0], "a") == 0, "Missing \"a\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l1[1] == NULL, "only_l1 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l2 == NULL, "Nothing returned to only_l2");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(both == NULL, "Nothing returned to both");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(only_l2[0], "d") == 0, "Missing \"d\" from only_l2");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(only_l2[1] == NULL, "only_l2 not NULL-terminated");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(only_l1 == NULL, "Nothing returned to only_l1");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(both == NULL, "Nothing returned to both");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen /* Test with no overlap */
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(only_l1[0], "a") == 0, "Missing \"a\" from only_l1");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(only_l1[1], "b") == 0, "Missing \"b\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l1[2], "c") == 0, "Missing \"c\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l1[3] == NULL, "only_l1 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l2[0], "d") == 0, "Missing \"f\" from only_l2");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l2[1], "e") == 0, "Missing \"e\" from only_l2");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l2[2], "f") == 0, "Missing \"d\" from only_l2");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l2[3] == NULL, "only_l2 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(both[0] == NULL, "both should have zero entries");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen /* Test with 100% overlap */
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(only_l1[0] == NULL, "only_l1 should have zero entries");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(only_l2[0] == NULL, "only_l2 should have zero entries");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(strcmp(both[0], "a") == 0, "Missing \"a\" from both");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(strcmp(both[1], "b") == 0, "Missing \"b\" from both");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(strcmp(both[2], "c") == 0, "Missing \"c\" from both");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen fail_unless(both[3] == NULL, "both is not NULL-terminated");
41e1c7380edda701719d8ce1fb4d465d2ec4c84dTimo Sirainen /* Test with no second list */
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(ret == EOK, "diff_string_lists returned error [%d]", ret);
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l1[0], "a") == 0, "Missing \"a\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l1[1], "b") == 0, "Missing \"b\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(strcmp(only_l1[2], "c") == 0, "Missing \"c\" from only_l1");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l1[3] == NULL, "only_l1 not NULL-terminated");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(only_l2[0] == NULL, "only_l2 should have zero entries");
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen fail_unless(both[0] == NULL, "both should have zero entries");
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen ret = sss_filter_sanitize(test_ctx, no_specials, &sanitized);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "no_specials error [%d][%s]",
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(no_specials, sanitized)==0,
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen "Expected [%s], got [%s]",
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen const char has_asterisk_expected[] = "\\2ausername";
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen ret = sss_filter_sanitize(test_ctx, has_asterisk, &sanitized);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "has_asterisk error [%d][%s]",
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(has_asterisk_expected, sanitized)==0,
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen "Expected [%s], got [%s]",
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen const char has_lparen_expected[] = "user\\28name";
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen ret = sss_filter_sanitize(test_ctx, has_lparen, &sanitized);
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(ret == EOK, "has_lparen error [%d][%s]",
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen fail_unless(strcmp(has_lparen_expected, sanitized)==0,
faed8babca9914257f34fb2e603d74016d563b2dTimo Sirainen "Expected [%s], got [%s]",
&nlen);
fail_if(strlen((const char *) munchen_utf8_upcase) != nlen); /* This is not true for utf8 strings in general */
&nsize);
char *lcase;
bool ret;
unsigned int init_seed;
unsigned int seed;
for (i = 0; i < len; i++) {
void setup_atomicio(void)
int ret;
void teardown_atomicio(void)
int ret;
int fd;
errno = 0;
errno = 0;
errno = 0;
errno = 0;
total = 0;
errno = 0;
} while (numread != 0);
errno = 0;
errno = 0;
errno = 0;
int fd;
errno = 0;
struct split_data {
const char *input;
const char **expected_list;
bool trim;
bool skip_empty;
int expected_size;
int expected_ret;
int size;
const char *str_ref;
const char *str_out;
int num_of_tests;
(const char*[]){NULL},
NULL,
NULL,
0, EINVAL
for (a = 0; a < num_of_tests; a++) {
if (ret) {
struct check_ip_test_data {
const char *str_ipaddr;
bool expected_ret;
int num_of_tests;
int ret;
bool bret;
for (a = 0; a < num_of_tests; a++) {
int num_of_tests;
int ret;
bool bret;
for (a = 0; a < num_of_tests; a++) {
const char *host;
const char *domain;
bool expected;
bool ret;
int opt;
int failure_count;
switch(opt) {
if (failure_count == 0) {
return EXIT_SUCCESS;
return EXIT_FAILURE;