⎇ 72758e75ce515f355f27615671c95ecaf8c2a8bc
crates/core/brahman-handshake/src/transport.rs
Historia
Quién tocó qué
crudo
feat(ente-zero): enchufa el handshake server al Init real
1//! Convenciones de transporte: dónde vive el socket del Init.
2//!
3//! Resolución del path canónico:
4//! 1. Variable de entorno [`SOCKET_ENV`] si está definida (override
5//! explícito, prioridad máxima).
6//! 2. `$XDG_RUNTIME_DIR/brahman-init.sock` (sesión usuario).
7//! 3. `$TMPDIR/brahman-init.sock` (fallback portable).
8
9use std::path::PathBuf;
10
11/// Variable de entorno que sobreescribe la ruta del socket del Init.
12pub const SOCKET_ENV: &str = "BRAHMAN_INIT_SOCKET";
13
14/// Nombre del socket dentro del runtime dir.
15pub const SOCKET_NAME: &str = "brahman-init.sock";
16
17/// Ruta canónica al socket del Init brahman.
18pub fn default_socket_path() -> PathBuf {
19 if let Ok(p) = std::env::var(SOCKET_ENV) {
20 return PathBuf::from(p);
21 }
22 let base = std::env::var_os("XDG_RUNTIME_DIR")
23 .map(PathBuf::from)
24 .unwrap_or_else(std::env::temp_dir);
25 base.join(SOCKET_NAME)
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn env_override_wins() {
34 // Nota: estos tests modifican entorno del proceso. `cargo test`
35 // los corre paralelos por defecto pero usamos un nombre de var
36 // único y restablecemos al final.
37 let key = "BRAHMAN_INIT_SOCKET_TEST_OVERRIDE";
38 // SAFETY: sólo escribimos una variable local al test; sin
39 // contaminar SOCKET_ENV.
40 std::env::set_var(key, "/tmp/explicit.sock");
41 let saved = std::env::var(SOCKET_ENV).ok();
42 std::env::set_var(SOCKET_ENV, "/tmp/explicit.sock");
43 let p = default_socket_path();
44 assert_eq!(p, PathBuf::from("/tmp/explicit.sock"));
45 // Restaurar
46 match saved {
47 Some(v) => std::env::set_var(SOCKET_ENV, v),
48 None => std::env::remove_var(SOCKET_ENV),
49 }
50 std::env::remove_var(key);
51 }
52}