From 336ae4e32181900d5d5e34ad0cbdfad3fa889a44 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 01:36:30 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20Add=20unit=20tests=20for=20resol?= =?UTF-8?q?ve=5Frelease=5Fquery?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added comprehensive test coverage for the `resolve_release_query` function in `crates/release/src/lib.rs`. The tests verify the correct resolution of release configurations across different channels (`Stable`, `Beta`) and correctly assert the behavior under various environment variable overrides. Introduced `serial_test` dependency to ensure thread safety when modifying environment variables within `unsafe` blocks for testing purposes. Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com> --- Cargo.lock | 26 +++++++ crates/release/Cargo.toml | 3 + crates/release/src/lib.rs | 148 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 177 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 31191b2a2..41a1d300b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -914,6 +914,7 @@ dependencies = [ "semver", "serde", "serde_json", + "serial_test", ] [[package]] @@ -4623,6 +4624,31 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "serial_test" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d" +dependencies = [ + "futures-executor", + "futures-util", + "log", + "once_cell", + "parking_lot", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "sha1" version = "0.10.6" diff --git a/crates/release/Cargo.toml b/crates/release/Cargo.toml index 675206863..ca735b99f 100644 --- a/crates/release/Cargo.toml +++ b/crates/release/Cargo.toml @@ -12,3 +12,6 @@ reqwest = { workspace = true, features = ["blocking"] } semver.workspace = true serde.workspace = true serde_json.workspace = true + +[dev-dependencies] +serial_test = "3.5.0" diff --git a/crates/release/src/lib.rs b/crates/release/src/lib.rs index 80f0b3fa8..b7a769862 100644 --- a/crates/release/src/lib.rs +++ b/crates/release/src/lib.rs @@ -348,6 +348,154 @@ fn version_is_beta(version: &semver::Version) -> bool { #[cfg(test)] mod tests { use super::*; + use serial_test::serial; + + fn clear_env() { + unsafe { + std::env::remove_var(RELEASE_BASE_URL_ENV); + std::env::remove_var(LEGACY_RELEASE_BASE_URL_ENV); + std::env::remove_var(DEEPSEEK_RELEASE_BASE_URL_ENV); + std::env::remove_var(CNB_MIRROR_ENV); + std::env::remove_var(UPDATE_VERSION_ENV); + std::env::remove_var(LEGACY_UPDATE_VERSION_ENV); + } + } + + #[test] + #[serial] + fn test_resolve_release_query_default() { + clear_env(); + + let query_stable = resolve_release_query(ReleaseChannel::Stable); + assert_eq!( + query_stable, + ReleaseQuery::GitHubLatest { + url: LATEST_RELEASE_URL + } + ); + + let query_beta = resolve_release_query(ReleaseChannel::Beta); + assert_eq!( + query_beta, + ReleaseQuery::GitHubReleaseList { + url: RELEASES_URL + } + ); + } + + #[test] + #[serial] + fn test_resolve_release_query_mirror_env() { + clear_env(); + unsafe { + std::env::set_var(RELEASE_BASE_URL_ENV, "https://example.com/mirror"); + } + + let query = resolve_release_query(ReleaseChannel::Stable); + let default_version = env!("CARGO_PKG_VERSION"); + assert_eq!( + query, + ReleaseQuery::Mirror { + base_url: "https://example.com/mirror".to_string(), + version: default_version.to_string() + } + ); + } + + #[test] + #[serial] + fn test_resolve_release_query_mirror_legacy_env() { + clear_env(); + unsafe { + std::env::set_var(LEGACY_RELEASE_BASE_URL_ENV, "https://legacy.com/mirror"); + } + + let query = resolve_release_query(ReleaseChannel::Stable); + let default_version = env!("CARGO_PKG_VERSION"); + assert_eq!( + query, + ReleaseQuery::Mirror { + base_url: "https://legacy.com/mirror".to_string(), + version: default_version.to_string() + } + ); + } + + #[test] + #[serial] + fn test_resolve_release_query_mirror_deepseek_env() { + clear_env(); + unsafe { + std::env::set_var(DEEPSEEK_RELEASE_BASE_URL_ENV, "https://deepseek.com/mirror"); + } + + let query = resolve_release_query(ReleaseChannel::Stable); + let default_version = env!("CARGO_PKG_VERSION"); + assert_eq!( + query, + ReleaseQuery::Mirror { + base_url: "https://deepseek.com/mirror".to_string(), + version: default_version.to_string() + } + ); + } + + #[test] + #[serial] + fn test_resolve_release_query_cnb_mirror() { + clear_env(); + unsafe { + std::env::set_var(CNB_MIRROR_ENV, "1"); + } + + let query = resolve_release_query(ReleaseChannel::Stable); + let default_version = env!("CARGO_PKG_VERSION"); + assert_eq!( + query, + ReleaseQuery::Mirror { + base_url: cnb_release_base_url(default_version), + version: default_version.to_string() + } + ); + } + + #[test] + #[serial] + fn test_resolve_release_query_pinned_version() { + clear_env(); + unsafe { + std::env::set_var(RELEASE_BASE_URL_ENV, "https://example.com/mirror"); + std::env::set_var(UPDATE_VERSION_ENV, "v1.2.3"); + } + + let query = resolve_release_query(ReleaseChannel::Stable); + assert_eq!( + query, + ReleaseQuery::Mirror { + base_url: "https://example.com/mirror".to_string(), + version: "1.2.3".to_string() + } + ); + } + + #[test] + #[serial] + fn test_resolve_release_query_legacy_pinned_version() { + clear_env(); + unsafe { + std::env::set_var(RELEASE_BASE_URL_ENV, "https://example.com/mirror"); + std::env::set_var(LEGACY_UPDATE_VERSION_ENV, "v1.2.3-legacy"); + } + + let query = resolve_release_query(ReleaseChannel::Stable); + assert_eq!( + query, + ReleaseQuery::Mirror { + base_url: "https://example.com/mirror".to_string(), + version: "1.2.3-legacy".to_string() + } + ); + } #[test] fn cnb_release_base_url_includes_tag_directory() {