void free_event_loop(event_loop_t *event_loop) { h2o_multithread_unregister_receiver(event_loop->h2o_ctx.queue, &event_loop->h2o_receiver); h2o_socket_close(event_loop->h2o_socket); h2o_socket_close(event_loop->epoll_socket); h2o_context_dispose(&event_loop->h2o_ctx); }
void test_issues293() { h2o_globalconf_t globalconf; h2o_config_init(&globalconf); /* register two hosts, using 80 and 443 */ register_authority(&globalconf, h2o_iovec_init(H2O_STRLIT("default")), 65535); register_authority(&globalconf, h2o_iovec_init(H2O_STRLIT("host1")), 80); register_authority(&globalconf, h2o_iovec_init(H2O_STRLIT("host1")), 443); register_authority(&globalconf, h2o_iovec_init(H2O_STRLIT("host2")), 80); register_authority(&globalconf, h2o_iovec_init(H2O_STRLIT("host2")), 443); register_authority(&globalconf, h2o_iovec_init(H2O_STRLIT("host3")), 65535); h2o_context_init(&ctx, test_loop, &globalconf); /* run the tests */ check(&H2O_URL_SCHEME_HTTP, "host1", "host1:80"); check(&H2O_URL_SCHEME_HTTPS, "host1", "host1:443"); check(&H2O_URL_SCHEME_HTTP, "host2", "host2:80"); check(&H2O_URL_SCHEME_HTTPS, "host2", "host2:443"); /* supplied port number in the Host header must be preferred */ check(&H2O_URL_SCHEME_HTTP, "host1:80", "host1:80"); check(&H2O_URL_SCHEME_HTTP, "host1:443", "host1:443"); check(&H2O_URL_SCHEME_HTTPS, "host1:80", "host1:80"); check(&H2O_URL_SCHEME_HTTPS, "host1:443", "host1:443"); check(&H2O_URL_SCHEME_HTTP, "host2:80", "host2:80"); check(&H2O_URL_SCHEME_HTTP, "host2:443", "host2:443"); check(&H2O_URL_SCHEME_HTTPS, "host2:80", "host2:80"); check(&H2O_URL_SCHEME_HTTPS, "host2:443", "host2:443"); /* host-level conf without default port */ check(&H2O_URL_SCHEME_HTTP, "host3", "host3:65535"); check(&H2O_URL_SCHEME_HTTPS, "host3", "host3:65535"); check(&H2O_URL_SCHEME_HTTP, "host3", "host3:65535"); check(&H2O_URL_SCHEME_HTTPS, "host3", "host3:65535"); check(&H2O_URL_SCHEME_HTTP, "host3:80", "host3:65535"); check(&H2O_URL_SCHEME_HTTPS, "host3:80", "default:65535"); check(&H2O_URL_SCHEME_HTTP, "host3:443", "default:65535"); check(&H2O_URL_SCHEME_HTTPS, "host3:443", "host3:65535"); /* upper-case */ check(&H2O_URL_SCHEME_HTTP, "HoST1", "host1:80"); check(&H2O_URL_SCHEME_HTTP, "HoST1:80", "host1:80"); check(&H2O_URL_SCHEME_HTTPS, "HoST1", "host1:443"); check(&H2O_URL_SCHEME_HTTPS, "HoST1:443", "host1:443"); h2o_context_dispose(&ctx); h2o_config_dispose(&globalconf); }
void free_event_loop(event_loop_t *event_loop, h2o_multithread_receiver_t *h2o_receiver) { if (event_loop->h2o_https_socket) h2o_socket_close(event_loop->h2o_https_socket); if (event_loop->h2o_socket) h2o_socket_close(event_loop->h2o_socket); h2o_multithread_unregister_receiver(event_loop->h2o_ctx.queue, h2o_receiver); h2o_loop_t * const loop = event_loop->h2o_ctx.loop; h2o_context_dispose(&event_loop->h2o_ctx); h2o_evloop_destroy(loop); }
void test_lib__handler__redirect_c() { h2o_globalconf_t globalconf; h2o_hostconf_t *hostconf; h2o_pathconf_t *pathconf; h2o_config_init(&globalconf); hostconf = h2o_config_register_host(&globalconf, h2o_iovec_init(H2O_STRLIT("default")), 65535); pathconf = h2o_config_register_path(hostconf, "/", 0); h2o_redirect_register(pathconf, 0, 301, "https://example.com/bar/"); h2o_context_init(&ctx, test_loop, &globalconf); { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx, ctx.globalconf->hosts); conn->req.input.method = h2o_iovec_init(H2O_STRLIT("GET")); conn->req.input.path = h2o_iovec_init(H2O_STRLIT("/")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 301); ok(check_header(&conn->req.res, H2O_TOKEN_LOCATION, "https://example.com/bar/")); ok(conn->body->size != 0); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx, ctx.globalconf->hosts); conn->req.input.method = h2o_iovec_init(H2O_STRLIT("GET")); conn->req.input.path = h2o_iovec_init(H2O_STRLIT("/abc")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 301); ok(check_header(&conn->req.res, H2O_TOKEN_LOCATION, "https://example.com/bar/abc")); ok(conn->body->size != 0); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx, ctx.globalconf->hosts); conn->req.input.method = h2o_iovec_init(H2O_STRLIT("HEAD")); conn->req.input.path = h2o_iovec_init(H2O_STRLIT("/")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 301); ok(check_header(&conn->req.res, H2O_TOKEN_LOCATION, "https://example.com/bar/")); ok(conn->body->size == 0); h2o_loopback_destroy(conn); } h2o_context_dispose(&ctx); h2o_config_dispose(&globalconf); }
void test_lib__handler__fastcgi_c() { h2o_globalconf_t globalconf; h2o_hostconf_t *hostconf; h2o_pathconf_t *pathconf; h2o_config_init(&globalconf); globalconf.server_name = h2o_iovec_init(H2O_STRLIT("h2o/1.2.1-alpha1")); hostconf = h2o_config_register_host(&globalconf, h2o_iovec_init(H2O_STRLIT("default")), 65535); pathconf = h2o_config_register_path(hostconf, "/"); h2o_context_init(&ctx, test_loop, &globalconf); subtest("build-request", test_build_request); h2o_context_dispose(&ctx); h2o_config_dispose(&globalconf); }
void test_lib__file_c() { h2o_globalconf_t globalconf; h2o_hostconf_t *hostconf; h2o_context_t ctx; h2o_config_init(&globalconf); hostconf = h2o_config_register_host(&globalconf, "default"); h2o_file_register(hostconf, "/", "t/00unit/file", NULL, NULL); h2o_context_init(&ctx, test_loop, &globalconf); { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 200); ok(check_header(&conn->req.res, H2O_TOKEN_CONTENT_TYPE, "text/html")); ok(h2o_memis(conn->body->bytes, conn->body->size, H2O_STRLIT("hello html\n"))); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/index.html")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 200); ok(check_header(&conn->req.res, H2O_TOKEN_CONTENT_TYPE, "text/html")); ok(h2o_memis(conn->body->bytes, conn->body->size, H2O_STRLIT("hello html\n"))); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/1000.txt")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 200); ok(check_header(&conn->req.res, H2O_TOKEN_CONTENT_TYPE, "text/plain")); ok(conn->body->size == 1000); ok(strcmp(sha1sum(conn->body->bytes, conn->body->size), "dfd3ae1f5c475555fad62efe42e07309fa45f2ed") == 0); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/1000000.txt")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 200); ok(check_header(&conn->req.res, H2O_TOKEN_CONTENT_TYPE, "text/plain")); ok(conn->body->size == 1000000); ok(strcmp(sha1sum(conn->body->bytes, conn->body->size), "00c8ab71d0914dce6a1ec2eaa0fda0df7044b2a2") == 0); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/index_txt/")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 200); ok(check_header(&conn->req.res, H2O_TOKEN_CONTENT_TYPE, "text/plain")); ok(h2o_memis(conn->body->bytes, conn->body->size, H2O_STRLIT("hello text\n"))); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/index_txt")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 301); ok(check_header(&conn->req.res, H2O_TOKEN_LOCATION, "http://default/index_txt/")); h2o_loopback_destroy(conn); } { h2o_loopback_conn_t *conn = h2o_loopback_create(&ctx); conn->req.method = h2o_buf_init(H2O_STRLIT("GET")); conn->req.path = h2o_buf_init(H2O_STRLIT("/index_txt_as_dir/")); h2o_loopback_run_loop(conn); ok(conn->req.res.status == 301); ok(check_header(&conn->req.res, H2O_TOKEN_LOCATION, "http://default/index_txt_as_dir/index.txt/")); h2o_loopback_destroy(conn); } h2o_context_dispose(&ctx); h2o_config_dispose(&globalconf); }