use blvm_node::network::message_bridge::MessageBridge;
use blvm_node::network::transport::TransportType;
use blvm_protocol::network::{
NetworkAddress, NetworkMessage, NetworkResponse, PingMessage, VersionMessage,
};
fn create_test_version_message() -> NetworkMessage {
NetworkMessage::Version(VersionMessage {
version: 70015,
services: 1,
timestamp: 1234567890,
addr_recv: NetworkAddress {
services: 1,
ip: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 1],
port: 8333,
},
addr_from: NetworkAddress {
services: 1,
ip: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 1],
port: 8334,
},
nonce: 12345,
user_agent: "test".to_string(),
start_height: 0,
relay: true,
})
}
#[test]
fn test_message_bridge_to_transport_tcp() {
let msg = create_test_version_message();
let result = MessageBridge::to_transport_message(&msg, TransportType::Tcp);
assert!(result.is_ok());
let wire = result.unwrap();
assert!(!wire.is_empty());
}
#[test]
fn test_message_bridge_from_transport_tcp() {
let msg = create_test_version_message();
let wire = MessageBridge::to_transport_message(&msg, TransportType::Tcp).unwrap();
assert!(!wire.is_empty());
let result = MessageBridge::from_transport_message(&wire, TransportType::Tcp);
assert!(result.is_ok() || result.is_err());
}
#[test]
fn test_message_bridge_roundtrip() {
let original = create_test_version_message();
let wire = MessageBridge::to_transport_message(&original, TransportType::Tcp).unwrap();
assert!(!wire.is_empty());
let converted = MessageBridge::from_transport_message(&wire, TransportType::Tcp);
if let Ok(converted) = converted {
match (original, converted) {
(NetworkMessage::Version(v1), NetworkMessage::Version(v2)) => {
assert_eq!(v1.version, v2.version);
assert_eq!(v1.nonce, v2.nonce);
}
_ => {} }
}
}
#[test]
fn test_message_bridge_extract_send_messages_ok() {
let response = NetworkResponse::Ok;
let result = MessageBridge::extract_send_messages(&response, TransportType::Tcp);
assert!(result.is_ok());
let messages = result.unwrap();
assert_eq!(messages.len(), 0);
}
#[test]
fn test_message_bridge_extract_send_messages_send_message() {
let msg = create_test_version_message();
let response = NetworkResponse::SendMessage(Box::new(msg));
let result = MessageBridge::extract_send_messages(&response, TransportType::Tcp);
assert!(result.is_ok());
let messages = result.unwrap();
assert_eq!(messages.len(), 1);
assert!(!messages[0].is_empty());
}
#[test]
fn test_message_bridge_extract_send_messages_send_messages() {
let msg1 = create_test_version_message();
let msg2 = NetworkMessage::Ping(PingMessage { nonce: 12345 });
let response = NetworkResponse::SendMessages(vec![msg1, msg2]);
let result = MessageBridge::extract_send_messages(&response, TransportType::Tcp);
assert!(result.is_ok());
let messages = result.unwrap();
assert_eq!(messages.len(), 2);
assert!(!messages[0].is_empty());
assert!(!messages[1].is_empty());
}
#[test]
fn test_message_bridge_extract_send_messages_reject() {
let response = NetworkResponse::Reject("test rejection".to_string());
let result = MessageBridge::extract_send_messages(&response, TransportType::Tcp);
assert!(result.is_ok());
let messages = result.unwrap();
assert_eq!(messages.len(), 0);
}
#[test]
fn test_message_bridge_process_incoming_message() {
let msg = create_test_version_message();
let wire = MessageBridge::to_transport_message(&msg, TransportType::Tcp).unwrap();
assert!(!wire.is_empty());
let result = MessageBridge::process_incoming_message(&wire, TransportType::Tcp);
if result.is_ok() {
let responses = result.unwrap();
assert_eq!(responses.len(), 0);
}
}
#[test]
fn test_message_bridge_process_incoming_invalid() {
let invalid_data = vec![0u8; 10];
let result = MessageBridge::process_incoming_message(&invalid_data, TransportType::Tcp);
assert!(result.is_err());
}