diff --git a/.travis.yml b/.travis.yml index 85283ef3..358e7d06 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ sudo: false script: - cargo build - cargo test - - cargo bench --no-run + - cargo bench after_success: | [ $TRAVIS_BRANCH = master ] && diff --git a/benches/server.rs b/benches/server.rs deleted file mode 100644 index c06f0bc7..00000000 --- a/benches/server.rs +++ /dev/null @@ -1,35 +0,0 @@ -#![deny(warnings)] -#![feature(test)] -extern crate hyper; -extern crate test; - -use test::Bencher; -use std::io::{Read, Write}; - -use hyper::method::Method::Get; -use hyper::server::{Request, Response}; - -static PHRASE: &'static [u8] = b"Benchmarking hyper vs others!"; - -fn request(url: hyper::Url) { - let req = hyper::client::Request::new(Get, url).unwrap(); - let mut s = String::new(); - req.start().unwrap().send().unwrap().read_to_string(&mut s).unwrap(); -} - -fn hyper_handle(_: Request, res: Response) { - let mut res = res.start().unwrap(); - res.write_all(PHRASE).unwrap(); - res.end().unwrap(); -} - -#[bench] -fn bench_hyper(b: &mut Bencher) { - let server = hyper::Server::http(hyper_handle); - let mut listener = server.listen("127.0.0.1").unwrap(); - - let url = hyper::Url::parse(&*format!("http://{}", listener.socket)).unwrap(); - b.iter(|| request(url.clone())); - listener.close().unwrap(); -} - diff --git a/src/header/parsing.rs b/src/header/parsing.rs index 5727a2b9..1186bbb6 100644 --- a/src/header/parsing.rs +++ b/src/header/parsing.rs @@ -1,9 +1,8 @@ //! Utility functions for Header implementations. -extern crate time; - use std::str; use std::fmt; +use time; /// Reads a single raw string when parsing a header pub fn from_one_raw_str(raw: &[Vec]) -> Option { @@ -83,3 +82,43 @@ pub fn tm_from_str(s: &str) -> Option { time::strptime(s, "%c") }).ok() } + +#[cfg(test)] +mod tests { + use time::Tm; + use super::tm_from_str; + + const NOV_07: Tm = Tm { + tm_nsec: 0, + tm_sec: 37, + tm_min: 48, + tm_hour: 8, + tm_mday: 7, + tm_mon: 10, + tm_year: 94, + tm_wday: 0, + tm_isdst: 0, + tm_yday: 0, + tm_utcoff: 0, + }; + + #[test] + fn test_imf_fixdate() { + assert_eq!(tm_from_str("Sun, 07 Nov 1994 08:48:37 GMT"), + Some(NOV_07)); + } + + #[test] + fn test_rfc_850() { + assert_eq!(tm_from_str("Sunday, 07-Nov-94 08:48:37 GMT"), + Some(NOV_07)); + } + + #[test] + fn test_asctime() { + assert_eq!(tm_from_str("Sun Nov 7 08:48:37 1994"), + Some(NOV_07)); + } + + +} diff --git a/src/header/shared/time.rs b/src/header/shared/time.rs deleted file mode 100644 index 90e72f1d..00000000 --- a/src/header/shared/time.rs +++ /dev/null @@ -1,34 +0,0 @@ -//! Provides utility function to parse HTTP header value time. - -extern crate time; - -/// Get a Tm from HTTP date formats. -// Prior to 1995, there were three different formats commonly used by -// servers to communicate timestamps. For compatibility with old -// implementations, all three are defined here. The preferred format is -// a fixed-length and single-zone subset of the date and time -// specification used by the Internet Message Format [RFC5322]. -// -// HTTP-date = IMF-fixdate / obs-date -// -// An example of the preferred format is -// -// Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate -// -// Examples of the two obsolete formats are -// -// Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format -// Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format -// -// A recipient that parses a timestamp value in an HTTP header field -// MUST accept all three HTTP-date formats. When a sender generates a -// header field that contains one or more timestamps defined as -// HTTP-date, the sender MUST generate those timestamps in the -// IMF-fixdate format. -pub fn tm_from_str(s: &str) -> Option { - time::strptime(s, "%a, %d %b %Y %T %Z").or_else(|_| { - time::strptime(s, "%A, %d-%b-%y %T %Z") - }).or_else(|_| { - time::strptime(s, "%c") - }).ok() -}