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