mirror of
https://github.com/servo/servo.git
synced 2025-06-24 00:54:32 +01:00
Rewrite test_load_follows_a_redirect.
This commit is contained in:
parent
996756687c
commit
27d90fb6a8
1 changed files with 28 additions and 47 deletions
|
@ -132,18 +132,6 @@ impl HttpResponse for MockResponse {
|
||||||
fn status_raw(&self) -> &RawStatus { &self.sr }
|
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 {
|
struct TestProvider {
|
||||||
username: String,
|
username: String,
|
||||||
password: String,
|
password: String,
|
||||||
|
@ -191,7 +179,6 @@ fn respond_404() -> MockResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ResponseType {
|
enum ResponseType {
|
||||||
Redirect(String),
|
|
||||||
RedirectWithHeaders(String, Headers),
|
RedirectWithHeaders(String, Headers),
|
||||||
Text(Vec<u8>),
|
Text(Vec<u8>),
|
||||||
WithHeaders(Vec<u8>, Headers),
|
WithHeaders(Vec<u8>, Headers),
|
||||||
|
@ -211,9 +198,6 @@ impl MockRequest {
|
||||||
|
|
||||||
fn response_for_request_type(t: ResponseType) -> Result<MockResponse, LoadError> {
|
fn response_for_request_type(t: ResponseType) -> Result<MockResponse, LoadError> {
|
||||||
match t {
|
match t {
|
||||||
ResponseType::Redirect(location) => {
|
|
||||||
Ok(redirect_to(location))
|
|
||||||
},
|
|
||||||
ResponseType::RedirectWithHeaders(location, headers) => {
|
ResponseType::RedirectWithHeaders(location, headers) => {
|
||||||
Ok(redirect_with_headers(location, headers))
|
Ok(redirect_with_headers(location, headers))
|
||||||
},
|
},
|
||||||
|
@ -1260,41 +1244,38 @@ fn test_load_succeeds_with_a_redirect_loop() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_load_follows_a_redirect() {
|
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 {
|
let post_redirect_url = post_url.clone();
|
||||||
type R = MockRequest;
|
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> {
|
let request = Request::from_init(RequestInit {
|
||||||
if url.domain().unwrap() == "mozilla.com" {
|
url: pre_url.clone(),
|
||||||
Ok(MockRequest::new(ResponseType::Redirect("http://mozilla.org".to_owned())))
|
method: Method::Get,
|
||||||
} else if url.domain().unwrap() == "mozilla.org" {
|
destination: Destination::Document,
|
||||||
Ok(
|
origin: pre_url.clone(),
|
||||||
MockRequest::new(
|
pipeline_id: Some(TEST_PIPELINE_ID),
|
||||||
ResponseType::Text(
|
.. RequestInit::default()
|
||||||
<[_]>::to_vec("Yay!".as_bytes())
|
});
|
||||||
)
|
let response = fetch_sync(request, None);
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
panic!("unexpected host {:?}", url)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let url = ServoUrl::parse("http://mozilla.com").unwrap();
|
let _ = pre_server.close();
|
||||||
let load_data = LoadData::new(LoadContext::Browsing, url.clone(), &HttpTest);
|
let _ = post_server.close();
|
||||||
let http_state = HttpState::new();
|
|
||||||
let ui_provider = TestProvider::new();
|
|
||||||
|
|
||||||
match load(&load_data, &ui_provider, &http_state, None, &Factory,
|
let response = response.to_actual();
|
||||||
DEFAULT_USER_AGENT.into(), &CancellationListener::new(None), None) {
|
assert!(response.status.unwrap().is_success());
|
||||||
Err(e) => panic!("expected to follow a redirect {:?}", e),
|
assert_eq!(*response.body.lock().unwrap(),
|
||||||
Ok(mut lr) => {
|
ResponseBody::Done(b"Yay!".to_vec()));
|
||||||
let response = read_response(&mut lr);
|
|
||||||
assert_eq!(response, "Yay!".to_owned());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DontConnectFactory;
|
struct DontConnectFactory;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue