From b64ca44953ab26fdfcaa2736eb9a7c9e0bd3d6aa Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 7 Nov 2016 15:00:47 +0100 Subject: [PATCH 1/4] Move make_server to the root of the net unit tests crate. --- tests/unit/net/fetch.rs | 13 +------------ tests/unit/net/lib.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index 308ef309204..bdffa9fc121 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use {DEFAULT_USER_AGENT, FetchResponseCollector, new_fetch_context, fetch_async, fetch_sync}; +use {DEFAULT_USER_AGENT, FetchResponseCollector, new_fetch_context, fetch_async, fetch_sync, make_server}; use devtools_traits::DevtoolsControlMsg; use devtools_traits::HttpRequest as DevtoolsHttpRequest; use devtools_traits::HttpResponse as DevtoolsHttpResponse; @@ -16,7 +16,6 @@ use hyper::header::{Encoding, Location, Pragma, SetCookie, qitem}; use hyper::header::{Headers, Host, HttpDate, Referer as HyperReferer}; use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; -use hyper::server::{Handler, Listening, Server}; use hyper::server::{Request as HyperRequest, Response as HyperResponse}; use hyper::status::StatusCode; use hyper::uri::RequestUri; @@ -39,16 +38,6 @@ use util::resource_files::resources_dir_path; // TODO write a struct that impls Handler for storing test values -fn make_server(handler: H) -> (Listening, Url) { - // this is a Listening server because of handle_threads() - let server = Server::http("0.0.0.0:0").unwrap().handle_threads(handler, 1).unwrap(); - let port = server.socket.port().to_string(); - let mut url_string = "http://localhost:".to_owned(); - url_string.push_str(&port); - let url = Url::parse(&url_string).unwrap(); - (server, url) -} - #[test] fn test_fetch_response_is_not_network_error() { static MESSAGE: &'static [u8] = b""; diff --git a/tests/unit/net/lib.rs b/tests/unit/net/lib.rs index 4f1f91f923d..4dbaa6fb3e5 100644 --- a/tests/unit/net/lib.rs +++ b/tests/unit/net/lib.rs @@ -35,6 +35,7 @@ extern crate util; use devtools_traits::DevtoolsControlMsg; use filemanager_thread::{TestProvider, TEST_PROVIDER}; +use hyper::server::{Handler, Listening, Server}; use net::fetch::methods::{FetchContext, fetch}; use net::filemanager_thread::FileManager; use net::test::HttpState; @@ -44,6 +45,7 @@ use net_traits::response::Response; use std::rc::Rc; use std::sync::mpsc::Sender; use std::thread; +use url::Url; const DEFAULT_USER_AGENT: &'static str = "Such Browser. Very Layout. Wow."; @@ -79,3 +81,13 @@ fn fetch_async(request: Request, target: Box, dc: Option fn fetch_sync(request: Request, dc: Option>) -> Response { fetch(Rc::new(request), &mut None, new_fetch_context(dc)) } + +fn make_server(handler: H) -> (Listening, Url) { + // this is a Listening server because of handle_threads() + let server = Server::http("0.0.0.0:0").unwrap().handle_threads(handler, 1).unwrap(); + let port = server.socket.port().to_string(); + let mut url_string = "http://localhost:".to_owned(); + url_string.push_str(&port); + let url = Url::parse(&url_string).unwrap(); + (server, url) +} From 184adb7495c6e6ebe062b88190ae563e1392bb86 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 7 Nov 2016 15:10:26 +0100 Subject: [PATCH 2/4] Simplify string handling in make_server. --- tests/unit/net/lib.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/unit/net/lib.rs b/tests/unit/net/lib.rs index 4dbaa6fb3e5..60cd847ba99 100644 --- a/tests/unit/net/lib.rs +++ b/tests/unit/net/lib.rs @@ -85,9 +85,7 @@ fn fetch_sync(request: Request, dc: Option>) -> Respo fn make_server(handler: H) -> (Listening, Url) { // this is a Listening server because of handle_threads() let server = Server::http("0.0.0.0:0").unwrap().handle_threads(handler, 1).unwrap(); - let port = server.socket.port().to_string(); - let mut url_string = "http://localhost:".to_owned(); - url_string.push_str(&port); + let url_string = format!("http://localhost:{}", server.socket.port()); let url = Url::parse(&url_string).unwrap(); (server, url) } From d777016b3a2f644823d3a432cb86b3373fddd04d Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 7 Nov 2016 18:16:44 +0100 Subject: [PATCH 3/4] Use set_default_accept_language in fetch_with_cors_cache. --- components/net/fetch/methods.rs | 6 ++---- components/net/http_loader.rs | 2 +- tests/unit/net/fetch.rs | 9 +++++++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 0e066e918aa..ad7e86424e7 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -8,7 +8,7 @@ use data_loader::decode; use devtools_traits::DevtoolsControlMsg; use fetch::cors_cache::CORSCache; use filemanager_thread::{FileManager, UIProvider}; -use http_loader::{HttpState, set_default_accept_encoding, set_request_cookies}; +use http_loader::{HttpState, set_default_accept_encoding, set_default_accept_language, set_request_cookies}; use http_loader::{NetworkHttpRequestFactory, ReadResult, StreamedResponse, obtain_response, read_block}; use http_loader::{auth_from_cache, determine_request_referrer, set_cookies_from_headers}; use http_loader::{send_response_to_devtools, send_request_to_devtools, LoadErrorType}; @@ -120,9 +120,7 @@ pub fn fetch_with_cors_cache(request: Rc, } // Step 4 - if !request.headers.borrow().has::() { - request.headers.borrow_mut().set(AcceptLanguage(vec![qitem("en-US".parse().unwrap())])); - } + set_default_accept_language(&mut request.headers.borrow_mut()); // Step 5 // TODO: Figure out what a Priority object is diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 0adf15b700e..6e05a83dbdc 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -413,7 +413,7 @@ fn set_default_accept(headers: &mut Headers) { } } -fn set_default_accept_language(headers: &mut Headers) { +pub fn set_default_accept_language(headers: &mut Headers) { if headers.has::() { return; } diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index bdffa9fc121..4d56668ad6e 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -12,7 +12,7 @@ use hyper::header::{Accept, AccessControlAllowCredentials, AccessControlAllowHea use hyper::header::{AcceptEncoding, AcceptLanguage, AccessControlAllowMethods, AccessControlMaxAge}; use hyper::header::{AccessControlRequestHeaders, AccessControlRequestMethod, Date, UserAgent}; use hyper::header::{CacheControl, ContentLanguage, ContentLength, ContentType, Expires, LastModified}; -use hyper::header::{Encoding, Location, Pragma, SetCookie, qitem}; +use hyper::header::{Encoding, Location, Pragma, Quality, QualityItem, SetCookie, qitem}; use hyper::header::{Headers, Host, HttpDate, Referer as HyperReferer}; use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; @@ -776,7 +776,12 @@ fn test_fetch_with_devtools() { let mut en_us: LanguageTag = Default::default(); en_us.language = Some("en".to_owned()); en_us.region = Some("US".to_owned()); - headers.set(AcceptLanguage(vec![qitem(en_us)])); + let mut en: LanguageTag = Default::default(); + en.language = Some("en".to_owned()); + headers.set(AcceptLanguage(vec![ + qitem(en_us), + QualityItem::new(en, Quality(500)), + ])); headers.set(UserAgent(DEFAULT_USER_AGENT.to_owned())); From b403e0004b8508c1f75274773e448237bea96cd6 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 7 Nov 2016 17:06:45 +0100 Subject: [PATCH 4/4] Rewrite test_check_default_headers_loaded_in_every_request using fetch. --- tests/unit/net/http_loader.rs | 79 +++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index e7f15eba36e..7cc93f16c42 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -7,6 +7,7 @@ use cookie_rs::Cookie as CookiePair; use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, NetworkEvent}; use devtools_traits::HttpRequest as DevtoolsHttpRequest; use devtools_traits::HttpResponse as DevtoolsHttpResponse; +use fetch_sync; use flate2::Compression; use flate2::write::{DeflateEncoder, GzEncoder}; use hyper::LanguageTag; @@ -17,7 +18,9 @@ use hyper::header::{StrictTransportSecurity, UserAgent}; use hyper::http::RawStatus; use hyper::method::Method; use hyper::mime::{Mime, SubLevel, TopLevel}; +use hyper::server::{Request as HyperRequest, Response as HyperResponse}; use hyper::status::StatusCode; +use make_server; use msg::constellation_msg::{PipelineId, TEST_PIPELINE_ID}; use net::cookie::Cookie; use net::cookie_storage::CookieStorage; @@ -27,9 +30,10 @@ use net::test::{HttpRequest, HttpRequestFactory, HttpState, LoadError, UIProvide use net::test::{HttpResponse, LoadErrorType}; use net_traits::{CookieSource, IncludeSubdomains, LoadContext, LoadData}; use net_traits::{CustomResponse, LoadOrigin, Metadata, ReferrerPolicy}; +use net_traits::request::{Request, RequestInit, Destination}; use std::borrow::Cow; use std::io::{self, Cursor, Read, Write}; -use std::sync::{Arc, RwLock, mpsc}; +use std::sync::{Arc, Mutex, RwLock, mpsc}; use std::sync::mpsc::Receiver; use std::thread; use url::Url; @@ -229,20 +233,6 @@ impl HttpRequest for MockRequest { } } -struct AssertMustHaveHeadersRequestFactory { - expected_headers: Headers, - body: Vec -} - -impl HttpRequestFactory for AssertMustHaveHeadersRequestFactory { - type R = MockRequest; - - fn create(&self, _: Url, _: Method, headers: Headers) -> Result { - assert_eq!(headers, self.expected_headers); - Ok(MockRequest::new(ResponseType::Text(self.body.clone()))) - } -} - struct AssertAuthHeaderRequestFactory { expected_headers: Headers, body: Vec @@ -373,14 +363,12 @@ pub fn expect_devtools_http_response(devtools_port: &Receiver hostname.to_owned(), + _ => panic!() + }; + + headers.set(Host { hostname: hostname, port: url.port() }); let accept = Accept(vec![ qitem(Mime(TopLevel::Text, SubLevel::Html, vec![])), @@ -408,25 +401,37 @@ fn test_check_default_headers_loaded_in_every_request() { QualityItem::new(en, Quality(500)), ])); - headers.set(UserAgent(DEFAULT_USER_AGENT.to_owned())); + headers.set(UserAgent(::DEFAULT_USER_AGENT.to_owned())); + + *expected_headers.lock().unwrap() = Some(headers.clone()); // Testing for method.GET - let _ = load(&load_data, &ui_provider, &http_state, None, - &AssertMustHaveHeadersRequestFactory { - expected_headers: headers.clone(), - body: <[_]>::to_vec(&[]) - }, DEFAULT_USER_AGENT.into(), &CancellationListener::new(None), None); + let request = Request::from_init(RequestInit { + url: url.clone(), + method: Method::Get, + destination: Destination::Document, + origin: url.clone(), + pipeline_id: Some(TEST_PIPELINE_ID), + .. RequestInit::default() + }); + let response = fetch_sync(request, None); + assert!(response.status.unwrap().is_success()); // Testing for method.POST - load_data.method = Method::Post; - headers.set(ContentLength(0 as u64)); + *expected_headers.lock().unwrap() = Some(headers.clone()); + let request = Request::from_init(RequestInit { + url: url.clone(), + method: Method::Post, + destination: Destination::Document, + origin: url.clone(), + pipeline_id: Some(TEST_PIPELINE_ID), + .. RequestInit::default() + }); + let response = fetch_sync(request, None); + assert!(response.status.unwrap().is_success()); - let _ = load(&load_data, &ui_provider, &http_state, None, - &AssertMustHaveHeadersRequestFactory { - expected_headers: headers, - body: <[_]>::to_vec(&[]) - }, DEFAULT_USER_AGENT.into(), &CancellationListener::new(None), None); + let _ = server.close(); } #[test]