use blvm_node::network::protocol_adapter::ProtocolAdapter;
use blvm_node::network::transport::TransportType;
use blvm_protocol::network::{
AddrV2Message, AddressType, NetworkAddress, NetworkAddressV2, NetworkMessage, PingMessage,
PongMessage, VersionMessage,
};
use blvm_protocol::GetBanListMessage;
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,
})
}
fn create_test_ping_message() -> NetworkMessage {
NetworkMessage::Ping(PingMessage { nonce: 54321 })
}
fn create_test_pong_message() -> NetworkMessage {
NetworkMessage::Pong(PongMessage { nonce: 54321 })
}
#[test]
fn test_protocol_adapter_serialize_tcp() {
let msg = create_test_version_message();
let result = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(result.is_ok());
let serialized = result.unwrap();
assert!(serialized.len() >= 24);
}
#[test]
fn test_protocol_adapter_serialize_verack_tcp() {
let msg = NetworkMessage::VerAck;
let result = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(result.is_ok());
let serialized = result.unwrap();
assert!(serialized.len() >= 24);
}
#[test]
fn test_protocol_adapter_serialize_ping_tcp() {
let msg = create_test_ping_message();
let result = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(result.is_ok());
}
#[test]
fn test_protocol_adapter_serialize_pong_tcp() {
let msg = create_test_pong_message();
let result = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(result.is_ok());
}
#[test]
fn test_protocol_adapter_deserialize_tcp() {
let msg = create_test_version_message();
let serialized = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp).unwrap();
assert!(!serialized.is_empty());
let result = ProtocolAdapter::deserialize_message(&serialized, TransportType::Tcp);
assert!(result.is_ok() || result.is_err());
}
#[test]
fn test_protocol_adapter_roundtrip_version() {
let original = create_test_version_message();
let serialized = ProtocolAdapter::serialize_message(&original, TransportType::Tcp).unwrap();
assert!(!serialized.is_empty());
let deserialized = ProtocolAdapter::deserialize_message(&serialized, TransportType::Tcp);
if let Ok(deserialized) = deserialized {
match (original, deserialized) {
(NetworkMessage::Version(v1), NetworkMessage::Version(v2)) => {
assert_eq!(v1.version, v2.version);
assert_eq!(v1.services, v2.services);
assert_eq!(v1.nonce, v2.nonce);
}
_ => {} }
}
}
#[test]
fn test_protocol_adapter_roundtrip_ping() {
let original = create_test_ping_message();
let serialized = ProtocolAdapter::serialize_message(&original, TransportType::Tcp).unwrap();
assert!(!serialized.is_empty());
let deserialized = ProtocolAdapter::deserialize_message(&serialized, TransportType::Tcp);
if let Ok(deserialized) = deserialized {
match (original, deserialized) {
(NetworkMessage::Ping(p1), NetworkMessage::Ping(p2)) => {
assert_eq!(p1.nonce, p2.nonce);
}
_ => {} }
}
}
#[test]
fn test_protocol_adapter_roundtrip_pong() {
let original = create_test_pong_message();
let serialized = ProtocolAdapter::serialize_message(&original, TransportType::Tcp).unwrap();
assert!(!serialized.is_empty());
let deserialized = ProtocolAdapter::deserialize_message(&serialized, TransportType::Tcp);
if let Ok(deserialized) = deserialized {
match (original, deserialized) {
(NetworkMessage::Pong(p1), NetworkMessage::Pong(p2)) => {
assert_eq!(p1.nonce, p2.nonce);
}
_ => {} }
}
}
#[test]
fn test_protocol_adapter_message_to_command() {
let version_msg = create_test_version_message();
let _serialized = ProtocolAdapter::serialize_message(&version_msg, TransportType::Tcp);
assert!(true);
}
#[test]
fn test_protocol_adapter_consensus_to_protocol() {
let msg = create_test_version_message();
let result = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(result.is_ok());
}
#[test]
fn test_protocol_adapter_protocol_to_consensus() {
let msg = create_test_version_message();
let serialized = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(serialized.is_ok());
let _result = ProtocolAdapter::deserialize_message(&serialized.unwrap(), TransportType::Tcp);
}
#[test]
fn test_protocol_adapter_roundtrip_addrv2_tcp() {
let msg = NetworkMessage::AddrV2(AddrV2Message {
addresses: vec![NetworkAddressV2 {
time: 1,
services: 1033,
address_type: AddressType::IPv4,
address: vec![10, 0, 0, 1],
port: 8333,
}],
});
let bytes = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp).unwrap();
let back = ProtocolAdapter::deserialize_message(&bytes, TransportType::Tcp).unwrap();
assert_eq!(msg, back);
}
#[test]
fn test_protocol_adapter_unsupported_message() {
let msg = NetworkMessage::GetBanList(GetBanListMessage {
request_id: 0,
min_score: None,
});
let result = ProtocolAdapter::serialize_message(&msg, TransportType::Tcp);
assert!(result.is_err());
}