| /* $OpenBSD: tests.c,v 1.4 2017/02/03 23:01:42 djm Exp $ */ |
| /* |
| * Regress test for matching functions |
| * |
| * Placed in the public domain |
| */ |
| |
| #include "includes.h" |
| |
| #include <sys/types.h> |
| #include <sys/param.h> |
| #include <stdio.h> |
| #ifdef HAVE_STDINT_H |
| #include <stdint.h> |
| #endif |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "../test_helper/test_helper.h" |
| |
| #include "match.h" |
| |
| void |
| tests(void) |
| { |
| TEST_START("match_pattern"); |
| ASSERT_INT_EQ(match_pattern("", ""), 1); |
| ASSERT_INT_EQ(match_pattern("", "aaa"), 0); |
| ASSERT_INT_EQ(match_pattern("aaa", ""), 0); |
| ASSERT_INT_EQ(match_pattern("aaa", "aaaa"), 0); |
| ASSERT_INT_EQ(match_pattern("aaaa", "aaa"), 0); |
| TEST_DONE(); |
| |
| TEST_START("match_pattern wildcard"); |
| ASSERT_INT_EQ(match_pattern("", "*"), 1); |
| ASSERT_INT_EQ(match_pattern("a", "?"), 1); |
| ASSERT_INT_EQ(match_pattern("aa", "a?"), 1); |
| ASSERT_INT_EQ(match_pattern("a", "*"), 1); |
| ASSERT_INT_EQ(match_pattern("aa", "a*"), 1); |
| ASSERT_INT_EQ(match_pattern("aa", "?*"), 1); |
| ASSERT_INT_EQ(match_pattern("aa", "**"), 1); |
| ASSERT_INT_EQ(match_pattern("aa", "?a"), 1); |
| ASSERT_INT_EQ(match_pattern("aa", "*a"), 1); |
| ASSERT_INT_EQ(match_pattern("ba", "a?"), 0); |
| ASSERT_INT_EQ(match_pattern("ba", "a*"), 0); |
| ASSERT_INT_EQ(match_pattern("ab", "?a"), 0); |
| ASSERT_INT_EQ(match_pattern("ab", "*a"), 0); |
| TEST_DONE(); |
| |
| TEST_START("match_pattern_list"); |
| ASSERT_INT_EQ(match_pattern_list("", "", 0), 0); /* no patterns */ |
| ASSERT_INT_EQ(match_pattern_list("", "*", 0), 1); |
| ASSERT_INT_EQ(match_pattern_list("", "!*", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("", "!a,*", 0), 1); |
| ASSERT_INT_EQ(match_pattern_list("", "*,!a", 0), 1); |
| ASSERT_INT_EQ(match_pattern_list("", "a,!*", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("", "!*,a", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("a", "", 0), 0); |
| ASSERT_INT_EQ(match_pattern_list("a", "*", 0), 1); |
| ASSERT_INT_EQ(match_pattern_list("a", "!*", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("a", "!a", 0), -1); |
| /* XXX negated ASSERT_INT_EQ(match_pattern_list("a", "!b", 0), 1); */ |
| ASSERT_INT_EQ(match_pattern_list("a", "!a,*", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("b", "!a,*", 0), 1); |
| ASSERT_INT_EQ(match_pattern_list("a", "*,!a", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("b", "*,!a", 0), 1); |
| ASSERT_INT_EQ(match_pattern_list("a", "a,!*", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("b", "a,!*", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("a", "a,!a", 0), -1); |
| /* XXX negated ASSERT_INT_EQ(match_pattern_list("b", "a,!a", 0), 1); */ |
| ASSERT_INT_EQ(match_pattern_list("a", "!*,a", 0), -1); |
| ASSERT_INT_EQ(match_pattern_list("b", "!*,a", 0), -1); |
| TEST_DONE(); |
| |
| TEST_START("match_pattern_list lowercase"); |
| ASSERT_INT_EQ(match_pattern_list("abc", "ABC", 0), 0); |
| ASSERT_INT_EQ(match_pattern_list("ABC", "abc", 0), 0); |
| ASSERT_INT_EQ(match_pattern_list("abc", "ABC", 1), 1); |
| ASSERT_INT_EQ(match_pattern_list("ABC", "abc", 1), 0); |
| TEST_DONE(); |
| |
| TEST_START("addr_match_list"); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.1/44"), -2); |
| ASSERT_INT_EQ(addr_match_list(NULL, "127.0.0.1/44"), -2); |
| ASSERT_INT_EQ(addr_match_list("a", "*"), 0); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "*"), 1); |
| ASSERT_INT_EQ(addr_match_list(NULL, "*"), 0); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.1"), 1); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.2"), 0); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.1"), -1); |
| /* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.2"), 1); */ |
| ASSERT_INT_EQ(addr_match_list("127.0.0.255", "127.0.0.0/24"), 1); |
| ASSERT_INT_EQ(addr_match_list("127.0.1.1", "127.0.0.0/24"), 0); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.0/24"), 1); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.1.0/24"), 0); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.0/24"), -1); |
| /* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.1.0/24"), 1); */ |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "10.0.0.1,!127.0.0.1"), -1); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.1,10.0.0.1"), -1); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "10.0.0.1,127.0.0.2"), 0); |
| ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.2,10.0.0.1"), 0); |
| /* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "10.0.0.1,!127.0.0.2"), 1); */ |
| /* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.2,10.0.0.1"), 1); */ |
| TEST_DONE(); |
| |
| #define CHECK_FILTER(string,filter,expected) \ |
| do { \ |
| char *result = match_filter_list((string), (filter)); \ |
| ASSERT_STRING_EQ(result, expected); \ |
| free(result); \ |
| } while (0) |
| |
| TEST_START("match_filter_list"); |
| CHECK_FILTER("a,b,c", "", "a,b,c"); |
| CHECK_FILTER("a,b,c", "a", "b,c"); |
| CHECK_FILTER("a,b,c", "b", "a,c"); |
| CHECK_FILTER("a,b,c", "c", "a,b"); |
| CHECK_FILTER("a,b,c", "a,b", "c"); |
| CHECK_FILTER("a,b,c", "a,c", "b"); |
| CHECK_FILTER("a,b,c", "b,c", "a"); |
| CHECK_FILTER("a,b,c", "a,b,c", ""); |
| CHECK_FILTER("a,b,c", "b,c", "a"); |
| CHECK_FILTER("", "a,b,c", ""); |
| TEST_DONE(); |
| /* |
| * XXX TODO |
| * int match_host_and_ip(const char *, const char *, const char *); |
| * int match_user(const char *, const char *, const char *, const char *); |
| * char *match_list(const char *, const char *, u_int *); |
| * int addr_match_cidr_list(const char *, const char *); |
| */ |
| } |