Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite and remove most unit tests for the legacy fetch stack. #14315

Merged
merged 14 commits into from Nov 24, 2016
Next

Rewrite test_load_follows_a_redirect.

  • Loading branch information
Ms2ger committed Nov 23, 2016
commit 27d90fb6a815b42ef18c39d4a2f41efd660a730b
@@ -132,18 +132,6 @@ impl HttpResponse for MockResponse {
fn status_raw(&self) -> &RawStatus { &self.sr }
}

fn redirect_to(host: String) -> MockResponse {
let mut headers = Headers::new();
headers.set(Location(host.to_owned()));

MockResponse::new(
headers,
StatusCode::MovedPermanently,
RawStatus(301, Cow::Borrowed("Moved Permanently")),
b"".to_vec()
)
}

struct TestProvider {
username: String,
password: String,
@@ -191,7 +179,6 @@ fn respond_404() -> MockResponse {
}

enum ResponseType {
Redirect(String),
RedirectWithHeaders(String, Headers),
Text(Vec<u8>),
WithHeaders(Vec<u8>, Headers),
@@ -211,9 +198,6 @@ impl MockRequest {

fn response_for_request_type(t: ResponseType) -> Result<MockResponse, LoadError> {
match t {
ResponseType::Redirect(location) => {
Ok(redirect_to(location))
},
ResponseType::RedirectWithHeaders(location, headers) => {
Ok(redirect_with_headers(location, headers))
},
@@ -1260,41 +1244,38 @@ fn test_load_succeeds_with_a_redirect_loop() {

#[test]
fn test_load_follows_a_redirect() {
struct Factory;
let post_handler = move |request: HyperRequest, response: HyperResponse| {
assert_eq!(request.method, Method::Get);
response.send(b"Yay!").unwrap();
};
let (mut post_server, post_url) = make_server(post_handler);

impl HttpRequestFactory for Factory {
type R = MockRequest;
let post_redirect_url = post_url.clone();
let pre_handler = move |request: HyperRequest, mut response: HyperResponse| {
assert_eq!(request.method, Method::Get);
response.headers_mut().set(Location(post_redirect_url.to_string()));
*response.status_mut() = StatusCode::MovedPermanently;
response.send(b"").unwrap();
};
let (mut pre_server, pre_url) = make_server(pre_handler);

fn create(&self, url: ServoUrl, _: Method, _: Headers) -> Result<MockRequest, LoadError> {
if url.domain().unwrap() == "mozilla.com" {
Ok(MockRequest::new(ResponseType::Redirect("http://mozilla.org".to_owned())))
} else if url.domain().unwrap() == "mozilla.org" {
Ok(
MockRequest::new(
ResponseType::Text(
<[_]>::to_vec("Yay!".as_bytes())
)
)
)
} else {
panic!("unexpected host {:?}", url)
}
}
}
let request = Request::from_init(RequestInit {
url: pre_url.clone(),
method: Method::Get,
destination: Destination::Document,
origin: pre_url.clone(),
pipeline_id: Some(TEST_PIPELINE_ID),
.. RequestInit::default()
});
let response = fetch_sync(request, None);

let url = ServoUrl::parse("http://mozilla.com").unwrap();
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), &HttpTest);
let http_state = HttpState::new();
let ui_provider = TestProvider::new();
let _ = pre_server.close();
let _ = post_server.close();

match load(&load_data, &ui_provider, &http_state, None, &Factory,
DEFAULT_USER_AGENT.into(), &CancellationListener::new(None), None) {
Err(e) => panic!("expected to follow a redirect {:?}", e),
Ok(mut lr) => {
let response = read_response(&mut lr);
assert_eq!(response, "Yay!".to_owned());
}
}
let response = response.to_actual();
assert!(response.status.unwrap().is_success());
assert_eq!(*response.body.lock().unwrap(),
ResponseBody::Done(b"Yay!".to_vec()));
}

struct DontConnectFactory;
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.