1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
mod binary_stream;
mod packet;
mod peer;
mod util;
use std::sync::Arc;
use tokio::sync::Mutex;
pub use binary_stream::*;
pub use packet::*;
pub use peer::*;
pub use util::*;
type AM<T> = Arc<Mutex<T>>;
#[cfg(test)]
mod tests {
use std::{net::{Ipv6Addr, SocketAddr, SocketAddrV6}};
use crate::{BinaryStream, HandshakeResponsePacket, Serializable, SerializableSocketAddr};
#[derive(Debug, Default, PartialEq)]
struct Alpha(u32, Vec<u8>);
impl Serializable for Alpha {
fn to_stream(&self, stream: &mut BinaryStream) {
stream.write_u32(self.0).unwrap();
stream.write_byte_vec(&self.1).unwrap();
}
fn from_stream(stream: &mut BinaryStream) -> Self {
Alpha(stream.read_u32().unwrap(), stream.read_byte_vec().unwrap())
}
}
#[test]
fn serialization_test() {
let vec = vec![Alpha(1, vec![5, 10, 15]), Alpha(2, vec![100, 200, 255]), Alpha(3, vec![5, 7, 12])];
let mut stream = BinaryStream::new();
stream.write_vec(&vec).unwrap();
let mut deserialization_stream = BinaryStream::from_buffer(stream.get_buffer());
let vec_new_deserialized = deserialization_stream.read_vec::<Alpha>().unwrap();
for i in 0..vec.len() {
assert_eq!(vec[i], vec_new_deserialized[i])
}
}
#[test]
fn empty_vec_serialization_test() {
let alpha = Alpha(0, vec![]);
let mut stream = BinaryStream::new();
alpha.to_stream(&mut stream);
let mut deserialization_stream = BinaryStream::from_buffer(stream.get_buffer());
let alpha_deserialized = Alpha::from_stream(&mut deserialization_stream);
println!("A {:?} <=> A-Des. {:?}", alpha, alpha_deserialized);
assert_eq!(alpha, alpha_deserialized)
}
#[test]
fn socket_addr_serialization_test() {
let sock_addr = SerializableSocketAddr::from_sock_addr(SocketAddr::V6(SocketAddrV6::new(Ipv6Addr::new(0, 25, 0, 0, 0, 668, 0, 1), 8081, 0, 0)));
let sock_addr2 = SerializableSocketAddr::from_sock_addr(SocketAddr::V6(SocketAddrV6::new(Ipv6Addr::new(12312, 0, 0, 1, 0, 0, 0, 2), 8080, 0, 0)));
let handshake_res_packet = HandshakeResponsePacket {
peers: vec![sock_addr, sock_addr2]
};
let mut stream = BinaryStream::new();
handshake_res_packet.to_stream(&mut stream);
let mut deser_stream = BinaryStream::from_buffer(stream.get_buffer());
let deser_handshake_res_packet = HandshakeResponsePacket::from_stream(&mut deser_stream);
for i in 0..deser_handshake_res_packet.peers.len() {
assert_eq!(handshake_res_packet.peers[i],
deser_handshake_res_packet.peers[i]);
}
}
}