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