|
| 1 | +#include "clar_libgit2.h" |
| 2 | +#include "net.h" |
| 3 | + |
| 4 | +struct url_pattern { |
| 5 | + const char *url; |
| 6 | + const char *pattern; |
| 7 | + bool matches; |
| 8 | +}; |
| 9 | + |
| 10 | +void test_network_url_pattern__single(void) |
| 11 | +{ |
| 12 | + git_net_url url; |
| 13 | + size_t i; |
| 14 | + |
| 15 | + struct url_pattern url_patterns[] = { |
| 16 | + /* Wildcard matches */ |
| 17 | + { "https://example.com/", "", false }, |
| 18 | + { "https://example.com/", "*", true }, |
| 19 | + |
| 20 | + /* Literal and wildcard matches */ |
| 21 | + { "https://example.com/", "example.com", true }, |
| 22 | + { "https://example.com/", ".example.com", true }, |
| 23 | + { "https://example.com/", "*.example.com", true }, |
| 24 | + { "https://www.example.com/", "www.example.com", true }, |
| 25 | + { "https://www.example.com/", ".example.com", true }, |
| 26 | + { "https://www.example.com/", "*.example.com", true }, |
| 27 | + |
| 28 | + /* Literal and wildcard failures */ |
| 29 | + { "https://example.com/", "example.org", false }, |
| 30 | + { "https://example.com/", ".example.org", false }, |
| 31 | + { "https://example.com/", "*.example.org", false }, |
| 32 | + { "https://foo.example.com/", "www.example.com", false }, |
| 33 | + |
| 34 | + /* |
| 35 | + * A port in the pattern is optional; if no port is |
| 36 | + * present, it matches *all* ports. |
| 37 | + */ |
| 38 | + { "https://example.com/", "example.com:443", true }, |
| 39 | + { "https://example.com/", "example.com:80", false }, |
| 40 | + { "https://example.com:1443/", "example.com", true }, |
| 41 | + |
| 42 | + /* Failures with similar prefix/suffix */ |
| 43 | + { "https://texample.com/", "example.com", false }, |
| 44 | + { "https://example.com/", "mexample.com", false }, |
| 45 | + { "https://example.com:44/", "example.com:443", false }, |
| 46 | + { "https://example.com:443/", "example.com:44", false }, |
| 47 | + }; |
| 48 | + |
| 49 | + for (i = 0; i < ARRAY_SIZE(url_patterns); i++) { |
| 50 | + cl_git_pass(git_net_url_parse(&url, url_patterns[i].url)); |
| 51 | + cl_assert_(git_net_url_matches_pattern(&url, url_patterns[i].pattern) == url_patterns[i].matches, url_patterns[i].pattern); |
| 52 | + git_net_url_dispose(&url); |
| 53 | + } |
| 54 | +} |
0 commit comments