fix official auto discovery for current launcher manifest

This commit is contained in:
2026-07-06 23:02:52 +08:00
parent 5e76ea4ae3
commit e0d43fb994
7 changed files with 483 additions and 54 deletions
@@ -29,6 +29,9 @@ const TEST_LAUNCHER_MANIFEST_SOURCE: &str =
"prod/ZIP_TEMP/BlueArchive_JP_TEMP/BlueArchive_JP-manifest-fixture.zip";
const TEST_LAUNCHER_GAME_ZIP_URL: &str =
"https://launcher-pkg-ba-jp.yo-star.com/prod/ZIP_TEMP/BlueArchive_JP_TEMP/BlueArchive_JP-manifest-fixture.zip";
const TEST_LAUNCHER_DIRECTORY_SOURCE: &str = "/BlueArchive_JP-1.70.436321-game";
const TEST_LAUNCHER_RESOURCES_ASSETS_URL: &str =
"https://launcher-pkg-ba-jp.yo-star.com/BlueArchive_JP-1.70.436321-game/BlueArchive_Data/resources.assets";
const TEST_SERVER_INFO_URL: &str =
"https://yostar-serverinfo.bluearchiveyostar.com/r93_fixture.json";
const TEST_CONNECTION_GROUP: &str = "Fixture-Audit";
@@ -54,7 +57,7 @@ fn fetch_bootstrap_uses_official_manifest_source_for_latest_zip() {
Some(TEST_LAUNCHER_MANIFEST_SOURCE)
);
assert_eq!(bootstrap.game_zip_url, TEST_LAUNCHER_GAME_ZIP_URL);
assert_eq!(bootstrap.manifest_file_count, 1);
assert_eq!(bootstrap.manifest_file_count, 2);
assert_eq!(
bootstrap.game_main_config.server_info_data_url.as_deref(),
Some(TEST_SERVER_INFO_URL)
@@ -76,25 +79,21 @@ fn fetch_bootstrap_uses_official_manifest_source_for_latest_zip() {
}
#[test]
fn fetch_bootstrap_falls_back_to_latest_file_path_when_manifest_source_is_not_zip() {
let harness = TestHarness::new_with_manifest_source("/BlueArchive_JP-1.70.436321-game");
fn fetch_bootstrap_uses_directory_manifest_resources_assets_when_source_is_not_zip() {
let harness = TestHarness::new_with_manifest_source(TEST_LAUNCHER_DIRECTORY_SOURCE);
let bootstrap = harness.fetch_bootstrap();
assert_eq!(
bootstrap.manifest_source.as_deref(),
Some("/BlueArchive_JP-1.70.436321-game")
);
assert_eq!(
bootstrap.game_zip_url,
format!(
"https://launcher-pkg-ba-jp.yo-star.com/{}",
TEST_LAUNCHER_LATEST_FILE_PATH
)
Some(TEST_LAUNCHER_DIRECTORY_SOURCE)
);
assert_eq!(bootstrap.game_zip_url, TEST_LAUNCHER_RESOURCES_ASSETS_URL);
let curl_log = fs::read_to_string(&harness.curl_log).unwrap();
assert!(curl_log.contains(TEST_LAUNCHER_LATEST_FILE_PATH));
assert!(!curl_log.contains(" /BlueArchive_JP-1.70.436321-game"));
assert!(curl_log.contains(TEST_LAUNCHER_RESOURCES_ASSETS_URL));
assert!(!curl_log.contains(&format!(
"https://launcher-pkg-ba-jp.yo-star.com/{TEST_LAUNCHER_LATEST_FILE_PATH}"
)));
}
#[test]
@@ -178,7 +177,13 @@ impl TestHarness {
let curl_script = temp.path().join("fake-curl");
write_executable(
&curl_script,
&official_curl_script(&curl_log, &zip_fixture, manifest_source),
&official_curl_script(
&curl_log,
&zip_fixture,
&resources_assets_path,
resources_assets.len(),
manifest_source,
),
);
let unzip_script = temp.path().join("fake-unzip");
@@ -229,7 +234,13 @@ fn write_executable(path: &Path, content: &str) {
fs::set_permissions(path, permissions).unwrap();
}
fn official_curl_script(curl_log: &Path, zip_fixture: &Path, manifest_source: &str) -> String {
fn official_curl_script(
curl_log: &Path,
zip_fixture: &Path,
resources_assets_fixture: &Path,
resources_assets_size: usize,
manifest_source: &str,
) -> String {
format!(
r#"#!/usr/bin/env bash
set -euo pipefail
@@ -268,6 +279,11 @@ emit_zip_fixture() {{
cp {} "$output"
}}
emit_resources_assets_fixture() {{
mkdir -p "$(dirname "$output")"
cp {} "$output"
}}
if [[ "$url" == "https://api-launcher-jp.yo-star.com/api/launcher/game/config" ]]; then
cat <<'JSON'
{{"code":200,"message":"ok","data":{{"game_latest_version":"{launcher_latest_version}","game_latest_file_path":"{launcher_latest_file_path}"}}}}
@@ -282,8 +298,10 @@ elif [[ "$url" == "{launcher_game_config_json_url}" ]]; then
JSON
elif [[ "$url" == "{launcher_manifest_url}" ]]; then
cat <<'JSON'
{{"source":"{launcher_manifest_source}","file":[{{"path":"/BlueArchive.exe","size":"100","hash":"123"}}]}}
{{"source":"{launcher_manifest_source}","file":[{{"path":"/BlueArchive.exe","size":"100","hash":"123"}},{{"path":"/BlueArchive_Data/resources.assets","size":"{resources_assets_size}","hash":"456"}}]}}
JSON
elif [[ "$url" == "{launcher_resources_assets_url}" ]]; then
emit_resources_assets_fixture
elif [[ "$url" == "{server_info_url}" ]]; then
cat <<'JSON'
{{"ConnectionGroups":[{{"Name":"{connection_group}","AddressablesCatalogUrlRoot":"{addressables_root}","BundleVersion":"s8tloc7lo3","IsLivePublished":true}}]}}
@@ -332,11 +350,14 @@ fi
"#,
shell_quote(curl_log),
shell_quote(zip_fixture),
shell_quote(resources_assets_fixture),
launcher_latest_version = TEST_LAUNCHER_LATEST_VERSION,
launcher_latest_file_path = TEST_LAUNCHER_LATEST_FILE_PATH,
launcher_game_config_json_url = TEST_LAUNCHER_GAME_CONFIG_JSON_URL,
launcher_manifest_url = TEST_LAUNCHER_MANIFEST_URL,
launcher_manifest_source = manifest_source,
launcher_resources_assets_url = TEST_LAUNCHER_RESOURCES_ASSETS_URL,
resources_assets_size = resources_assets_size,
server_info_url = TEST_SERVER_INFO_URL,
connection_group = TEST_CONNECTION_GROUP,
addressables_root = TEST_ADDRESSABLES_ROOT,