📄 test_http.c
字号:
http_upgrade_init(http_upgrade); http_vary_init(http_vary); http_warning_init(http_warning); http_user_agent_init(http_user_agent); http_server_init(http_server); http_mime_version_init(http_mime_version); http_content_language_init(http_content_language); http_content_location_init(http_content_location); http_content_md5_init(http_content_md5); http_content_range_init(http_content_range); http_content_encoding_init(http_content_encoding); http_transfer_encoding_init(http_transfer_encoding); http_content_type_init(http_content_type); http_content_length_init(http_content_length); home = su_home_new(sizeof *home); { int i; struct { http_method_t number; char const *name; } methods[] = { { http_method_get, "GET" }, { http_method_post, "POST" }, { http_method_head, "HEAD" }, { http_method_options, "OPTIONS" }, { http_method_put, "PUT" }, { http_method_delete, "DELETE" }, { http_method_trace, "TRACE" }, { http_method_connect, "CONNECT" }, { 0, NULL } }; for (i = 0; methods[i].name; i++) { TEST_1(strcmp(methods[i].name, http_method_name(methods[i].number, "")) == 0); } } msg = read_message( "PUT /Foo HTTP/1.1\r\n" "Host: [::1]:8080\r\n" "From: webmaster@w3.org\r\n" "Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)\r\n" "Referer: http://www.w3.org/hypertext/DataSources/Overview.html\r\n" "Connection: close\r\n" "Accept: audio/*; q=0.2, audio/basic\r\n" "Accept-Charset: iso-8859-5, unicode-1-1;q=0.8\r\n" "Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0\r\n" "Accept-Language: da, en-gb;q=0.8, en;q=0.7\r\n" "Accept-Ranges: bytes\r\n" "Age: 212\r\n" "Allow: GET, HEAD, PUT\r\n" "Cache-Control: private, community=\"UCI\"\r\n" "Content-Encoding: identity\r\n" "Content-Language: da\r\n" "Content-Type: text/html\r\n" "Content-Location: http://localhost/Foo\r\n" "Content-Length: 28\r\n" "Content-MD5: f48BLMCjkX5M5PgWoelogA==\r\n" "Content-Range: bytes 0-27/*\r\n" "\r\n" "<html><body></body></html>\r\n"); http = msg_object(msg); TEST_1(home && msg && http); TEST_1(http_is_request((http_header_t *)http->http_request)); TEST_1(http->http_via); TEST_1(http->http_via->v_next); TEST_1(http->http_via->v_next->v_next == NULL); TEST_1(http->http_host); TEST_1(http->http_from); TEST_1(http->http_referer); TEST_1(http->http_connection); TEST_1(http->http_accept); TEST_1(http->http_accept_charset); TEST_1(http->http_accept_encoding); TEST_1(http->http_accept_language); TEST_1(http->http_accept_ranges); TEST_1(http->http_age); TEST_1(http->http_allow); TEST_1(http->http_cache_control); TEST_1(http->http_content_encoding); TEST_1(http->http_content_language); TEST_1(http->http_content_type); TEST_1(http->http_content_location); TEST_1(http->http_content_length); TEST_1(http->http_content_md5); TEST_1(http->http_content_range); /* Quiet lots of warnings */ #define _msg_header_offset msg_header_offset #define msg_header_offset(msg, http, h) \ _msg_header_offset(msg, http, (http_header_t *)h) TEST(msg_header_offset(msg, http, http_request), &http->http_request); TEST(msg_header_offset(msg, http, http_status), &http->http_status); TEST(msg_header_offset(msg, http, http_unknown), &http->http_unknown); TEST(msg_header_offset(msg, http, http_separator), &http->http_separator); TEST(msg_header_offset(msg, http, http_payload), &http->http_payload); TEST(msg_header_offset(msg, http, http_via), &http->http_via); TEST(msg_header_offset(msg, http, http_via), &http->http_via); TEST(msg_header_offset(msg, http, http_host), &http->http_host); TEST(msg_header_offset(msg, http, http_from), &http->http_from); TEST(msg_header_offset(msg, http, http_referer), &http->http_referer); TEST(msg_header_offset(msg, http, http_connection), &http->http_connection); TEST(msg_header_offset(msg, http, http_accept), &http->http_accept); TEST(msg_header_offset(msg, http, http_accept_charset), &http->http_accept_charset); TEST(msg_header_offset(msg, http, http_accept_encoding), &http->http_accept_encoding); TEST(msg_header_offset(msg, http, http_accept_language), &http->http_accept_language); TEST(msg_header_offset(msg, http, http_accept_ranges), &http->http_accept_ranges); TEST(msg_header_offset(msg, http, http_allow), &http->http_allow); TEST(msg_header_offset(msg, http, http_te), &http->http_te); TEST(msg_header_offset(msg, http, http_authorization), &http->http_authorization); TEST(msg_header_offset(msg, http, http_www_authenticate), &http->http_www_authenticate); TEST(msg_header_offset(msg, http, http_proxy_authenticate), &http->http_proxy_authenticate); TEST(msg_header_offset(msg, http, http_proxy_authorization), &http->http_proxy_authorization); TEST(msg_header_offset(msg, http, http_age), &http->http_age); TEST(msg_header_offset(msg, http, http_cache_control), &http->http_cache_control); TEST(msg_header_offset(msg, http, http_date), &http->http_date); TEST(msg_header_offset(msg, http, http_expires), &http->http_expires); TEST(msg_header_offset(msg, http, http_if_match), &http->http_if_match); TEST(msg_header_offset(msg, http, http_if_modified_since), &http->http_if_modified_since); TEST(msg_header_offset(msg, http, http_if_none_match), &http->http_if_none_match); TEST(msg_header_offset(msg, http, http_if_range), &http->http_if_range); TEST(msg_header_offset(msg, http, http_if_unmodified_since), &http->http_if_unmodified_since); TEST(msg_header_offset(msg, http, http_etag), &http->http_etag); TEST(msg_header_offset(msg, http, http_expect), &http->http_expect); TEST(msg_header_offset(msg, http, http_last_modified), &http->http_last_modified); TEST(msg_header_offset(msg, http, http_location), &http->http_location); TEST(msg_header_offset(msg, http, http_max_forwards), &http->http_max_forwards); TEST(msg_header_offset(msg, http, http_pragma), &http->http_pragma); TEST(msg_header_offset(msg, http, http_range), &http->http_range); TEST(msg_header_offset(msg, http, http_retry_after), &http->http_retry_after); TEST(msg_header_offset(msg, http, http_trailer), &http->http_trailer); TEST(msg_header_offset(msg, http, http_upgrade), &http->http_upgrade); TEST(msg_header_offset(msg, http, http_vary), &http->http_vary); TEST(msg_header_offset(msg, http, http_warning), &http->http_warning); TEST(msg_header_offset(msg, http, http_user_agent), &http->http_user_agent); TEST(msg_header_offset(msg, http, http_server), &http->http_server); TEST(msg_header_offset(msg, http, http_mime_version), &http->http_mime_version); TEST(msg_header_offset(msg, http, http_content_language), &http->http_content_language); TEST(msg_header_offset(msg, http, http_content_location), &http->http_content_location); TEST(msg_header_offset(msg, http, http_content_md5), &http->http_content_md5); TEST(msg_header_offset(msg, http, http_content_range), &http->http_content_range); TEST(msg_header_offset(msg, http, http_content_encoding), &http->http_content_encoding); TEST(msg_header_offset(msg, http, http_transfer_encoding), &http->http_transfer_encoding); TEST(msg_header_offset(msg, http, http_content_type), &http->http_content_type); TEST(msg_header_offset(msg, http, http_content_length), &http->http_content_length); TEST(http_via_class->hc_params, offsetof(http_via_t, v_common)); TEST(http_host_class->hc_params, offsetof(http_host_t, h_common)); TEST(http_from_class->hc_params, offsetof(http_from_t, g_common)); TEST(http_referer_class->hc_params, offsetof(http_referer_t, loc_common)); TEST(http_connection_class->hc_params, offsetof(http_connection_t, k_items)); TEST(http_accept_class->hc_params, offsetof(http_accept_t, ac_params)); TEST(http_accept_charset_class->hc_params, offsetof(http_accept_charset_t, aa_params)); TEST(http_accept_encoding_class->hc_params, offsetof(http_accept_encoding_t, aa_params)); TEST(http_accept_language_class->hc_params, offsetof(http_accept_language_t, aa_params)); TEST(http_accept_ranges_class->hc_params, offsetof(http_accept_ranges_t, k_items)); TEST(http_allow_class->hc_params, offsetof(http_allow_t, k_items)); TEST(http_te_class->hc_params, offsetof(http_te_t, te_params)); TEST(http_authorization_class->hc_params, offsetof(http_authorization_t, au_params)); TEST(http_www_authenticate_class->hc_params, offsetof(http_www_authenticate_t, au_params)); TEST(http_proxy_authenticate_class->hc_params, offsetof(http_proxy_authenticate_t, au_params)); TEST(http_proxy_authorization_class->hc_params, offsetof(http_proxy_authorization_t, au_params)); TEST(http_age_class->hc_params, offsetof(http_age_t, x_common)); TEST(http_cache_control_class->hc_params, offsetof(http_cache_control_t, k_items)); TEST(http_date_class->hc_params, offsetof(http_date_t, d_common)); TEST(http_expires_class->hc_params, offsetof(http_expires_t, d_common)); TEST(http_if_match_class->hc_params, offsetof(http_if_match_t, k_items)); TEST(http_if_modified_since_class->hc_params, offsetof(http_if_modified_since_t, d_common)); TEST(http_if_none_match_class->hc_params, offsetof(http_if_none_match_t, k_items)); TEST(http_if_range_class->hc_params, offsetof(http_if_range_t, ifr_common)); TEST(http_if_unmodified_since_class->hc_params, offsetof(http_if_unmodified_since_t, d_common)); TEST(http_etag_class->hc_params, offsetof(http_etag_t, g_common)); TEST(http_expect_class->hc_params, offsetof(http_expect_t, g_common)); TEST(http_last_modified_class->hc_params, offsetof(http_last_modified_t, d_common)); TEST(http_location_class->hc_params, offsetof(http_location_t, loc_common)); TEST(http_max_forwards_class->hc_params, offsetof(http_max_forwards_t, mf_common)); TEST(http_pragma_class->hc_params, offsetof(http_pragma_t, k_items)); TEST(http_range_class->hc_params, offsetof(http_range_t, rng_specs)); TEST(http_retry_after_class->hc_params, offsetof(http_retry_after_t, ra_common)); TEST(http_trailer_class->hc_params, offsetof(http_trailer_t, k_items)); TEST(http_upgrade_class->hc_params, offsetof(http_upgrade_t, k_items)); TEST(http_vary_class->hc_params, offsetof(http_vary_t, k_items)); TEST(http_warning_class->hc_params, offsetof(http_warning_t, w_common)); TEST(http_user_agent_class->hc_params, offsetof(http_user_agent_t, g_common)); TEST(http_server_class->hc_params, offsetof(http_server_t, g_common)); TEST(http_mime_version_class->hc_params, offsetof(http_mime_version_t, g_common)); TEST(http_content_language_class->hc_params, offsetof(http_content_language_t, k_items)); TEST(http_content_location_class->hc_params, offsetof(http_content_location_t, g_common)); TEST(http_content_md5_class->hc_params, offsetof(http_content_md5_t, g_common)); TEST(http_content_range_class->hc_params, offsetof(http_content_range_t, cr_common)); TEST(http_content_encoding_class->hc_params, offsetof(http_content_encoding_t, k_items)); TEST(http_transfer_encoding_class->hc_params, offsetof(http_transfer_encoding_t, k_items)); TEST(http_content_type_class->hc_params, offsetof(http_content_type_t, c_params)); TEST(http_content_length_class->hc_params, offsetof(http_content_length_t, l_common)); su_home_unref(home); END();}int count(msg_common_t *h){ http_header_t *sh = (http_header_t *)h; unsigned n; for (n = 0; sh; sh = sh->sh_next) n++; return n;}int len(msg_common_t *h){ msg_header_t *sh = (msg_header_t *)h; unsigned n; for (n = 0; sh; sh = sh->sh_next) { if (n) n +=2; n += msg_header_field_e(NULL, 0, sh, 0); } return n;}static int http_header_test(void){ su_home_t home[1] = { SU_HOME_INIT(home) }; BEGIN(); { http_request_t *rq; TEST_1(rq = http_request_make(home, "GET / HTTP/1.0")); TEST(rq->rq_method, http_method_get); TEST_S(rq->rq_method_name, "GET"); TEST_S(rq->rq_url->url_path, ""); TEST_1(rq->rq_url->url_root); TEST_S(url_as_string(home, rq->rq_url), "/"); TEST(rq->rq_version, http_version_1_0); TEST_1(rq = http_request_make(home, "GET / HTTP/1.2")); TEST(rq->rq_method, http_method_get); TEST_S(rq->rq_method_name, "GET"); TEST_S(rq->rq_url->url_path, ""); TEST_1(rq->rq_url->url_root); TEST_S(url_as_string(home, rq->rq_url), "/"); TEST_S(rq->rq_version, "HTTP/1.2"); TEST_1(rq = http_request_make(home, "GET /foo")); TEST(rq->rq_method, http_method_get); TEST_S(rq->rq_method_name, "GET"); TEST_S(rq->rq_url->url_path, "foo"); TEST_1(rq->rq_url->url_root); TEST_S(url_as_string(home, rq->rq_url), "/foo"); TEST_S(rq->rq_version, ""); TEST(rq->rq_version, http_version_0_9); } { http_status_t *st; st = http_status_make(home, "HTTP/1.0 100 Continue"); TEST_1(st); TEST_S(st->st_version, "HTTP/1.0"); TEST(st->st_version, http_version_1_0); TEST(st->st_status, 100); TEST_S(st->st_phrase, "Continue"); st = http_status_make(home, "HTTP/1.1 200"); TEST_1(st); TEST_S(st->st_version, "HTTP/1.1"); TEST(st->st_status, 200); TEST_S(st->st_phrase, ""); st = http_status_make(home, "HTTP/1.1 200 Ok"); TEST_1(st); TEST_S(st->st_version, "HTTP/1.1"); TEST(st->st_version, http_version_1_1); TEST(st->st_status, 200); TEST_S(st->st_phrase, "Ok"); st = http_status_make(home, "HTTP 99 Ok "); TEST_1(st); TEST_S(st->st_version, "HTTP"); TEST(st->st_status, 99); TEST_S(st->st_phrase, "Ok"); st = http_status_make(home, "HTTP/1.2 200 Ok"); TEST_1(st); TEST_S(st->st_version, "HTTP/1.2"); TEST(st->st_status, 200); TEST_S(st->st_phrase, "Ok"); } { http_content_range_t *cr; cr = http_content_range_make(home, "bytes 0 - 499 / *"); TEST_1(cr); TEST(cr->cr_first, 0); TEST(cr->cr_last, 499); TEST(cr->cr_length, (off_t)-1); cr = http_content_range_make(home, "bytes 500-999/9913133"); TEST_1(cr); TEST(cr->cr_first, 500); TEST(cr->cr_last, 999); TEST(cr->cr_length, 9913133); TEST_1(!http_content_range_make(home, "bytes = 0 - 499 / *,")); } { http_cookie_t *c; c = http_cookie_make(home, "$Version=1;" "foo=bar;$Domain=.nokia.com;$Path=\"\""); TEST_1(c); TEST_1(c->c_params); TEST_S(c->c_version, "1"); TEST_S(c->c_name, "foo=bar"); TEST_S(c->c_domain, ".nokia.com"); TEST_S(c->c_path, "\"\""); c = http_cookie_make(home, "$Version=1;" "foo=bar;$Domain=.nokia.com;$Path=\"\", , " "bar=bazzz;$Domain=.research.nokia.com;$Path=\"\";" "hum=ham;$Domain=.nokia.fi;$Path=\"/sofia\"" ); TEST_1(c); TEST_1(c->c_params); TEST_S(c->c_version, "1"); TEST_S(c->c_name, "foo=bar"); TEST_S(c->c_domain, ".nokia.com"); TEST_S(c->c_path, "\"\""); c = http_cookie_make(home, "foo=bar=baz1"); TEST_1(c); TEST_1(c->c_params); TEST_S(c->c_params[0], "foo=bar=baz1"); } { http_set_cookie_t *sc; sc = http_set_cookie_make(home, "foo=bar;Domain=.nokia.com;Path=\"\"" ";Foo=bar;Version=1;Secure;Max-age=1212;" "Comment=\"Jummi Jammmi\""); TEST_1(sc); TEST_1(sc->sc_params); TEST_S(sc->sc_name, "foo=bar"); TEST_S(sc->sc_version, "1"); TEST_S(sc->sc_domain, ".nokia.com"); TEST_S(sc->sc_max_age, "1212"); TEST_S(sc->sc_path, "\"\""); TEST_S(sc->sc_comment, "\"Jummi Jammmi\""); TEST(sc->sc_secure, 1); sc = http_set_cookie_make(home, "foo=bar;Domain=.nokia.com;Path=\"\"" ";Foo=bar;Version=1"); TEST_1(sc); TEST_1(sc->sc_params); TEST_S(sc->sc_name, "foo=bar"); TEST_S(sc->sc_version, "1"); TEST_S(sc->sc_domain, ".nokia.com"); TEST(sc->sc_max_age, NULL); TEST_S(sc->sc_path, "\"\""); TEST_S(sc->sc_comment, NULL); TEST(sc->sc_secure, 0); sc = http_set_cookie_make(home, "CUSTOMER=WILE_E_COYOTE; " "path=/; " "expires=Wednesday, 09-Nov-99 23:12:40 GMT"); TEST_1(sc); TEST_1(sc->sc_params); TEST_S(sc->sc_name, "CUSTOMER=WILE_E_COYOTE"); TEST_S(sc->sc_version, NULL); TEST_S(sc->sc_domain, NULL); TEST_S(sc->sc_max_age, NULL); TEST_S(sc->sc_path, "/"); TEST_S(sc->sc_comment, NULL); TEST(sc->sc_secure, 0); } {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -