package mock import ( "net" "strconv" "testing" ) func TestAcquireProxy_sharedAcrossAcquires(t *testing.T) { t.Parallel() port := freePort(t) addr := net.JoinHostPort(mockProxyIP, strconv.Itoa(int(port))) release1, err := acquireProxy(port) if err != nil { t.Fatalf("acquireProxy() #1 error = %v", err) } // A second acquire for the same port must join the existing listener // rather than fail trying to bind it again — this is the whole point // of sharing by port instead of by IP. release2, err := acquireProxy(port) if err != nil { t.Fatalf("acquireProxy() #2 error = %v, want nil (should share the existing listener)", err) } release1() // One reference remains; the port must still be in use. if ln, err := net.Listen("tcp", addr); err == nil { ln.Close() t.Fatal("port became bindable after releasing only one of two references") } release2() // Last reference released: the port must now be free. ln, err := net.Listen("tcp", addr) if err != nil { t.Fatalf("port not released after last reference: %v", err) } ln.Close() } func TestAcquireProxy_releaseIsIdempotent(t *testing.T) { t.Parallel() port := freePort(t) release, err := acquireProxy(port) if err != nil { t.Fatalf("acquireProxy() error = %v", err) } release() release() // must not panic or double-decrement into a negative refcount }