v0.31.0
This commit is contained in:
1 parent
f213d853e2
commit
76b8bb7ee2
78 files changed
+7750
-5204
No files matched your search
@@ -0,0 +1,57 @@
|
||||
use super::*;
|
||||
use flate2::read::GzDecoder;
|
||||
use http_body_util::BodyExt;
|
||||
use std::io::Read;
|
||||
|
||||
fn headers(value: &str) -> HeaderMap {
|
||||
let mut h = HeaderMap::new();
|
||||
h.insert(header::ACCEPT_ENCODING, value.parse().unwrap());
|
||||
h
|
||||
}
|
||||
#[tokio::test]
|
||||
async fn panel_chooses_zstd_brotli_gzip_by_quality_and_support() {
|
||||
let all = PanelCompression::default();
|
||||
let plain = panel_response(&headers("identity"), &all);
|
||||
assert!(!plain.headers().contains_key(header::CONTENT_ENCODING));
|
||||
let source = plain.into_body().collect().await.unwrap().to_bytes();
|
||||
assert!(std::str::from_utf8(&source).unwrap().contains("id=\"app-startup\""));
|
||||
assert!(std::str::from_utf8(&source).unwrap().contains(env!("CARGO_PKG_VERSION")));
|
||||
for (accept, selected) in [
|
||||
("gzip, br, zstd", "zstd"),
|
||||
("gzip, br", "br"),
|
||||
("gzip", "gzip"),
|
||||
("zstd;q=0.1, br;q=0.9, gzip;q=0.2", "br"),
|
||||
("zstd;q=0, br;q=0, gzip;q=1", "gzip"),
|
||||
("*;q=0.5", "zstd"),
|
||||
] {
|
||||
let response = panel_response(&headers(accept), &all);
|
||||
assert_eq!(response.headers()[header::CONTENT_ENCODING], selected, "{accept}");
|
||||
assert_eq!(response.headers()[header::VARY], "Accept-Encoding");
|
||||
let size: usize = response.headers()[header::CONTENT_LENGTH].to_str().unwrap().parse().unwrap();
|
||||
let encoded = response.into_body().collect().await.unwrap().to_bytes();
|
||||
assert_eq!(size, encoded.len());
|
||||
let decoded = match selected {
|
||||
"gzip" => { let mut bytes = Vec::new(); GzDecoder::new(encoded.as_ref()).read_to_end(&mut bytes).unwrap(); bytes },
|
||||
"br" => { let mut bytes = Vec::new(); brotli::Decompressor::new(encoded.as_ref(), 4096).read_to_end(&mut bytes).unwrap(); bytes },
|
||||
_ => zstd::stream::decode_all(encoded.as_ref()).unwrap(),
|
||||
};
|
||||
assert_eq!(decoded.as_slice(), source.as_ref());
|
||||
}
|
||||
let disabled = PanelCompression { gzip: false, br: false, zstd: false };
|
||||
let response = panel_response(&headers("zstd, br, gzip"), &disabled);
|
||||
assert!(!response.headers().contains_key(header::CONTENT_ENCODING));
|
||||
assert_eq!(response.into_body().collect().await.unwrap().to_bytes(), source);
|
||||
let only_gzip = PanelCompression { gzip: true, br: false, zstd: false };
|
||||
assert_eq!(panel_response(&headers("zstd, br, gzip"), &only_gzip).headers()[header::CONTENT_ENCODING], "gzip");
|
||||
let mut no_transform = headers("zstd, br, gzip");
|
||||
no_transform.insert("cache-control", "no-transform".parse().unwrap());
|
||||
assert!(!panel_response(&no_transform, &all).headers().contains_key(header::CONTENT_ENCODING));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn administration_codec_defaults_keep_older_configuration_compatible() {
|
||||
let admin: crate::settings::Administration = serde_json::from_str("{\"session_days\":30}").unwrap();
|
||||
assert_eq!(admin.panel_compression, PanelCompression::default());
|
||||
let saved = serde_json::to_value(&admin).unwrap();
|
||||
assert_eq!(saved["panel_compression"]["zstd"], true);
|
||||
}
|
||||
Reference in new issue
Block a user