Skip to main content

tunneler_core/server/
ports.rs

1/// The Strategy used to determine if a given Port is valid
2/// according to the Strategy and its parameters
3#[derive(Debug, PartialEq)]
4pub enum Strategy {
5    /// Only the given Port is accepted and
6    /// every other one is rejected
7    Single(u16),
8    /// Accepts the Ports in the Vector
9    Multiple(Vec<u16>),
10    /// Accepts all the Ports in the Range
11    Dynamic(Option<std::ops::Range<u16>>),
12}
13
14impl Strategy {
15    /// Checks if the given Port conforms to the
16    /// Strategy that is being used
17    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}