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

Various improvements and update to the http cache #23494

Merged
merged 4 commits into from Jun 22, 2019
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Prev

http-cache: re-enable and update test

  • Loading branch information
gterzian committed Jun 22, 2019
commit 689b7971b82b6268de3c4eaff2d54dfc77910088
@@ -2,48 +2,49 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */

use hyper::header::{Expires, HttpDate};
use hyper::method::Method;
use hyper::status::StatusCode;
use crossbeam_channel::unbounded;
use http::header::{HeaderValue, EXPIRES};
use http::StatusCode;
use msg::constellation_msg::TEST_PIPELINE_ID;
use net::http_cache::HttpCache;
use net_traits::request::{Destination, Request, RequestInit};
use net_traits::request::{Origin, Request};
use net_traits::response::{Response, ResponseBody};
use net_traits::{ResourceFetchTiming, ResourceTimingType};
use servo_url::ServoUrl;
use std::sync::mpsc::channel;


#[test]
fn test_refreshing_resource_sets_done_chan_the_appropriate_value() {
let response_bodies = vec![ResponseBody::Receiving(vec![]),
ResponseBody::Empty,
ResponseBody::Done(vec![])];
let response_bodies = vec![
ResponseBody::Receiving(vec![]),
ResponseBody::Empty,
ResponseBody::Done(vec![]),
];
let url = ServoUrl::parse("https://servo.org").unwrap();
let request = Request::from_init(RequestInit {
url: url.clone(),
method: Method::Get,
destination: Destination::Document,
origin: url.clone().origin(),
pipeline_id: Some(TEST_PIPELINE_ID),
.. RequestInit::default()
});
let mut response = Response::new(url.clone());
let request = Request::new(
url.clone(),
Some(Origin::Origin(url.clone().origin())),
Some(TEST_PIPELINE_ID),
);
let timing = ResourceFetchTiming::new(ResourceTimingType::Navigation);
let mut response = Response::new(url.clone(), timing);
// Expires header makes the response cacheable.
response.headers.set(Expires(HttpDate(time::now())));
response
.headers
.insert(EXPIRES, HeaderValue::from_str("-10").unwrap());
let mut cache = HttpCache::new();
response_bodies.iter().for_each(|body| {
let mut cache = HttpCache::new();
*response.body.lock().unwrap() = body;
*response.body.lock().unwrap() = body.clone();
// First, store the 'normal' response.
cache.store(&request, &response);
// Second, mutate the response into a 304 response, and refresh the stored one.
response.status = Some(StatusCode::NotModified);
let mut done_chan = Some(channel());
let refreshed_response = cache.refresh(&request, response, &mut done_chan);
response.status = Some((StatusCode::NOT_MODIFIED, String::from("304")));
let mut done_chan = Some(unbounded());
let refreshed_response = cache.refresh(&request, response.clone(), &mut done_chan);
// Ensure a resource was found, and refreshed.
assert!(refreshed_response.is_some());
match body {
ResponseBody::Receiving(_) => assert!(done_chan.is_some()),
ResponseBody::Empty | ResponseBody::Done(_) => assert!(done_chan.is_none())
ResponseBody::Empty | ResponseBody::Done(_) => assert!(done_chan.is_none()),
}
})
}
@@ -14,6 +14,7 @@ mod fetch;
mod file_loader;
mod filemanager_thread;
mod hsts;
mod http_cache;
mod http_loader;
mod mime_classifier;
mod resource_thread;
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.