zombienet_orchestrator/generators/
port.rs1use std::net::TcpListener;
2
3use configuration::shared::types::Port;
4use support::constants::THIS_IS_A_BUG;
5
6use super::errors::GeneratorError;
7use crate::shared::types::ParkedPort;
8
9enum PortTypes {
11 Rpc,
12 P2P,
13 Prometheus,
14}
15
16pub fn generate(port: Option<Port>) -> Result<ParkedPort, GeneratorError> {
17 let port = port.unwrap_or(0);
18 let listener = TcpListener::bind(format!("0.0.0.0:{port}"))
19 .map_err(|_e| GeneratorError::PortGeneration(port, "Can't bind".into()))?;
20 let port = listener
21 .local_addr()
22 .expect(&format!(
23 "We should always get the local_addr from the listener {THIS_IS_A_BUG}"
24 ))
25 .port();
26 Ok(ParkedPort::new(port, listener))
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32 #[test]
33 fn generate_random() {
34 let port = generate(None).unwrap();
35 let listener = port.1.write().unwrap();
36
37 assert!(listener.is_some());
38 }
39
40 #[test]
41 fn generate_fixed_port() {
42 let port = generate(Some(33056)).unwrap();
43 let listener = port.1.write().unwrap();
44
45 assert!(listener.is_some());
46 assert_eq!(port.0, 33056);
47 }
48}