@@ -48,15 +48,14 @@ mod test {
4848 #[ tokio:: test]
4949 async fn spin_inbound_redis_outbound_redis_test ( ) -> Result < ( ) > {
5050 let host_port = 8082 ;
51- let forward_port = 6380 ;
5251 let redis_port = 6379 ;
5352
5453 // Ensure kubectl is in PATH
5554 if !is_kubectl_installed ( ) . await ? {
5655 anyhow:: bail!( "kubectl is not installed" ) ;
5756 }
5857
59- port_forward_redis ( forward_port, redis_port) . await ?;
58+ let forward_port = port_forward_redis ( redis_port) . await ?;
6059
6160 let client = redis:: Client :: open ( format ! ( "redis://localhost:{}" , forward_port) ) ?;
6261 let mut con = client. get_multiplexed_async_connection ( ) . await ?;
@@ -100,15 +99,14 @@ mod test {
10099 "Hello world from multi trigger Spin!"
101100 ) ;
102101
103- let forward_port = 6380 ;
104102 let redis_port = 6379 ;
105103
106104 // Ensure kubectl is in PATH
107105 if !is_kubectl_installed ( ) . await ? {
108106 anyhow:: bail!( "kubectl is not installed" ) ;
109107 }
110108
111- port_forward_redis ( forward_port, redis_port) . await ?;
109+ let forward_port = port_forward_redis ( redis_port) . await ?;
112110
113111 let client = redis:: Client :: open ( format ! ( "redis://localhost:{}" , forward_port) )
114112 . context ( "connecting to redis" ) ?;
@@ -143,17 +141,24 @@ mod test {
143141 }
144142 }
145143
146- async fn port_forward_redis ( forward_port : u16 , redis_port : u16 ) -> Result < ( ) > {
147- println ! (
148- " >>> kubectl portforward redis {}:{} " ,
149- forward_port , redis_port
150- ) ;
144+ async fn port_forward_redis ( redis_port : u16 ) -> Result < u16 > {
145+ let port = get_random_port ( ) ? ;
146+
147+ println ! ( " >>> kubectl portforward redis {}:{} " , port , redis_port) ;
148+
151149 Command :: new ( "kubectl" )
152150 . arg ( "port-forward" )
153151 . arg ( "redis" )
154- . arg ( format ! ( "{}:{}" , forward_port , redis_port) )
152+ . arg ( format ! ( "{}:{}" , port , redis_port) )
155153 . spawn ( ) ?;
156154 tokio:: time:: sleep ( tokio:: time:: Duration :: from_secs ( 2 ) ) . await ;
157- Ok ( ( ) )
155+ Ok ( port)
156+ }
157+
158+ /// Uses a track to get a random unused port
159+ fn get_random_port ( ) -> anyhow:: Result < u16 > {
160+ Ok ( std:: net:: TcpListener :: bind ( "localhost:0" ) ?
161+ . local_addr ( ) ?
162+ . port ( ) )
158163 }
159164}
0 commit comments