Validate partial content support
This commit is contained in:
parent
5ccc006515
commit
fa178b92be
2 changed files with 27 additions and 18 deletions
|
@ -1,4 +1,5 @@
|
||||||
use http::response::{Builder, Response};
|
use http::response::{Builder, Response};
|
||||||
|
use http::{HeaderMap, HeaderValue};
|
||||||
use rocket;
|
use rocket;
|
||||||
use rocket::local::Client;
|
use rocket::local::Client;
|
||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
|
@ -19,7 +20,11 @@ pub struct RocketResponse<'r, 's> {
|
||||||
|
|
||||||
impl<'r, 's> RocketResponse<'r, 's> {
|
impl<'r, 's> RocketResponse<'r, 's> {
|
||||||
fn builder(&self) -> Builder {
|
fn builder(&self) -> Builder {
|
||||||
Response::builder().status(self.response.status().code)
|
let mut builder = Response::builder().status(self.response.status().code);
|
||||||
|
for header in self.response.headers().iter() {
|
||||||
|
builder = builder.header(header.name(), header.value());
|
||||||
|
}
|
||||||
|
builder
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_void(&self) -> Response<()> {
|
fn to_void(&self) -> Response<()> {
|
||||||
|
@ -93,8 +98,15 @@ impl TestService for RocketTestService {
|
||||||
.to_void()
|
.to_void()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_bytes(&mut self, url: &str) -> Response<Vec<u8>> {
|
fn get_bytes(&mut self, url: &str, headers: &HeaderMap<HeaderValue>) -> Response<Vec<u8>> {
|
||||||
let mut response = self.client.get(url).dispatch();
|
let mut request = self.client.get(url);
|
||||||
|
for (name, value) in headers.iter() {
|
||||||
|
request.add_header(rocket::http::Header::new(
|
||||||
|
name.as_str().to_owned(),
|
||||||
|
value.to_str().unwrap().to_owned(),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
let mut response = request.dispatch();
|
||||||
RocketResponse {
|
RocketResponse {
|
||||||
response: response.deref_mut(),
|
response: response.deref_mut(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use function_name::named;
|
use function_name::named;
|
||||||
use http::{Response, StatusCode};
|
use http::header::*;
|
||||||
|
use http::{HeaderMap, HeaderValue, Response, StatusCode};
|
||||||
use percent_encoding::{percent_encode, NON_ALPHANUMERIC};
|
use percent_encoding::{percent_encode, NON_ALPHANUMERIC};
|
||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
@ -20,7 +21,7 @@ const TEST_MOUNT_SOURCE: &str = "test/collection";
|
||||||
pub trait TestService {
|
pub trait TestService {
|
||||||
fn new(db_name: &str) -> Self;
|
fn new(db_name: &str) -> Self;
|
||||||
fn get(&mut self, url: &str) -> Response<()>;
|
fn get(&mut self, url: &str) -> Response<()>;
|
||||||
fn get_bytes(&mut self, url: &str) -> Response<Vec<u8>>;
|
fn get_bytes(&mut self, url: &str, headers: &HeaderMap<HeaderValue>) -> Response<Vec<u8>>;
|
||||||
fn post(&mut self, url: &str) -> Response<()>;
|
fn post(&mut self, url: &str) -> Response<()>;
|
||||||
fn delete(&mut self, url: &str) -> Response<()>;
|
fn delete(&mut self, url: &str) -> Response<()>;
|
||||||
fn get_json<T: DeserializeOwned>(&mut self, url: &str) -> Response<T>;
|
fn get_json<T: DeserializeOwned>(&mut self, url: &str) -> Response<T>;
|
||||||
|
@ -372,22 +373,18 @@ fn test_service_serve() {
|
||||||
percent_encode(path.to_string_lossy().as_ref().as_bytes(), NON_ALPHANUMERIC)
|
percent_encode(path.to_string_lossy().as_ref().as_bytes(), NON_ALPHANUMERIC)
|
||||||
);
|
);
|
||||||
|
|
||||||
let response = service.get_bytes(&uri);
|
let response = service.get_bytes(&uri, &HeaderMap::new());
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
assert_eq!(response.body().len(), 24_142);
|
assert_eq!(response.body().len(), 24_142);
|
||||||
|
|
||||||
// TODO
|
{
|
||||||
// {
|
let mut headers = HeaderMap::new();
|
||||||
// let mut response = client
|
headers.append(RANGE, HeaderValue::from_str("bytes=100-299").unwrap());
|
||||||
// .get("/api/serve/collection%2FKhemmis%2FHunted%2F02%20-%20Candlelight.mp3")
|
let response = service.get_bytes(&uri, &headers);
|
||||||
// .header(Range::bytes(100, 299))
|
assert_eq!(response.status(), StatusCode::PARTIAL_CONTENT);
|
||||||
// .dispatch();
|
assert_eq!(response.body().len(), 200);
|
||||||
// assert_eq!(response.status(), Status::PartialContent);
|
assert_eq!(response.headers().get(CONTENT_LENGTH).unwrap(), "200");
|
||||||
// let body = response.body().unwrap();
|
}
|
||||||
// let body = body.into_bytes().unwrap();
|
|
||||||
// assert_eq!(body.len(), 200);
|
|
||||||
// assert_eq!(response.headers().get_one("Content-Length").unwrap(), "200");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[named]
|
#[named]
|
||||||
|
|
Loading…
Add table
Reference in a new issue