summaryrefslogtreecommitdiffstats
path: root/third_party/rust/http/benches/header_name.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/http/benches/header_name.rs')
-rw-r--r--third_party/rust/http/benches/header_name.rs296
1 files changed, 296 insertions, 0 deletions
diff --git a/third_party/rust/http/benches/header_name.rs b/third_party/rust/http/benches/header_name.rs
new file mode 100644
index 0000000000..4249f98778
--- /dev/null
+++ b/third_party/rust/http/benches/header_name.rs
@@ -0,0 +1,296 @@
+#![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);
+ }
+ });
+}