aboutsummaryrefslogtreecommitdiffstats
path: root/components/net
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-11-13 08:55:10 +0100
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-11-26 09:34:14 +0100
commitff1e8aaa081ef917ecf8912ddd26b60040ff42fe (patch)
treefa8f931d85fca2b9e1801f45cde1a1283320eac0 /components/net
parent526f6fcadddcc06cb45484bb0855aefb6560db97 (diff)
downloadservo-ff1e8aaa081ef917ecf8912ddd26b60040ff42fe.tar.gz
servo-ff1e8aaa081ef917ecf8912ddd26b60040ff42fe.zip
Adapt fetch blob test to new way of fetching in chunks
Diffstat (limited to 'components/net')
-rw-r--r--components/net/tests/fetch.rs42
1 files changed, 37 insertions, 5 deletions
diff --git a/components/net/tests/fetch.rs b/components/net/tests/fetch.rs
index 51f25059ad1..9fc8c351f83 100644
--- a/components/net/tests/fetch.rs
+++ b/components/net/tests/fetch.rs
@@ -29,15 +29,16 @@ use mime::{self, Mime};
use msg::constellation_msg::TEST_PIPELINE_ID;
use net::connector::create_ssl_connector_builder;
use net::fetch::cors_cache::CorsCache;
-use net::fetch::methods::{CancellationListener, FetchContext};
+use net::fetch::methods::{self, CancellationListener, FetchContext};
use net::filemanager_thread::FileManager;
use net::hsts::HstsEntry;
use net::test::HttpState;
use net_traits::request::{Destination, Origin, RedirectMode, Referrer, Request, RequestMode};
use net_traits::response::{CacheState, Response, ResponseBody, ResponseType};
use net_traits::{
- IncludeSubdomains, NetworkError, ReferrerPolicy, ResourceFetchTiming, ResourceTimingType,
+ FetchTaskTarget, IncludeSubdomains, NetworkError, ReferrerPolicy, ResourceFetchTiming, ResourceTimingType,
};
+use servo_channel::{channel, Sender};
use servo_url::{ImmutableOrigin, ServoUrl};
use std::fs::File;
use std::io::Read;
@@ -127,7 +128,27 @@ fn test_fetch_blob() {
use ipc_channel::ipc;
use net_traits::blob_url_store::BlobBuf;
- let mut context = new_fetch_context(None, None);
+ struct FetchResponseCollector {
+ sender: Sender<Response>,
+ buffer: Vec<u8>,
+ expected: Vec<u8>,
+ }
+
+ impl FetchTaskTarget for FetchResponseCollector {
+ fn process_request_body(&mut self, _: &Request) {}
+ fn process_request_eof(&mut self, _: &Request) {}
+ fn process_response(&mut self, _: &Response) {}
+ fn process_response_chunk(&mut self, chunk: Vec<u8>) {
+ self.buffer.extend_from_slice(chunk.as_slice());
+ }
+ /// Fired when the response is fully fetched
+ fn process_response_eof(&mut self, response: &Response) {
+ assert_eq!(self.buffer, self.expected);
+ let _ = self.sender.send(response.clone());
+ }
+ }
+
+ let context = new_fetch_context(None, None);
let bytes = b"content";
let blob_buf = BlobBuf {
@@ -147,7 +168,18 @@ fn test_fetch_blob() {
let url = ServoUrl::parse(&format!("blob:{}{}", origin.as_str(), id.to_simple())).unwrap();
let mut request = Request::new(url, Some(Origin::Origin(origin.origin())), None);
- let fetch_response = fetch_with_context(&mut request, &mut context);
+
+ let (sender, receiver) = channel();
+
+ let mut target = FetchResponseCollector {
+ sender,
+ buffer: vec![],
+ expected: bytes.to_vec(),
+ };
+
+ methods::fetch(&mut request, &mut target, &context);
+
+ let fetch_response = receiver.recv().unwrap();
assert!(!fetch_response.is_network_error());
@@ -165,7 +197,7 @@ fn test_fetch_blob() {
assert_eq!(
*fetch_response.body.lock().unwrap(),
- ResponseBody::Done(bytes.to_vec())
+ ResponseBody::Receiving(vec![])
);
}