This commit is contained in:
Mateusz Gruszczyński committed 2026-10-10 20:56:36 +02:00
1 parent f213d853e2
commit 76b8bb7ee2
78 files changed
+7750 -5204

No files matched your search

+57
View File
@@ -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);
}