#include "first.h" #undef NDEBUG #include #include #include #include "mod_evhost.c" static plugin_config * test_mod_evhost_plugin_config_init(void) { plugin_config *s = calloc(1, sizeof(plugin_config)); s->path_pieces_raw = buffer_init(); s->path_pieces = NULL; s->len = 0; return s; } static void test_mod_evhost_plugin_config_free(plugin_config *s) { buffer_free(s->path_pieces_raw); for (size_t i = 0; i < s->len; ++i) buffer_free(s->path_pieces[i]); free(s->path_pieces); free(s); } static void test_mod_evhost_build_doc_root_path(void) { buffer *authority = buffer_init_string("host.example.org"); buffer *b = buffer_init(); array *a = array_init(); struct ttt { const char *pattern; size_t plen; const char *expect; size_t elen; } tt[] = { /* correct pattern not using dot notation */ { CONST_STR_LEN("/web/%3/"), CONST_STR_LEN("/web/host/") } /* correct pattern using dot notation */ ,{ CONST_STR_LEN("/web/%{3.1}/%{3.2}/%3/"), CONST_STR_LEN("/web/h/o/host/") } /* other pattern 1 */ ,{ CONST_STR_LEN("/web/%{3.0}/"), CONST_STR_LEN("/web/host/") } /* other pattern 2 */ ,{ CONST_STR_LEN("/web/%3.\1/"), CONST_STR_LEN("/web/host.\1/") } }; for (size_t i = 0; i < sizeof(tt)/sizeof(tt[0]); ++i) { struct ttt *t = tt+i; plugin_config *s = test_mod_evhost_plugin_config_init(); buffer_copy_string_len(s->path_pieces_raw, t->pattern, t->plen); assert(0 == mod_evhost_parse_pattern(s)); mod_evhost_build_doc_root_path(b, a, authority, s->path_pieces, s->len); assert(buffer_is_equal_string(b, t->expect, t->elen)); test_mod_evhost_plugin_config_free(s); } buffer_free(authority); buffer_free(b); array_free(a); } int main (void) { test_mod_evhost_build_doc_root_path(); return 0; } /* * stub functions */ handler_t stat_cache_get_entry(server *srv, connection *con, buffer *name, stat_cache_entry **sce) { UNUSED(srv); UNUSED(con); UNUSED(name); UNUSED(sce); return HANDLER_GO_ON; }