Commit 24bfb570 authored by antirez's avatar antirez
Browse files

Redis test ports selection made more robust. This prevents the test from...

Redis test ports selection made more robust. This prevents the test from hanging if an already bound port is selected but the TCP server listening to it does not cause a protocol error with a Redis client PING. Also base port moved away from the range near to the Redis Cluster gossip ports.
parent 0bb5160c
...@@ -154,7 +154,8 @@ proc start_server {options {code undefined}} { ...@@ -154,7 +154,8 @@ proc start_server {options {code undefined}} {
dict set config dir [tmpdir server] dict set config dir [tmpdir server]
# start every server on a different port # start every server on a different port
dict set config port [incr ::port] set ::port [find_available_port [expr {$::port+1}]]
dict set config port $::port
# apply overrides from global space and arguments # apply overrides from global space and arguments
foreach {directive arguments} [concat $::global_overrides $overrides] { foreach {directive arguments} [concat $::global_overrides $overrides] {
......
...@@ -38,7 +38,7 @@ set ::all_tests { ...@@ -38,7 +38,7 @@ set ::all_tests {
set ::next_test 0 set ::next_test 0
set ::host 127.0.0.1 set ::host 127.0.0.1
set ::port 16379 set ::port 21111
set ::traceleaks 0 set ::traceleaks 0
set ::valgrind 0 set ::valgrind 0
set ::verbose 0 set ::verbose 0
...@@ -149,36 +149,38 @@ proc cleanup {} { ...@@ -149,36 +149,38 @@ proc cleanup {} {
puts "OK" puts "OK"
} }
proc find_available_port start {
for {set j $start} {$j < $start+1024} {incr j} {
if {[catch {
set fd [socket 127.0.0.1 $start]
}]} {
return $start
} else {
close $fd
}
}
if {$j == $start+1024} {
error "Can't find a non busy port in the $start-[expr {$start+1023}] range."
}
}
proc test_server_main {} { proc test_server_main {} {
cleanup cleanup
# Open a listening socket, trying different ports in order to find a # Open a listening socket, trying different ports in order to find a
# non busy one. # non busy one.
set port 11111 set port [find_available_port 11111]
while 1 {
puts "Starting test server at port $port" puts "Starting test server at port $port"
if {[catch {socket -server accept_test_clients $port} e]} { socket -server accept_test_clients $port
if {[string match {*address already in use*} $e]} {
if {$port == 20000} {
puts "Can't find an available TCP port for test server."
exit 1
} else {
incr port
}
} else {
puts "Fatal error starting test server: $e"
exit 1
}
} else {
break
}
}
# Start the client instances # Start the client instances
set ::clients_pids {} set ::clients_pids {}
set start_port [expr {$::port+100}]
for {set j 0} {$j < $::numclients} {incr j} { for {set j 0} {$j < $::numclients} {incr j} {
set start_port [find_available_port $start_port]
set p [exec tclsh8.5 [info script] {*}$::argv \ set p [exec tclsh8.5 [info script] {*}$::argv \
--client $port --port [expr {$::port+($j*10)}] &] --client $port --port $start_port &]
lappend ::clients_pids $p lappend ::clients_pids $p
incr start_port 10
} }
# Setup global state for the test server # Setup global state for the test server
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment