fix(cli): 启动用的 Java 钉死 D4 校验过的那个 + M214 复审 nit1/nit2/nit3
- override_path 五来源统一钉住 D4 选中的运行时:以前只有 managed 钉路径, JAVA_HOME/PATH/system 三种会被 snapshot::prepare 的 selection() 按环境再挑一遍, D4 判过的 Java 根本不是真启动的那个。现在 `plan_java` 只做「选中 → 钉路径」, 人读行写出「版本(来源 · 具体可执行文件)」,--json 的 java 块并排给出 binary(校验过的)/ launch_binary(装配落地的)/ source,两者不一致时当场告警。 实例设置/全局设置里的 javaPath 也并入「谁指定了 Java」,不会被自动挑的结果顶掉。 - nit3:D4 的 Java 不符拦截挪到 identity::resolve 之前(微软轨解析身份会联网刷新 令牌、还会回写凭据),拦下的启动不再先触发一次刷新;不符提示补上「挑中的是哪个 java」,文案只加不减。 - nit1:error.rs / launcher.rs 的人读串里残留的 ** 标记去掉,并补两条回归断言。 - nit2:java_launch.rs 里「只提示不阻断」等旧注释对齐 D4 现状。 - launch.rs(399 行零余量):D20 的隔离档位派生与切换检测整体搬到新文件 launch_isolation.rs,纯挪函数体(逐行 diff 只多 6 处 pub(super)), 用 #[path] 挂载以免改 commands/mod.rs。 用例:钉路径纯函数单测 3 条 + 端到端 2 条(JAVA_HOME 置空证明非 managed 来源也钉住; 数据根放两个账户证明 D4 拦在身份解析之前)+ 人读串无 ** 的 2 条回归。 两条变异(①退回只钉 Managed ②退回身份解析之后)各自让新用例变红,已实测。
This commit is contained in:
1 parent
1f6e15127a
commit
75aa5ee82c
8 files changed
+577
-196
No files matched your search
@@ -169,7 +169,7 @@ impl fmt::Display for LaunchError {
|
||||
};
|
||||
write!(
|
||||
f,
|
||||
"{what}:等了 {:.0}s(上限 {:.0}s)就停止等待了。进程 {pid} 仍在运行、**没有被结束**\
|
||||
"{what}:等了 {:.0}s(上限 {:.0}s)就停止等待了。进程 {pid} 仍在运行、没有被结束\
|
||||
(可能只是加载得慢,也可能真卡住了);事件流见 {}。放宽上限:设环境变量 \
|
||||
ULL_LAUNCH_STARTUP_TIMEOUT_SECS / ULL_LAUNCH_SHUTDOWN_GRACE_SECS(秒,0 = 不限)",
|
||||
*waited_ms as f64 / 1000.0,
|
||||
|
||||
@@ -84,7 +84,7 @@ impl LauncherConfig {
|
||||
let grace = self.process.shutdown_grace.as_secs();
|
||||
format!(
|
||||
"看门狗:连续 {startup}s 没日志也没窗口就停止等待;出现关闭标记后 {grace}s 仍未退出也停止等待\
|
||||
(0 = 不限;停止等待**不结束进程**,可用 {} / {} 调整)",
|
||||
(0 = 不限;停止等待不结束进程,可用 {} / {} 调整)",
|
||||
crate::launch::process::STARTUP_TIMEOUT_ENV,
|
||||
crate::launch::process::SHUTDOWN_GRACE_ENV,
|
||||
)
|
||||
|
||||
@@ -212,6 +212,11 @@ fn startup_timeout_stops_waiting_and_never_kills_the_process() {
|
||||
}
|
||||
let text = error.to_string();
|
||||
assert!(text.contains("没有被结束"), "{text}");
|
||||
// M220 nit1:这句话直接打到终端,残留的 `**` 标记在终端里只会原样显示成星号。
|
||||
assert!(
|
||||
!text.contains("**"),
|
||||
"人读错误串里不该有 Markdown 标记:{text}"
|
||||
);
|
||||
assert!(text.contains("ULL_LAUNCH_STARTUP_TIMEOUT_SECS"), "{text}");
|
||||
|
||||
// 会话照样收尾(历史里看得见这一局),原因是 still_running 而不是 exit。
|
||||
@@ -309,3 +314,15 @@ fn a_quick_clean_exit_is_never_punished_by_the_watchdog() {
|
||||
assert_eq!(handle.exit.exit_type, ExitType::Normal);
|
||||
assert!(!handle.exit.terminated_externally);
|
||||
}
|
||||
|
||||
/// M220 nit1:`launcher.log` 与会话输出里的这句「看门狗生效值」是给人看的,
|
||||
/// 残留的 `**` 标记在终端里只会原样显示成星号(旧文案就是「停止等待**不结束进程**」)。
|
||||
#[test]
|
||||
fn the_watchdog_summary_is_plain_text() {
|
||||
let summary = LauncherConfig::new(std::env::temp_dir()).watchdog_summary();
|
||||
assert!(summary.contains("不结束进程"), "{summary}");
|
||||
assert!(
|
||||
!summary.contains("**"),
|
||||
"人读串里不该有 Markdown 标记:{summary}"
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user