Test fixes:

- Hack to stop hitting unreachable on referer
 - add fetch_done to make sync work
 - Make datauris work by setting the response URI, spec bug
 - Allow for empty bodies
 - Make request bodies work (pass to http, fix fencepost in iter count)
This commit is contained in:
Manish Goregaokar 2016-06-01 20:32:40 +05:30
parent 8bcf54deb5
commit 6e29b872d7
8 changed files with 206 additions and 126 deletions

View file

@ -15,6 +15,7 @@ use hyper::status::StatusCode;
use hyper::uri::RequestUri;
use net::fetch::cors_cache::CORSCache;
use net::fetch::methods::{fetch, fetch_with_cors_cache};
use net::http_loader::HttpState;
use net_traits::FetchTaskTarget;
use net_traits::request::{Origin, RedirectMode, Referer, Request, RequestMode};
use net_traits::response::{CacheState, Response, ResponseBody, ResponseType};
@ -44,11 +45,12 @@ impl FetchTaskTarget for FetchResponseCollector {
fn process_response_eof(&mut self, response: &Response) {
self.sender.send(response.clone());
}
fn fetch_done(&mut self, _: &Response, _: bool) {}
}
fn fetch_async(request: Request, target: Box<FetchTaskTarget + Send>) {
thread::spawn(move || {
fetch(Rc::new(request), Some(target));
fetch(Rc::new(request), &mut Some(target), HttpState::new());
});
}
@ -72,10 +74,10 @@ fn test_fetch_response_is_not_network_error() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
if fetch_response.is_network_error() {
@ -93,10 +95,10 @@ fn test_fetch_response_body_matches_const_message() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response.is_network_error());
@ -115,10 +117,10 @@ fn test_fetch_aboutblank() {
let url = Url::parse("about:blank").unwrap();
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
assert!(!fetch_response.is_network_error());
assert!(*fetch_response.body.lock().unwrap() == ResponseBody::Done(vec![]));
}
@ -130,7 +132,7 @@ fn test_fetch_data() {
let request = Request::new(url, Some(origin), false);
request.same_origin_data.set(true);
let expected_resp_body = "<p>Servo</p>".to_owned();
let fetch_response = fetch(Rc::new(request), None);
let fetch_response = fetch(Rc::new(request), &mut None, HttpState::new());
assert!(!fetch_response.is_network_error());
assert_eq!(fetch_response.headers.len(), 1);
@ -159,7 +161,7 @@ fn test_fetch_file() {
let request = Request::new(url, Some(origin), false);
request.same_origin_data.set(true);
let fetch_response = fetch(Rc::new(request), None);
let fetch_response = fetch(Rc::new(request), &mut None, HttpState::new());
assert!(!fetch_response.is_network_error());
assert_eq!(fetch_response.headers.len(), 1);
let content_type: &ContentType = fetch_response.headers.get().unwrap();
@ -198,12 +200,12 @@ fn test_cors_preflight_fetch() {
let origin = Origin::Origin(UrlOrigin::new_opaque());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
request.use_cors_preflight = true;
request.mode = RequestMode::CORSMode;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response.is_network_error());
@ -237,14 +239,14 @@ fn test_cors_preflight_cache_fetch() {
let origin = Origin::Origin(UrlOrigin::new_opaque());
let mut request = Request::new(url.clone(), Some(origin.clone()), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
request.use_cors_preflight = true;
request.mode = RequestMode::CORSMode;
let wrapped_request0 = Rc::new(request.clone());
let wrapped_request1 = Rc::new(request);
let fetch_response0 = fetch_with_cors_cache(wrapped_request0.clone(), &mut cache, None);
let fetch_response1 = fetch_with_cors_cache(wrapped_request1.clone(), &mut cache, None);
let fetch_response0 = fetch_with_cors_cache(wrapped_request0.clone(), &mut cache, &mut None, HttpState::new());
let fetch_response1 = fetch_with_cors_cache(wrapped_request1.clone(), &mut cache, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response0.is_network_error() && !fetch_response1.is_network_error());
@ -287,12 +289,12 @@ fn test_cors_preflight_fetch_network_error() {
let origin = Origin::Origin(UrlOrigin::new_opaque());
let mut request = Request::new(url, Some(origin), false);
*request.method.borrow_mut() = Method::Extension("CHICKEN".to_owned());
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
request.use_cors_preflight = true;
request.mode = RequestMode::CORSMode;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(fetch_response.is_network_error());
@ -312,10 +314,10 @@ fn test_fetch_response_is_basic_filtered() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response.is_network_error());
@ -359,11 +361,11 @@ fn test_fetch_response_is_cors_filtered() {
// an origin mis-match will stop it from defaulting to a basic filtered response
let origin = Origin::Origin(UrlOrigin::new_opaque());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
request.mode = RequestMode::CORSMode;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response.is_network_error());
@ -393,10 +395,10 @@ fn test_fetch_response_is_opaque_filtered() {
// an origin mis-match will fall through to an Opaque filtered response
let origin = Origin::Origin(UrlOrigin::new_opaque());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response.is_network_error());
@ -442,11 +444,11 @@ fn test_fetch_response_is_opaque_redirect_filtered() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
request.redirect_mode.set(RedirectMode::Manual);
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
assert!(!fetch_response.is_network_error());
@ -478,13 +480,13 @@ fn test_fetch_with_local_urls_only() {
let do_fetch = |url: Url| {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
// Set the flag.
request.local_urls_only = true;
let wrapped_request = Rc::new(request);
fetch(wrapped_request, None)
fetch(wrapped_request, &mut None, HttpState::new())
};
let local_url = Url::parse("about:blank").unwrap();
@ -520,10 +522,10 @@ fn setup_server_and_fetch(message: &'static [u8], redirect_cap: u32) -> Response
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let wrapped_request = Rc::new(request);
let fetch_response = fetch(wrapped_request, None);
let fetch_response = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
fetch_response
}
@ -605,11 +607,11 @@ fn test_fetch_redirect_updates_method_runner(tx: Sender<bool>, status_code: Stat
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
*request.method.borrow_mut() = method;
let wrapped_request = Rc::new(request);
let _ = fetch(wrapped_request, None);
let _ = fetch(wrapped_request, &mut None, HttpState::new());
let _ = server.close();
}
@ -681,7 +683,7 @@ fn test_fetch_async_returns_complete_response() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let (tx, rx) = channel();
let listener = Box::new(FetchResponseCollector {
@ -706,7 +708,7 @@ fn test_opaque_filtered_fetch_async_returns_complete_response() {
// an origin mis-match will fall through to an Opaque filtered response
let origin = Origin::Origin(UrlOrigin::new_opaque());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
let (tx, rx) = channel();
let listener = Box::new(FetchResponseCollector {
@ -746,7 +748,7 @@ fn test_opaque_redirect_filtered_fetch_async_returns_complete_response() {
let origin = Origin::Origin(url.origin());
let mut request = Request::new(url, Some(origin), false);
request.referer = Referer::NoReferer;
*request.referer.borrow_mut() = Referer::NoReferer;
request.redirect_mode.set(RedirectMode::Manual);
let (tx, rx) = channel();