Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
a97e471
chore: use free port instead of :0
ysmolski Dec 3, 2025
d67b654
use freeport more explicitely
ysmolski Dec 3, 2025
0be11dc
vendor-in the freeport and try debug mode
ysmolski Dec 4, 2025
0b020cc
ignore correct routines in the leak functions
ysmolski Dec 4, 2025
ebbf94d
uncomment the test
ysmolski Dec 4, 2025
0082610
clean output
ysmolski Dec 4, 2025
a0e2130
Merge branch 'main' into yury/fix_ports_flakiness
ysmolski Dec 4, 2025
e802674
return port that was not used in case of error
ysmolski Dec 4, 2025
0833c34
Revert "return port that was not used in case of error"
ysmolski Dec 4, 2025
c696caf
Merge branch 'main' into yury/fix_ports_flakiness
ysmolski Dec 4, 2025
6d7d768
do proper cleanup of Stderr
ysmolski Dec 4, 2025
e25723b
vendor-in the retry package
ysmolski Dec 4, 2025
59e8015
remove unused method
ysmolski Dec 4, 2025
3d79a08
Merge branch 'main' into yury/fix_ports_flakiness
ysmolski Dec 5, 2025
b76c241
use ephemeral ports for demo and grpc servers
ysmolski Dec 5, 2025
8e7bdf1
don't overwrite listeners on NewUnstartedServer's
ysmolski Dec 5, 2025
6122cd9
Merge branch 'main' of github.com:wundergraph/cosmo into yury/fix_por…
ysmolski Dec 5, 2025
ab60273
Merge branch 'main' into yury/fix_ports_flakiness
ysmolski Dec 8, 2025
fe9150d
use the correct log level in freeport
ysmolski Dec 8, 2025
302db28
clarify the comment
ysmolski Dec 8, 2025
4243fd3
address comments
ysmolski Dec 8, 2025
8861cb6
Merge branch 'main' into yury/fix_ports_flakiness
ysmolski Dec 8, 2025
64c70d3
handle errors gracefully
ysmolski Dec 8, 2025
3e54a0a
Merge branch 'main' of github.com:wundergraph/cosmo into yury/fix_por…
ysmolski Dec 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
365 changes: 365 additions & 0 deletions router-tests/freeport/LICENSE

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions router-tests/freeport/ephemeral_darwin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

//go:build darwin

package freeport

import (
"fmt"
"os/exec"
"regexp"
"strconv"
)

const ephemeralPortRangeSysctlFirst = "net.inet.ip.portrange.first"
const ephemeralPortRangeSysctlLast = "net.inet.ip.portrange.last"

var ephemeralPortRangePatt = regexp.MustCompile(`^\s*(\d+)\s+(\d+)\s*$`)

func getEphemeralPortRange() (int, int, error) {
cmd := exec.Command("/usr/sbin/sysctl", "-n", ephemeralPortRangeSysctlFirst, ephemeralPortRangeSysctlLast)
out, err := cmd.Output()
if err != nil {
return 0, 0, err
}

val := string(out)

m := ephemeralPortRangePatt.FindStringSubmatch(val)
if m != nil {
min, err1 := strconv.Atoi(m[1])
max, err2 := strconv.Atoi(m[2])

if err1 == nil && err2 == nil {
return min, max, nil
}
}

return 0, 0, fmt.Errorf("unexpected sysctl value %q for keys %q, %q", val, ephemeralPortRangeSysctlFirst, ephemeralPortRangeSysctlLast)
}
21 changes: 21 additions & 0 deletions router-tests/freeport/ephemeral_darwin_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

//go:build darwin

package freeport

import (
"testing"
)

func TestGetEphemeralPortRange(t *testing.T) {
min, max, err := getEphemeralPortRange()
if err != nil {
t.Fatalf("err: %v", err)
}
if min <= 0 || max <= 0 || min > max {
t.Fatalf("unexpected values: min=%d, max=%d", min, max)
}
t.Logf("min=%d, max=%d", min, max)
}
10 changes: 10 additions & 0 deletions router-tests/freeport/ephemeral_fallback.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

//go:build !linux && !darwin

package freeport

func getEphemeralPortRange() (int, int, error) {
return 0, 0, nil
}
38 changes: 38 additions & 0 deletions router-tests/freeport/ephemeral_linux.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

//go:build linux

package freeport

import (
"fmt"
"os"
"regexp"
"strconv"
)

const ephemeralPortRangeProcFile = "/proc/sys/net/ipv4/ip_local_port_range"

var ephemeralPortRangePatt = regexp.MustCompile(`^\s*(\d+)\s+(\d+)\s*$`)

func getEphemeralPortRange() (int, int, error) {
out, err := os.ReadFile(ephemeralPortRangeProcFile)
if err != nil {
return 0, 0, err
}

val := string(out)

m := ephemeralPortRangePatt.FindStringSubmatch(val)
if m != nil {
min, err1 := strconv.Atoi(m[1])
max, err2 := strconv.Atoi(m[2])

if err1 == nil && err2 == nil {
return min, max, nil
}
}

return 0, 0, fmt.Errorf("unexpected sysctl value %q for key %q", val, ephemeralPortRangeProcFile)
}
21 changes: 21 additions & 0 deletions router-tests/freeport/ephemeral_linux_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

//go:build linux

package freeport

import (
"testing"
)

func TestGetEphemeralPortRange(t *testing.T) {
min, max, err := getEphemeralPortRange()
if err != nil {
t.Fatalf("err: %v", err)
}
if min <= 0 || max <= 0 || min > max {
t.Fatalf("unexpected values: min=%d, max=%d", min, max)
}
t.Logf("min=%d, max=%d", min, max)
}
Loading
Loading