parent
0566110eae
commit
9cb89d766c
|
|
@ -46,6 +46,7 @@ impl AgentProgressEvent {
|
|||
|
||||
pub fn build_agent_list(am: &AgentManager, registry: Option<&AgentRegistry>) -> Vec<AgentDriverInfo> {
|
||||
let local_state = am.load_state();
|
||||
let use_managed_jre = local_state.java_runtime.mode == JavaRuntimeMode::Managed;
|
||||
agent_catalog::driver_store_entries()
|
||||
.map(|(key, label)| {
|
||||
let installed = am.is_driver_installed(key);
|
||||
|
|
@ -56,8 +57,9 @@ pub fn build_agent_list(am: &AgentManager, registry: Option<&AgentRegistry>) ->
|
|||
.or_else(|| local.map(|l| l.jre.clone()))
|
||||
.unwrap_or_else(|| DEFAULT_JRE_KEY.to_string());
|
||||
let remote_jre_version = registry.and_then(|r| r.resolve_jre(&jre_key)).map(|j| &j.version);
|
||||
let local_jre_version = local_state.jre_versions.get(&jre_key);
|
||||
let local_jre_version = installed_jre_version(&local_state, &jre_key);
|
||||
let jre_update_available = installed
|
||||
&& use_managed_jre
|
||||
&& (!am.is_jre_installed(&jre_key)
|
||||
|| remote_jre_version.is_some_and(|version| local_jre_version != Some(version)));
|
||||
AgentDriverInfo {
|
||||
|
|
@ -78,6 +80,13 @@ pub fn build_agent_list(am: &AgentManager, registry: Option<&AgentRegistry>) ->
|
|||
.collect()
|
||||
}
|
||||
|
||||
fn installed_jre_version<'a>(state: &'a crate::agent_manager::AgentState, jre_key: &str) -> Option<&'a String> {
|
||||
state
|
||||
.jre_versions
|
||||
.get(jre_key)
|
||||
.or_else(|| (jre_key == DEFAULT_JRE_KEY).then_some(state.jre_version.as_ref()).flatten())
|
||||
}
|
||||
|
||||
pub fn jre_needs_install(am: &AgentManager, registry: &AgentRegistry, jre_key: &str) -> bool {
|
||||
let state = am.load_state();
|
||||
if state.java_runtime.mode != JavaRuntimeMode::Managed {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use dbx_core::agent_manager::{
|
||||
AgentManager, AgentRegistry, ArtifactInfo, DriverInfo, InstalledDriver, JreInfo, DEFAULT_JRE_KEY,
|
||||
AgentManager, AgentRegistry, ArtifactInfo, DriverInfo, InstalledDriver, JavaRuntimeConfig, JavaRuntimeMode,
|
||||
JreInfo, DEFAULT_JRE_KEY,
|
||||
};
|
||||
use dbx_core::agent_service::{
|
||||
build_agent_list, github_url_to_r2_path, import_agent_jar, import_agents_from_zip, is_app_version_compatible,
|
||||
|
|
@ -113,6 +114,71 @@ fn agent_list_marks_update_when_installed_managed_jre_version_differs() {
|
|||
assert!(h2.update_available);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_list_does_not_mark_jre_update_for_system_java_runtime() {
|
||||
let manager = test_manager("system-java-no-jre-update");
|
||||
let jar_path = manager.driver_jar_path("dameng");
|
||||
std::fs::create_dir_all(jar_path.parent().unwrap()).unwrap();
|
||||
std::fs::write(&jar_path, b"jar").unwrap();
|
||||
manager
|
||||
.save_state(&dbx_core::agent_manager::AgentState {
|
||||
java_runtime: JavaRuntimeConfig { mode: JavaRuntimeMode::System, custom_java_path: None },
|
||||
installed_drivers: [(
|
||||
"dameng".to_string(),
|
||||
InstalledDriver {
|
||||
version: "0.2.0".to_string(),
|
||||
installed_at: "2026-05-18T00:00:00Z".to_string(),
|
||||
jre: DEFAULT_JRE_KEY.to_string(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
..Default::default()
|
||||
})
|
||||
.unwrap();
|
||||
let registry = registry_with_jre_driver("dameng", "0.2.0", DEFAULT_JRE_KEY, "21.0.11");
|
||||
|
||||
let agents = build_agent_list(&manager, Some(®istry));
|
||||
let dameng = agents.iter().find(|agent| agent.db_type == "dameng").unwrap();
|
||||
|
||||
assert!(dameng.installed);
|
||||
assert!(!dameng.jre_installed);
|
||||
assert!(!dameng.update_available);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_list_uses_legacy_default_jre_version_when_checking_updates() {
|
||||
let manager = test_manager("legacy-jre-version");
|
||||
let jar_path = manager.driver_jar_path("dameng");
|
||||
let java_path = manager.jre_java_path(DEFAULT_JRE_KEY);
|
||||
std::fs::create_dir_all(jar_path.parent().unwrap()).unwrap();
|
||||
std::fs::create_dir_all(java_path.parent().unwrap()).unwrap();
|
||||
std::fs::write(&jar_path, b"jar").unwrap();
|
||||
std::fs::write(&java_path, b"java").unwrap();
|
||||
manager
|
||||
.save_state(&dbx_core::agent_manager::AgentState {
|
||||
jre_version: Some("21.0.11".to_string()),
|
||||
installed_drivers: [(
|
||||
"dameng".to_string(),
|
||||
InstalledDriver {
|
||||
version: "0.2.0".to_string(),
|
||||
installed_at: "2026-05-18T00:00:00Z".to_string(),
|
||||
jre: DEFAULT_JRE_KEY.to_string(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
..Default::default()
|
||||
})
|
||||
.unwrap();
|
||||
let registry = registry_with_jre_driver("dameng", "0.2.0", DEFAULT_JRE_KEY, "21.0.11");
|
||||
|
||||
let agents = build_agent_list(&manager, Some(®istry));
|
||||
let dameng = agents.iter().find(|agent| agent.db_type == "dameng").unwrap();
|
||||
|
||||
assert!(!dameng.update_available);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn jre_needs_install_when_managed_runtime_version_differs() {
|
||||
let manager = test_manager("jre-needs-install");
|
||||
|
|
|
|||
Loading…
Reference in New Issue