ZeroTierOne/zeroidc/vendor/http/benches/header_name.rs

297 lines
7.1 KiB
Rust

#![feature(test)]
extern crate bytes;
extern crate http;
extern crate test;
use http::header::HeaderName;
use test::Bencher;
fn make_all_known_headers() -> Vec<Vec<u8>> {
// Standard request headers
vec![b"A-IM".to_vec(),
b"Accept".to_vec(),
b"Accept-Charset".to_vec(),
b"Accept-Datetime".to_vec(),
b"Accept-Encoding".to_vec(),
b"Accept-Language".to_vec(),
b"Access-Control-Request-Method".to_vec(),
b"Authorization".to_vec(),
b"Cache-Control".to_vec(),
b"Connection".to_vec(),
b"Permanent".to_vec(),
b"Content-Length".to_vec(),
b"Content-MD5".to_vec(),
b"Content-Type".to_vec(),
b"Cookie".to_vec(),
b"Date".to_vec(),
b"Expect".to_vec(),
b"Forwarded".to_vec(),
b"From".to_vec(),
b"Host".to_vec(),
b"Permanent".to_vec(),
b"HTTP2-Settings".to_vec(),
b"If-Match".to_vec(),
b"If-Modified-Since".to_vec(),
b"If-None-Match".to_vec(),
b"If-Range".to_vec(),
b"If-Unmodified-Since".to_vec(),
b"Max-Forwards".to_vec(),
b"Origin".to_vec(),
b"Pragma".to_vec(),
b"Proxy-Authorization".to_vec(),
b"Range".to_vec(),
b"Referer".to_vec(),
b"TE".to_vec(),
b"User-Agent".to_vec(),
b"Upgrade".to_vec(),
b"Via".to_vec(),
b"Warning".to_vec(),
// common_non_standard
b"Upgrade-Insecure-Requests".to_vec(),
b"Upgrade-Insecure-Requests".to_vec(),
b"X-Requested-With".to_vec(),
b"DNT".to_vec(),
b"X-Forwarded-For".to_vec(),
b"X-Forwarded-Host".to_vec(),
b"X-Forwarded-Proto".to_vec(),
b"Front-End-Https".to_vec(),
b"X-Http-Method-Override".to_vec(),
b"X-ATT-DeviceId".to_vec(),
b"X-Wap-Profile".to_vec(),
b"Proxy-Connection".to_vec(),
b"X-UIDH".to_vec(),
b"X-Csrf-Token".to_vec(),
b"X-Request-ID".to_vec(),
b"X-Correlation-ID".to_vec(),
b"Save-Data".to_vec(),
// standard_response_headers
b"Accept-Patch".to_vec(),
b"Accept-Ranges".to_vec(),
b"Access-Control-Allow-Credentials".to_vec(),
b"Access-Control-Allow-Headers".to_vec(),
b"Access-Control-Allow-Methods".to_vec(),
b"Access-Control-Allow-Origin".to_vec(),
b"Access-Control-Expose-Headers".to_vec(),
b"Access-Control-Max-Age".to_vec(),
b"Age".to_vec(),
b"Allow".to_vec(),
b"Alt-Svc".to_vec(),
b"Cache-Control".to_vec(),
b"Connection".to_vec(),
b"Content-Disposition".to_vec(),
b"Content-Encoding".to_vec(),
b"Content-Language".to_vec(),
b"Content-Length".to_vec(),
b"Content-Location".to_vec(),
b"Content-MD5".to_vec(),
b"Content-Range".to_vec(),
b"Content-Type".to_vec(),
b"Date".to_vec(),
b"Delta-Base".to_vec(),
b"ETag".to_vec(),
b"Expires".to_vec(),
b"IM".to_vec(),
b"Last-Modified".to_vec(),
b"Link".to_vec(),
b"Location".to_vec(),
b"P3P".to_vec(),
b"Permanent".to_vec(),
b"Pragma".to_vec(),
b"Proxy-Authenticate".to_vec(),
b"Public-Key-Pins".to_vec(),
b"Retry-After".to_vec(),
b"Server".to_vec(),
b"Set-Cookie".to_vec(),
b"Strict-Transport-Security".to_vec(),
b"Tk".to_vec(),
b"Trailer".to_vec(),
b"Transfer-Encoding".to_vec(),
b"Upgrade".to_vec(),
b"Vary".to_vec(),
b"Via".to_vec(),
b"Warning".to_vec(),
b"WWW-Authenticate".to_vec(),
b"X-Frame-Options".to_vec(),
// common_non_standard_response
b"Content-Security-Policy".to_vec(),
b"Refresh".to_vec(),
b"Status".to_vec(),
b"Timing-Allow-Origin".to_vec(),
b"X-Content-Duration".to_vec(),
b"X-Content-Security-Policy".to_vec(),
b"X-Content-Type-Options".to_vec(),
b"X-Correlation-ID".to_vec(),
b"X-Powered-By".to_vec(),
b"X-Request-ID".to_vec(),
b"X-UA-Compatible".to_vec(),
b"X-WebKit-CSP".to_vec(),
b"X-XSS-Protection".to_vec(),
]
}
static ALL_KNOWN_HEADERS: &[&str] = &[
// Standard request headers
"a-im",
"accept",
"accept-charset",
"accept-datetime",
"accept-encoding",
"accept-language",
"access-control-request-method",
"authorization",
"cache-control",
"connection",
"permanent",
"content-length",
"content-md5",
"content-type",
"cookie",
"date",
"expect",
"forwarded",
"from",
"host",
"permanent",
"http2-settings",
"if-match",
"if-modified-since",
"if-none-match",
"if-range",
"if-unmodified-since",
"max-forwards",
"origin",
"pragma",
"proxy-authorization",
"range",
"referer",
"te",
"user-agent",
"upgrade",
"via",
"warning",
// common_non_standard
"upgrade-insecure-requests",
"upgrade-insecure-requests",
"x-requested-with",
"dnt",
"x-forwarded-for",
"x-forwarded-host",
"x-forwarded-proto",
"front-end-https",
"x-http-method-override",
"x-att-deviceid",
"x-wap-profile",
"proxy-connection",
"x-uidh",
"x-csrf-token",
"x-request-id",
"x-correlation-id",
"save-data",
// standard_response_headers
"accept-patch",
"accept-ranges",
"access-control-allow-credentials",
"access-control-allow-headers",
"access-control-allow-methods",
"access-control-allow-origin",
"access-control-expose-headers",
"access-control-max-age",
"age",
"allow",
"alt-svc",
"cache-control",
"connection",
"content-disposition",
"content-encoding",
"content-language",
"content-length",
"content-location",
"content-md5",
"content-range",
"content-type",
"date",
"delta-base",
"etag",
"expires",
"im",
"last-modified",
"link",
"location",
"p3p",
"permanent",
"pragma",
"proxy-authenticate",
"public-key-pins",
"retry-after",
"server",
"set-cookie",
"strict-transport-security",
"tk",
"trailer",
"transfer-encoding",
"upgrade",
"vary",
"via",
"warning",
"www-authenticate",
"x-frame-options",
// common_non_standard_response
"content-security-policy",
"refresh",
"status",
"timing-allow-origin",
"x-content-duration",
"x-content-security-policy",
"x-content-type-options",
"x-correlation-id",
"x-powered-by",
"x-request-id",
"x-ua-compatible",
"x-webkit-csp",
"x-xss-protection",
];
#[bench]
fn header_name_easy(b: &mut Bencher) {
let name = b"Content-type";
b.iter(|| {
HeaderName::from_bytes(&name[..]).unwrap();
});
}
#[bench]
fn header_name_custom(b: &mut Bencher) {
let name = b"Foo-Bar-Baz-Blah";
b.iter(|| {
HeaderName::from_bytes(&name[..]).unwrap();
});
}
#[bench]
fn header_name_bad(b: &mut Bencher) {
let name = b"bad header name";
b.iter(|| {
HeaderName::from_bytes(&name[..]).expect_err("Bad header name");
});
}
#[bench]
fn header_name_various(b: &mut Bencher) {
let all_known_headers = make_all_known_headers();
b.iter(|| {
for name in &all_known_headers{
HeaderName::from_bytes(name.as_slice()).unwrap();
}
});
}
#[bench]
fn header_name_from_static(b: &mut Bencher) {
b.iter(|| {
for name in ALL_KNOWN_HEADERS {
HeaderName::from_static(name);
}
});
}