1 use super::*; 2 use crate::error::Result; 3 4 #[test] 5 fn test_five_tuple_protocol() -> Result<()> { 6 let udp_expect = PROTO_UDP; 7 let tcp_expect = PROTO_TCP; 8 9 assert_eq!( 10 udp_expect, PROTO_UDP, 11 "Invalid UDP Protocol value, expect {} but {}", 12 udp_expect, PROTO_UDP 13 ); 14 assert_eq!( 15 tcp_expect, PROTO_TCP, 16 "Invalid TCP Protocol value, expect {} but {}", 17 tcp_expect, PROTO_TCP 18 ); 19 20 assert_eq!(udp_expect.to_string(), "UDP"); 21 assert_eq!(tcp_expect.to_string(), "TCP"); 22 23 Ok(()) 24 } 25 26 #[test] 27 fn test_five_tuple_equal() -> Result<()> { 28 let src_addr1: SocketAddr = "0.0.0.0:3478".parse::<SocketAddr>()?; 29 let src_addr2: SocketAddr = "0.0.0.0:3479".parse::<SocketAddr>()?; 30 31 let dst_addr1: SocketAddr = "0.0.0.0:3480".parse::<SocketAddr>()?; 32 let dst_addr2: SocketAddr = "0.0.0.0:3481".parse::<SocketAddr>()?; 33 34 let tests = vec![ 35 ( 36 "Equal", 37 true, 38 FiveTuple { 39 protocol: PROTO_UDP, 40 src_addr: src_addr1, 41 dst_addr: dst_addr1, 42 }, 43 FiveTuple { 44 protocol: PROTO_UDP, 45 src_addr: src_addr1, 46 dst_addr: dst_addr1, 47 }, 48 ), 49 ( 50 "DifferentProtocol", 51 false, 52 FiveTuple { 53 protocol: PROTO_TCP, 54 src_addr: src_addr1, 55 dst_addr: dst_addr1, 56 }, 57 FiveTuple { 58 protocol: PROTO_UDP, 59 src_addr: src_addr1, 60 dst_addr: dst_addr1, 61 }, 62 ), 63 ( 64 "DifferentSrcAddr", 65 false, 66 FiveTuple { 67 protocol: PROTO_UDP, 68 src_addr: src_addr1, 69 dst_addr: dst_addr1, 70 }, 71 FiveTuple { 72 protocol: PROTO_UDP, 73 src_addr: src_addr2, 74 dst_addr: dst_addr1, 75 }, 76 ), 77 ( 78 "DifferentDstAddr", 79 false, 80 FiveTuple { 81 protocol: PROTO_UDP, 82 src_addr: src_addr1, 83 dst_addr: dst_addr1, 84 }, 85 FiveTuple { 86 protocol: PROTO_UDP, 87 src_addr: src_addr1, 88 dst_addr: dst_addr2, 89 }, 90 ), 91 ]; 92 93 for (name, expect, a, b) in tests { 94 let fact = a == b; 95 assert_eq!( 96 expect, fact, 97 "{}: {}, {} equal check should be {}, but {}", 98 name, a, b, expect, fact 99 ); 100 } 101 102 Ok(()) 103 } 104