test: random port: prevent port reuse

Carlos Alexandro Becker created

Change summary

server/test/test.go | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)

Detailed changes

server/test/test.go 🔗

@@ -1,11 +1,29 @@
 package test
 
-import "net"
+import (
+	"net"
+	"sync"
+)
+
+var (
+	used = map[int]struct{}{}
+	lock sync.Mutex
+)
 
 // RandomPort returns a random port number.
 // This is mainly used for testing.
 func RandomPort() int {
 	addr, _ := net.Listen("tcp", ":0") //nolint:gosec
 	_ = addr.Close()
-	return addr.Addr().(*net.TCPAddr).Port
+	port := addr.Addr().(*net.TCPAddr).Port
+	lock.Lock()
+
+	if _, ok := used[port]; ok {
+		lock.Unlock()
+		return RandomPort()
+	}
+
+	used[port] = struct{}{}
+	lock.Unlock()
+	return port
 }