143 lines
3.9 KiB
Rust
143 lines
3.9 KiB
Rust
// Created by: Claude
|
|
// Date: 2026-01-04
|
|
// Purpose: Tests pour les protocoles P2P et terminal
|
|
// Refs: protocol_events_v_2.md, signaling_v_2.md
|
|
|
|
use mesh_agent::p2p::protocol::*;
|
|
|
|
#[test]
|
|
fn test_p2p_hello_serialization() {
|
|
let hello = P2PHello {
|
|
t: "P2P_HELLO".to_string(),
|
|
session_id: "session_123".to_string(),
|
|
session_token: "token_abc".to_string(),
|
|
from_device_id: "device_456".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&hello).unwrap();
|
|
let deserialized: P2PHello = serde_json::from_str(&json).unwrap();
|
|
|
|
assert_eq!(deserialized.t, "P2P_HELLO");
|
|
assert_eq!(deserialized.session_id, "session_123");
|
|
assert_eq!(deserialized.session_token, "token_abc");
|
|
assert_eq!(deserialized.from_device_id, "device_456");
|
|
}
|
|
|
|
#[test]
|
|
fn test_p2p_response_ok() {
|
|
let response = P2PResponse::Ok;
|
|
|
|
let json = serde_json::to_string(&response).unwrap();
|
|
assert!(json.contains(r#""t":"P2P_OK""#));
|
|
|
|
let deserialized: P2PResponse = serde_json::from_str(&json).unwrap();
|
|
match deserialized {
|
|
P2PResponse::Ok => {}
|
|
_ => panic!("Expected P2P_OK"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_p2p_response_deny() {
|
|
let response = P2PResponse::Deny {
|
|
reason: "Invalid token".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&response).unwrap();
|
|
assert!(json.contains(r#""t":"P2P_DENY""#));
|
|
assert!(json.contains("Invalid token"));
|
|
|
|
let deserialized: P2PResponse = serde_json::from_str(&json).unwrap();
|
|
match deserialized {
|
|
P2PResponse::Deny { reason } => {
|
|
assert_eq!(reason, "Invalid token");
|
|
}
|
|
_ => panic!("Expected P2P_DENY"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_terminal_message_output() {
|
|
let msg = TerminalMessage::Output {
|
|
data: "$ ls -la\n".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&msg).unwrap();
|
|
assert!(json.contains(r#""t":"TERM_OUT""#));
|
|
|
|
let deserialized: TerminalMessage = serde_json::from_str(&json).unwrap();
|
|
match deserialized {
|
|
TerminalMessage::Output { data } => {
|
|
assert_eq!(data, "$ ls -la\n");
|
|
}
|
|
_ => panic!("Expected TERM_OUT"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_terminal_message_input() {
|
|
let msg = TerminalMessage::Input {
|
|
data: "echo hello\n".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&msg).unwrap();
|
|
assert!(json.contains(r#""t":"TERM_IN""#));
|
|
|
|
let deserialized: TerminalMessage = serde_json::from_str(&json).unwrap();
|
|
match deserialized {
|
|
TerminalMessage::Input { data } => {
|
|
assert_eq!(data, "echo hello\n");
|
|
}
|
|
_ => panic!("Expected TERM_IN"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_terminal_message_resize() {
|
|
let msg = TerminalMessage::Resize {
|
|
cols: 120,
|
|
rows: 30,
|
|
};
|
|
|
|
let json = serde_json::to_string(&msg).unwrap();
|
|
assert!(json.contains(r#""t":"TERM_RESIZE""#));
|
|
|
|
let deserialized: TerminalMessage = serde_json::from_str(&json).unwrap();
|
|
match deserialized {
|
|
TerminalMessage::Resize { cols, rows } => {
|
|
assert_eq!(cols, 120);
|
|
assert_eq!(rows, 30);
|
|
}
|
|
_ => panic!("Expected TERM_RESIZE"),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_all_message_types_have_type_field() {
|
|
// FileMessage
|
|
let file_meta = FileMessage::Meta {
|
|
name: "test.txt".to_string(),
|
|
size: 100,
|
|
hash: "hash".to_string(),
|
|
};
|
|
let json = serde_json::to_string(&file_meta).unwrap();
|
|
assert!(json.contains(r#""t":"FILE_META""#));
|
|
|
|
// P2P
|
|
let hello = P2PHello {
|
|
t: "P2P_HELLO".to_string(),
|
|
session_id: "s1".to_string(),
|
|
session_token: "t1".to_string(),
|
|
from_device_id: "d1".to_string(),
|
|
};
|
|
let json = serde_json::to_string(&hello).unwrap();
|
|
assert!(json.contains(r#""t":"P2P_HELLO""#));
|
|
|
|
// Terminal
|
|
let term_out = TerminalMessage::Output {
|
|
data: "output".to_string(),
|
|
};
|
|
let json = serde_json::to_string(&term_out).unwrap();
|
|
assert!(json.contains(r#""t":"TERM_OUT""#));
|
|
}
|