xref: /webrtc/turn/src/proto/addr/addr_test.rs (revision 5d8fe953)
1 use super::*;
2 use crate::error::Result;
3 
4 use std::net::Ipv4Addr;
5 
6 #[test]
test_addr_from_socket_addr() -> Result<()>7 fn test_addr_from_socket_addr() -> Result<()> {
8     let u = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 1234);
9 
10     let a = Addr::from_socket_addr(&u);
11     assert!(
12         u.ip() == a.ip || u.port() != a.port || u.to_string() != a.to_string(),
13         "not equal"
14     );
15     assert_eq!(a.network(), "turn", "unexpected network");
16 
17     Ok(())
18 }
19 
20 #[test]
test_addr_equal_ip() -> Result<()>21 fn test_addr_equal_ip() -> Result<()> {
22     let a = Addr {
23         ip: IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
24         port: 1337,
25     };
26     let b = Addr {
27         ip: IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
28         port: 1338,
29     };
30     assert_ne!(a, b, "a != b");
31     assert!(a.equal_ip(&b), "a.IP should equal to b.IP");
32 
33     Ok(())
34 }
35 
36 #[test]
test_five_tuple_equal() -> Result<()>37 fn test_five_tuple_equal() -> Result<()> {
38     let tests = vec![
39         ("blank", FiveTuple::default(), FiveTuple::default(), true),
40         (
41             "proto",
42             FiveTuple {
43                 proto: PROTO_UDP,
44                 ..Default::default()
45             },
46             FiveTuple::default(),
47             false,
48         ),
49         (
50             "server",
51             FiveTuple {
52                 server: Addr {
53                     port: 100,
54                     ..Default::default()
55                 },
56                 ..Default::default()
57             },
58             FiveTuple::default(),
59             false,
60         ),
61         (
62             "client",
63             FiveTuple {
64                 client: Addr {
65                     port: 100,
66                     ..Default::default()
67                 },
68                 ..Default::default()
69             },
70             FiveTuple::default(),
71             false,
72         ),
73     ];
74 
75     for (name, a, b, r) in tests {
76         let v = a == b;
77         assert_eq!(v, r, "({name}) {a} [{v}!={r}] {b}");
78     }
79 
80     Ok(())
81 }
82 
83 #[test]
test_five_tuple_string() -> Result<()>84 fn test_five_tuple_string() -> Result<()> {
85     let s = FiveTuple {
86         proto: PROTO_UDP,
87         server: Addr {
88             port: 100,
89             ip: IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
90         },
91         client: Addr {
92             port: 200,
93             ip: IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
94         },
95     }
96     .to_string();
97 
98     assert_eq!(
99         s, "127.0.0.1:200->127.0.0.1:100 (UDP)",
100         "unexpected stringer output"
101     );
102 
103     Ok(())
104 }
105