PortAllocator: Check if generated port is not already in use or reserved
Change-Id: Ic152e5265fe06b62d8e4e94e8212b02eb42025dd
diff --git a/core/port-allocator/main.go b/core/port-allocator/main.go
index 6b4fd47..3d69ab9 100644
--- a/core/port-allocator/main.go
+++ b/core/port-allocator/main.go
@@ -200,7 +200,9 @@
p := start + int(r.Int64())
ps := strconv.Itoa(p)
if _, ok := pm[ps]; !ok {
- return p, nil
+ if _, ok := reserve[p]; !ok {
+ return p, nil
+ }
}
}
return -1, fmt.Errorf("could not generate random port")
diff --git a/core/port-allocator/main_test.go b/core/port-allocator/main_test.go
index caf2d51..c56f51c 100644
--- a/core/port-allocator/main_test.go
+++ b/core/port-allocator/main_test.go
@@ -171,3 +171,17 @@
}
t.Logf("Generated secret: %s", secret)
}
+
+func TestReservePort(t *testing.T) {
+ pm := map[string]struct{}{
+ "10000": {},
+ }
+ reserve := make(map[int]string)
+ for i := start; i <= end; i++ {
+ reserve[i] = "reserved"
+ }
+ _, err := reservePort(pm, reserve)
+ if err != nil {
+ t.Fatalf("error: %v", err)
+ }
+}