1 #include "first.h" 2 3 #undef NDEBUG 4 #include <assert.h> 5 #include <stdlib.h> 6 7 #include "mod_userdir.c" 8 9 static void test_mod_userdir_reset(request_st * const r) 10 { 11 r->http_status = 0; 12 buffer_clear(&r->physical.basedir); 13 buffer_clear(&r->physical.path); 14 } 15 16 static void 17 test_mod_userdir_docroot_handler(request_st * const r, plugin_data * const p) 18 { 19 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("")); 20 test_mod_userdir_reset(r); 21 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 22 assert(buffer_is_empty(&r->physical.basedir)); 23 assert(buffer_is_empty(&r->physical.path)); 24 25 p->defaults.active = 1; 26 27 test_mod_userdir_reset(r); 28 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 29 assert(buffer_is_empty(&r->physical.basedir)); 30 assert(buffer_is_empty(&r->physical.path)); 31 32 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/")); 33 test_mod_userdir_reset(r); 34 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 35 assert(buffer_is_empty(&r->physical.basedir)); 36 assert(buffer_is_empty(&r->physical.path)); 37 38 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/other")); 39 test_mod_userdir_reset(r); 40 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 41 assert(buffer_is_empty(&r->physical.basedir)); 42 assert(buffer_is_empty(&r->physical.path)); 43 44 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~")); 45 test_mod_userdir_reset(r); 46 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 47 assert(buffer_is_empty(&r->physical.basedir)); 48 assert(buffer_is_empty(&r->physical.path)); 49 50 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~no-trailing-slash")); 51 test_mod_userdir_reset(r); 52 assert(HANDLER_FINISHED == mod_userdir_docroot_handler(r, p)); 53 assert(301 == r->http_status); 54 assert(buffer_is_empty(&r->physical.basedir)); 55 assert(buffer_is_empty(&r->physical.path)); 56 57 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~/")); 58 test_mod_userdir_reset(r); 59 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 60 assert(buffer_is_empty(&r->physical.basedir)); 61 assert(buffer_is_empty(&r->physical.path)); 62 63 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/")); 64 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/")); 65 test_mod_userdir_reset(r); 66 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 67 assert(buffer_eq_slen(&r->physical.basedir, 68 CONST_STR_LEN("/web/u/jan/public_html"))); 69 assert(buffer_eq_slen(&r->physical.path, 70 CONST_STR_LEN("/web/u/jan/public_html/"))); 71 72 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/more")); 73 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/more")); 74 test_mod_userdir_reset(r); 75 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 76 assert(buffer_eq_slen(&r->physical.basedir, 77 CONST_STR_LEN("/web/u/jan/public_html"))); 78 assert(buffer_eq_slen(&r->physical.path, 79 CONST_STR_LEN("/web/u/jan/public_html/more"))); 80 81 p->defaults.letterhomes = 1; 82 83 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~.jan/")); 84 test_mod_userdir_reset(r); 85 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 86 assert(buffer_is_empty(&r->physical.basedir)); 87 assert(buffer_is_empty(&r->physical.path)); 88 89 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/")); 90 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/")); 91 test_mod_userdir_reset(r); 92 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 93 assert(buffer_eq_slen(&r->physical.basedir, 94 CONST_STR_LEN("/web/u/j/jan/public_html"))); 95 assert(buffer_eq_slen(&r->physical.path, 96 CONST_STR_LEN("/web/u/j/jan/public_html/"))); 97 98 p->defaults.letterhomes = 0; 99 100 array *include_user = array_init(2); 101 array *exclude_user = array_init(2); 102 103 array_insert_value(include_user, CONST_STR_LEN("notjan")); 104 105 p->defaults.include_user = include_user; 106 107 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/")); 108 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/")); 109 test_mod_userdir_reset(r); 110 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 111 assert(buffer_is_empty(&r->physical.basedir)); 112 assert(buffer_is_empty(&r->physical.path)); 113 114 array_insert_value(include_user, CONST_STR_LEN("jan")); 115 116 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/")); 117 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/")); 118 test_mod_userdir_reset(r); 119 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 120 assert(buffer_eq_slen(&r->physical.basedir, 121 CONST_STR_LEN("/web/u/jan/public_html"))); 122 assert(buffer_eq_slen(&r->physical.path, 123 CONST_STR_LEN("/web/u/jan/public_html/"))); 124 125 p->defaults.exclude_user = exclude_user; 126 127 array_insert_value(exclude_user, CONST_STR_LEN("notjan")); 128 129 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/")); 130 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/")); 131 test_mod_userdir_reset(r); 132 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 133 assert(buffer_eq_slen(&r->physical.basedir, 134 CONST_STR_LEN("/web/u/jan/public_html"))); 135 assert(buffer_eq_slen(&r->physical.path, 136 CONST_STR_LEN("/web/u/jan/public_html/"))); 137 138 array_insert_value(exclude_user, CONST_STR_LEN("jan")); 139 140 buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/~jan/")); 141 buffer_copy_string_len(&r->physical.rel_path, CONST_STR_LEN("/~jan/")); 142 test_mod_userdir_reset(r); 143 assert(HANDLER_GO_ON == mod_userdir_docroot_handler(r, p)); 144 assert(buffer_is_empty(&r->physical.basedir)); 145 assert(buffer_is_empty(&r->physical.path)); 146 147 p->defaults.include_user = NULL; 148 p->defaults.exclude_user = NULL; 149 array_free(include_user); 150 array_free(exclude_user); 151 } 152 153 int main (void) 154 { 155 plugin_data * const p = mod_userdir_init(); 156 assert(NULL != p); 157 158 buffer *basepath = buffer_init_string("/web/u/"); /*(skip getpwnam())*/ 159 buffer *path = buffer_init_string("public_html"); 160 p->defaults.basepath = basepath; 161 p->defaults.path = path; 162 163 request_st r; 164 165 memset(&r, 0, sizeof(request_st)); 166 r.tmp_buf = buffer_init(); 167 r.conf.errh = log_error_st_init(); 168 r.conf.errh->errorlog_fd = -1; /* (disable) */ 169 170 test_mod_userdir_docroot_handler(&r, p); 171 172 free(r.uri.path.ptr); 173 free(r.physical.basedir.ptr); 174 free(r.physical.path.ptr); 175 free(r.physical.rel_path.ptr); 176 177 log_error_st_free(r.conf.errh); 178 buffer_free(r.tmp_buf); 179 180 buffer_free(basepath); 181 buffer_free(path); 182 free(p); 183 return 0; 184 } 185 186 /* 187 * stub functions 188 */ 189 190 int http_response_redirect_to_directory(request_st *r, int status) { 191 r->http_status = status; 192 return 0; 193 } 194 195 int config_plugin_values_init(server *srv, void *p_d, const config_plugin_keys_t *cpk, const char *mname) { 196 UNUSED(srv); 197 UNUSED(p_d); 198 UNUSED(cpk); 199 UNUSED(mname); 200 return 0; 201 } 202 203 int config_check_cond(request_st *r, int context_ndx) { 204 UNUSED(r); 205 UNUSED(context_ndx); 206 return 0; 207 } 208