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

HTTP Cache parallelism experiment #23553

Closed
wants to merge 3 commits into from
Closed
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Http cache: re-enable and update unit-test

  • Loading branch information
gterzian committed Jun 14, 2019
commit f767240182cc6aa34e53c02a6a7493dbaf4fecba
@@ -2,48 +2,50 @@
* 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();
let entry = cache.get_entry(&request).unwrap();
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);
entry.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 = entry.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.