agent_engine/tools/shell/
config.rs1pub use crate::core::shell_config::ShellConfig;
5
6#[cfg(test)]
7mod tests {
8 use super::*;
9 use std::time::Duration;
10 use serial_test::serial;
11 use crate::core::config::load_config;
12
13 #[test]
14 fn test_shell_config_default() {
15 let config = ShellConfig::default();
16 assert_eq!(config.max_sessions, 5);
17 assert_eq!(config.idle_timeout, Duration::from_secs(600));
18 assert_eq!(config.readiness_timeout_ms, 300);
19 assert_eq!(config.max_readiness_timeout_ms, 10_000);
20 assert_eq!(config.default_rows, 24);
21 assert_eq!(config.default_cols, 80);
22 assert_eq!(config.prompt_patterns.len(), 19);
23 }
24
25 #[test]
26 #[serial]
27 fn test_shell_config_from_file() {
28 {
33 let test_dir = std::path::PathBuf::from("/tmp/synaps-shell-test-1/.synaps-cli");
34 let _ = std::fs::create_dir_all(&test_dir);
35 let config_path = test_dir.join("config");
36
37 let config_content = "shell.max_sessions = 10\nshell.idle_timeout = 1200\nshell.readiness_timeout_ms = 500\nshell.max_readiness_timeout_ms = 20000\nshell.default_rows = 30\nshell.default_cols = 120\n";
38 std::fs::write(&config_path, config_content).unwrap();
39
40 let original_home = std::env::var("HOME").ok();
41 let original_base_dir = std::env::var("SYNAPS_BASE_DIR").ok();
42 std::env::remove_var("SYNAPS_BASE_DIR");
43 std::env::set_var("HOME", "/tmp/synaps-shell-test-1");
44 let config = load_config();
45 if let Some(home) = original_home {
46 std::env::set_var("HOME", home);
47 }
48 if let Some(base_dir) = original_base_dir {
49 std::env::set_var("SYNAPS_BASE_DIR", base_dir);
50 }
51 let _ = std::fs::remove_dir_all("/tmp/synaps-shell-test-1");
52
53 assert_eq!(config.shell.max_sessions, 10);
54 assert_eq!(config.shell.idle_timeout, Duration::from_secs(1200));
55 assert_eq!(config.shell.readiness_timeout_ms, 500);
56 assert_eq!(config.shell.max_readiness_timeout_ms, 20000);
57 assert_eq!(config.shell.default_rows, 30);
58 assert_eq!(config.shell.default_cols, 120);
59 }
60
61 {
63 let test_dir = std::path::PathBuf::from("/tmp/synaps-shell-test-2/.synaps-cli");
64 let _ = std::fs::create_dir_all(&test_dir);
65 let config_path = test_dir.join("config");
66
67 let config_content = "shell.max_sessions = 3\nshell.default_rows = 40\n";
68 std::fs::write(&config_path, config_content).unwrap();
69
70 let original_home = std::env::var("HOME").ok();
71 let original_base_dir = std::env::var("SYNAPS_BASE_DIR").ok();
72 std::env::remove_var("SYNAPS_BASE_DIR");
73 std::env::set_var("HOME", "/tmp/synaps-shell-test-2");
74 let config = load_config();
75 if let Some(home) = original_home {
76 std::env::set_var("HOME", home);
77 }
78 if let Some(base_dir) = original_base_dir {
79 std::env::set_var("SYNAPS_BASE_DIR", base_dir);
80 }
81 let _ = std::fs::remove_dir_all("/tmp/synaps-shell-test-2");
82
83 assert_eq!(config.shell.max_sessions, 3);
84 assert_eq!(config.shell.default_rows, 40);
85 assert_eq!(config.shell.idle_timeout, Duration::from_secs(600));
86 assert_eq!(config.shell.readiness_timeout_ms, 300);
87 }
88
89 {
91 let test_dir = std::path::PathBuf::from("/tmp/synaps-shell-test-3/.synaps-cli");
92 let _ = std::fs::create_dir_all(&test_dir);
93 let config_path = test_dir.join("config");
94
95 let config_content = "shell.max_sessions = not_a_number\nshell.idle_timeout = invalid\n";
96 std::fs::write(&config_path, config_content).unwrap();
97
98 let original_home = std::env::var("HOME").ok();
99 let original_base_dir = std::env::var("SYNAPS_BASE_DIR").ok();
100 std::env::remove_var("SYNAPS_BASE_DIR");
101 std::env::set_var("HOME", "/tmp/synaps-shell-test-3");
102 let config = load_config();
103 if let Some(home) = original_home {
104 std::env::set_var("HOME", home);
105 }
106 if let Some(base_dir) = original_base_dir {
107 std::env::set_var("SYNAPS_BASE_DIR", base_dir);
108 }
109 let _ = std::fs::remove_dir_all("/tmp/synaps-shell-test-3");
110
111 assert_eq!(config.shell.max_sessions, 5);
112 assert_eq!(config.shell.idle_timeout, Duration::from_secs(600));
113 }
114 }
115}