tunneler_core/server/
ports.rs1#[derive(Debug, PartialEq)]
4pub enum Strategy {
5 Single(u16),
8 Multiple(Vec<u16>),
10 Dynamic(Option<std::ops::Range<u16>>),
12}
13
14impl Strategy {
15 pub fn contains_port(&self, port: u16) -> bool {
18 match self {
19 Self::Single(tmp) => *tmp == port,
20 Self::Multiple(tmp) => tmp.contains(&port),
21 Self::Dynamic(tmp) => match tmp {
22 Some(range) => range.contains(&port),
23 None => true,
24 },
25 }
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn single_valid() {
35 let strat = Strategy::Single(13);
36 assert_eq!(true, strat.contains_port(13));
37 }
38 #[test]
39 fn single_invalid() {
40 let strat = Strategy::Single(13);
41 assert_eq!(false, strat.contains_port(52));
42 }
43
44 #[test]
45 fn multiple_valid() {
46 let strat = Strategy::Multiple(vec![10, 13, 52]);
47 assert_eq!(true, strat.contains_port(13));
48 }
49 #[test]
50 fn multiple_invalid() {
51 let strat = Strategy::Multiple(vec![13, 53]);
52 assert_eq!(false, strat.contains_port(52));
53 }
54
55 #[test]
56 fn dynamic_valid() {
57 let strat = Strategy::Dynamic(None);
58 assert_eq!(true, strat.contains_port(13));
59 }
60 #[test]
61 fn dynamic_range_valid() {
62 let strat = Strategy::Dynamic(Some(10..15));
63 assert_eq!(true, strat.contains_port(13));
64 }
65 #[test]
66 fn dynamic_range_invalid() {
67 let strat = Strategy::Dynamic(Some(10..51));
68 assert_eq!(false, strat.contains_port(52));
69 }
70}