Respect server-wide auto setting

This commit is contained in:
John Doty 2024-08-10 06:54:26 -07:00
parent cc004df6e8
commit de06612eb1
2 changed files with 44 additions and 10 deletions

View file

@ -21,11 +21,20 @@ impl ServerConfig {
ServerConfig { auto: true, ports: HashMap::new() }
}
#[cfg(test)]
pub fn set_auto(&mut self, auto: bool) {
self.auto = auto;
}
#[cfg(test)]
pub fn insert(&mut self, port: u16, config: PortConfig) {
self.ports.insert(port, config);
}
pub fn auto(&self) -> bool {
self.auto
}
pub fn iter(&self) -> hash_map::Iter<u16, PortConfig> {
self.ports.iter()
}
@ -33,13 +42,6 @@ impl ServerConfig {
pub fn contains_key(&self, port: u16) -> bool {
self.ports.contains_key(&port)
}
pub fn get(&self, port: u16) -> PortConfig {
match self.ports.get(&port) {
None => PortConfig { enabled: self.auto, description: None },
Some(c) => c.clone(),
}
}
}
#[derive(Debug)]

View file

@ -95,9 +95,17 @@ struct Listener {
}
impl Listener {
pub fn from_desc(socks_port: Option<u16>, desc: PortDesc) -> Listener {
pub fn from_desc(
socks_port: Option<u16>,
desc: PortDesc,
enabled: bool,
) -> Listener {
let mut listener = Listener {
state: State::Enabled.boxed(),
state: if enabled {
State::Enabled.boxed()
} else {
State::Disabled.boxed()
},
config: None,
stop: None,
desc: Some(desc),
@ -599,7 +607,11 @@ impl UI {
assert!(!self.config.contains_key(port_desc.port));
self.ports.insert(
port_desc.port,
Listener::from_desc(self.socks_port, port_desc),
Listener::from_desc(
self.socks_port,
port_desc,
self.config.auto(),
),
);
}
}
@ -1103,4 +1115,24 @@ mod tests {
drop(sender);
}
#[test]
fn port_default_disabled_respected() {
let (sender, receiver) = mpsc::channel(64);
let mut config = ServerConfig::default();
config.set_auto(false);
let mut ui = UI::new(receiver, config);
ui.handle_internal_event(Some(UIEvent::Ports(vec![PortDesc {
port: 8080,
desc: "python3".to_string(),
}])));
let listener = ui.ports.get(&8080).unwrap();
assert_eq!(listener.state(), State::Disabled);
assert_eq!(listener.description(), "python3");
drop(sender);
}
}