From cc88b3b8e5bb9f7d9f23ed6ae85a52fd7b5b9ed6 Mon Sep 17 00:00:00 2001 From: Can Celik Date: Wed, 2 Sep 2026 02:45:20 +0300 Subject: feat: add stable client endpoint compatibility (#3509) * feat: add stable client endpoint compatibility * fix: keep portable-pty patch checks composable * ci: run maintenance checks in pull requests * fix: reject endpoint errors from terminal clients * feat: keep compatible servers running across updates --- tests/cli/sessions.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'tests/cli') diff --git a/tests/cli/sessions.rs b/tests/cli/sessions.rs index cc8474eb..8e5fc48f 100644 --- a/tests/cli/sessions.rs +++ b/tests/cli/sessions.rs @@ -398,13 +398,21 @@ fn status_commands_report_client_and_server_versions() { "stdout: {full_stdout}" ); assert!( - full_stdout.contains(" compatible: yes"), + full_stdout.contains(" private_protocol_compatible: yes"), + "stdout: {full_stdout}" + ); + assert!( + full_stdout.contains(" endpoint_compatible: yes"), "stdout: {full_stdout}" ); assert!( full_stdout.contains(" restart_needed: no"), "stdout: {full_stdout}" ); + assert!( + full_stdout.contains(" server_binary_stale: no"), + "stdout: {full_stdout}" + ); assert!( full_stdout.contains(&socket_path.display().to_string()), "stdout: {full_stdout}" @@ -422,7 +430,7 @@ fn status_commands_report_client_and_server_versions() { "stdout: {server_stdout}" ); assert!( - server_stdout.contains("protocol: 22"), + server_stdout.contains("private_protocol: 22"), "stdout: {server_stdout}" ); @@ -437,6 +445,10 @@ fn status_commands_report_client_and_server_versions() { client_stdout.contains("protocol: 22"), "stdout: {client_stdout}" ); + assert!( + client_stdout.contains("endpoint_protocol_generation: 1"), + "stdout: {client_stdout}" + ); assert!( client_stdout.contains("binary: "), "stdout: {client_stdout}" @@ -445,25 +457,31 @@ fn status_commands_report_client_and_server_versions() { let full_json = run_cli_json(&socket_path, &["status", "--json"]); assert_eq!(full_json["client"]["version"], env!("CARGO_PKG_VERSION")); assert_eq!(full_json["client"]["protocol"], 22); + assert_eq!(full_json["client"]["endpoint_protocol_generation"], 1); assert_eq!(full_json["server"]["status"], "running"); assert_eq!(full_json["server"]["running"], true); assert_eq!(full_json["server"]["compatible"], true); + assert_eq!(full_json["server"]["endpoint_compatible"], true); assert_eq!( full_json["server"]["socket"], socket_path.display().to_string() ); assert_eq!(full_json["server"]["restart_needed"], false); + assert_eq!(full_json["server"]["server_binary_stale"], false); assert_eq!(full_json["update"]["restart_needed"], false); + assert_eq!(full_json["update"]["server_binary_stale"], false); let server_json = run_cli_json(&socket_path, &["status", "server", "--json"]); assert_eq!(server_json["status"], "running"); assert_eq!(server_json["version"], env!("CARGO_PKG_VERSION")); assert_eq!(server_json["protocol"], 22); assert_eq!(server_json["compatible"], true); + assert_eq!(server_json["endpoint_compatible"], true); let client_json = run_cli_json(&socket_path, &["status", "client", "--json"]); assert_eq!(client_json["version"], env!("CARGO_PKG_VERSION")); assert_eq!(client_json["protocol"], 22); + assert_eq!(client_json["endpoint_protocol_generation"], 1); assert!(client_json["binary"] .as_str() .is_some_and(|path| !path.is_empty())); @@ -484,6 +502,10 @@ fn status_reports_not_running_when_server_socket_is_missing() { let stdout = String::from_utf8_lossy(&status.stdout); assert!(stdout.contains(" status: not running"), "stdout: {stdout}"); assert!(stdout.contains(" restart_needed: no"), "stdout: {stdout}"); + assert!( + stdout.contains(" server_binary_stale: no"), + "stdout: {stdout}" + ); assert!( stdout.contains(&socket_path.display().to_string()), "stdout: {stdout}" @@ -497,7 +519,9 @@ fn status_reports_not_running_when_server_socket_is_missing() { socket_path.display().to_string() ); assert_eq!(status_json["server"]["restart_needed"], false); + assert_eq!(status_json["server"]["server_binary_stale"], false); assert_eq!(status_json["update"]["restart_needed"], false); + assert_eq!(status_json["update"]["server_binary_stale"], false); cleanup_test_base(&base); } -- cgit v1.2.3