@@ -105,6 +105,38 @@ fn trusted_check_persists_redacted_state_recovers_backup_and_reports_stale() {
|
||||
.expect("restored state must be JSON");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn large_multi_platform_release_selects_only_the_exact_windows_asset() {
|
||||
let workspace = TestWorkspace::new();
|
||||
let service = workspace.service();
|
||||
let component = catalog_component(&service, ComponentId::SingBox);
|
||||
let response = metadata_response(
|
||||
&component,
|
||||
"1.14.0",
|
||||
"sing-box-1.14.0-windows-amd64.zip",
|
||||
b"asset",
|
||||
DigestMode::Trusted,
|
||||
);
|
||||
let mut metadata: Value = serde_json::from_slice(&response.body).unwrap();
|
||||
// Real sing-box 1.14.0 publishes 167 assets. Response bytes are already bounded.
|
||||
for index in 1..167 {
|
||||
metadata["assets"].as_array_mut().unwrap().push(json!({
|
||||
"id": 1000 + index,
|
||||
"name": format!("other-platform-{index}.zip"),
|
||||
"size": 10,
|
||||
"browser_download_url": format!("https://github.com/SagerNet/sing-box/releases/download/v1.14.0/other-platform-{index}.zip")
|
||||
}));
|
||||
}
|
||||
let transport = MockTransport::new(vec![ResponseSpec::ok(
|
||||
serde_json::to_vec(&metadata).unwrap(),
|
||||
)]);
|
||||
let checked = service
|
||||
.check_for_update(ComponentId::SingBox, CHECKED_AT, &transport)
|
||||
.unwrap();
|
||||
assert_eq!(checked.latest_known_version, "1.14.0");
|
||||
assert_eq!(checked.trust, UpdateCheckTrust::Trusted);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn missing_or_malformed_digest_is_observable_and_never_downloaded() {
|
||||
for (mode, expected) in [
|
||||
|
||||
Reference in New Issue
Block a user