From b329b276e07d7d4fde3b86e402d603e78eeee192 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 24 May 2023 16:36:57 +0000 Subject: [PATCH] test: random port: prevent port reuse --- server/test/test.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/server/test/test.go b/server/test/test.go index a9d4d0eca7ac48899385dd23254c66f1249e2855..bfaac42c594791536d233685a87bf28f37dc2ba5 100644 --- a/server/test/test.go +++ b/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 }