Skip to content

Commit b961afb

Browse files
authored
Merge pull request #3163 from dolthub/angela/port_utils
[no-release-notes] Refactor repeated getEmptyPort functions into shared util
2 parents 6bf02c2 + bd7c32e commit b961afb

File tree

7 files changed

+39
-66
lines changed

7 files changed

+39
-66
lines changed

_example/main_test.go

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ package main
1717
import (
1818
"database/sql"
1919
"fmt"
20-
"net"
2120
"testing"
2221

2322
_ "github.com/go-sql-driver/mysql"
2423
"github.com/gocraft/dbr/v2"
2524
"github.com/stretchr/testify/assert"
2625
"github.com/stretchr/testify/require"
26+
27+
gms "github.com/dolthub/go-mysql-server/sql"
2728
)
2829

2930
var expectedResults = [][]string{
@@ -35,7 +36,8 @@ var expectedResults = [][]string{
3536

3637
func TestExampleUsersDisabled(t *testing.T) {
3738
enableUsers = false
38-
useUnusedPort(t)
39+
_, err := gms.GetEmptyPort()
40+
require.NoError(t, err)
3941
go func() {
4042
main()
4143
}()
@@ -53,7 +55,8 @@ func TestExampleUsersDisabled(t *testing.T) {
5355
func TestExampleRootUserEnabled(t *testing.T) {
5456
enableUsers = true
5557
pretendThatFileExists = false
56-
useUnusedPort(t)
58+
_, err := gms.GetEmptyPort()
59+
require.NoError(t, err)
5760
go func() {
5861
main()
5962
}()
@@ -74,7 +77,8 @@ func TestExampleRootUserEnabled(t *testing.T) {
7477
func TestExampleLoadedUser(t *testing.T) {
7578
enableUsers = true
7679
pretendThatFileExists = true
77-
useUnusedPort(t)
80+
_, err := gms.GetEmptyPort()
81+
require.NoError(t, err)
7882
go func() {
7983
main()
8084
}()
@@ -99,7 +103,8 @@ func TestExampleLoadedUser(t *testing.T) {
99103
func TestIssue1621(t *testing.T) {
100104
// This is an issue that is specific to using the example server, as this is not a logic issue but a setup issue
101105
enableUsers = true
102-
useUnusedPort(t)
106+
_, err := gms.GetEmptyPort()
107+
require.NoError(t, err)
103108
go func() {
104109
main()
105110
}()
@@ -141,11 +146,3 @@ func checkRows(t *testing.T, expectedRows [][]string, actualRows *sql.Rows) {
141146
}
142147
assert.NoError(t, actualRows.Close())
143148
}
144-
145-
func useUnusedPort(t *testing.T) {
146-
// Tests should grab an open port, otherwise they'll fail if some hardcoded port is already in use
147-
listener, err := net.Listen("tcp", ":0")
148-
require.NoError(t, err)
149-
port = listener.Addr().(*net.TCPAddr).Port
150-
require.NoError(t, listener.Close())
151-
}

enginetest/engine_only_test.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
sql2 "database/sql"
2020
"fmt"
2121
"io"
22-
"net"
2322
"runtime"
2423
"strings"
2524
"testing"
@@ -1051,7 +1050,7 @@ func TestAlterTableWithBadSchema(t *testing.T) {
10511050
ctx := harness.NewContext()
10521051
ctx.SetCurrentDatabase("mydb")
10531052
_, iter, _, err := engine.Query(ctx, tt.q)
1054-
// errors should be analyze time, not execution time
1053+
// errors should analyze time, not execution time
10551054
if tt.err {
10561055
require.Error(t, err)
10571056
} else {
@@ -1065,14 +1064,10 @@ func TestAlterTableWithBadSchema(t *testing.T) {
10651064

10661065
func newDatabase() (*sql2.DB, func()) {
10671066
// Grab an empty port so that tests do not fail if a specific port is already in use
1068-
listener, err := net.Listen("tcp", ":0")
1067+
port, err := sql.GetEmptyPort()
10691068
if err != nil {
10701069
panic(err)
10711070
}
1072-
port := listener.Addr().(*net.TCPAddr).Port
1073-
if err = listener.Close(); err != nil {
1074-
panic(err)
1075-
}
10761071

10771072
harness := enginetest.NewDefaultMemoryHarness()
10781073
pro := harness.Provider()

enginetest/enginetests.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
dsql "database/sql"
2121
"fmt"
2222
"io"
23-
"net"
2423
"os"
2524
"reflect"
2625
"strings"
@@ -2144,7 +2143,8 @@ func TestUserAuthentication(t *testing.T, h Harness) {
21442143
}
21452144
clientHarness.Setup(setup.MydbData, setup.MytableData)
21462145

2147-
port := getEmptyPort(t)
2146+
port, err := sql.GetEmptyPort()
2147+
require.NoError(t, err)
21482148
for _, script := range queries.ServerAuthTests {
21492149
t.Run(script.Name, func(t *testing.T) {
21502150
ctx := NewContextWithClient(clientHarness, sql.Client{
@@ -2240,14 +2240,6 @@ func TestUserAuthentication(t *testing.T, h Harness) {
22402240
}
22412241
}
22422242

2243-
func getEmptyPort(t *testing.T) int {
2244-
listener, err := net.Listen("tcp", ":0")
2245-
require.NoError(t, err)
2246-
port := listener.Addr().(*net.TCPAddr).Port
2247-
require.NoError(t, listener.Close())
2248-
return port
2249-
}
2250-
22512243
func TestComplexIndexQueries(t *testing.T, harness Harness) {
22522244
harness.Setup(setup.ComplexIndexSetup...)
22532245
e := mustNewEngine(t, harness)
@@ -5725,7 +5717,8 @@ func testCharsetCollationWire(t *testing.T, h Harness, sessionBuilder server.Ses
57255717
harness.Setup(setup.MydbData)
57265718
}
57275719

5728-
port := getEmptyPort(t)
5720+
port, err := sql.GetEmptyPort()
5721+
require.NoError(t, err)
57295722
for _, script := range tests {
57305723
t.Run(script.Name, func(t *testing.T) {
57315724
serverConfig := server.Config{
@@ -5829,7 +5822,8 @@ func extractCollationIdForField(r *dsql.Rows, i int) uint64 {
58295822
func TestTypesOverWire(t *testing.T, harness ClientHarness, sessionBuilder server.SessionBuilder) {
58305823
harness.Setup(setup.MydbData)
58315824

5832-
port := getEmptyPort(t)
5825+
port, err := sql.GetEmptyPort()
5826+
require.NoError(t, err)
58335827
for _, script := range queries.TypeWireTests {
58345828
t.Run(script.Name, func(t *testing.T) {
58355829
e := mustNewEngine(t, harness)

enginetest/server_engine.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"errors"
2121
"fmt"
2222
"io"
23-
"net"
2423
"strconv"
2524
"strings"
2625
"testing"
@@ -61,7 +60,7 @@ func NewServerQueryEngine(t *testing.T, engine *sqle.Engine, builder server.Sess
6160
panic(err)
6261
}
6362

64-
p, err := findEmptyPort()
63+
p, err := sql.GetEmptyPort()
6564
if err != nil {
6665
return nil, err
6766
}
@@ -708,19 +707,6 @@ func prepareBindingArgs(ctx *sql.Context, bindings map[string]sqlparser.Expr) ([
708707
return args, nil
709708
}
710709

711-
func findEmptyPort() (int, error) {
712-
listener, err := net.Listen("tcp", ":0")
713-
if err != nil {
714-
return -1, err
715-
}
716-
port := listener.Addr().(*net.TCPAddr).Port
717-
if err = listener.Close(); err != nil {
718-
return -1, err
719-
720-
}
721-
return port, nil
722-
}
723-
724710
func (s *ServerQueryEngine) CloseSession(connID uint32) {
725711
// TODO
726712
}

enginetest/server_engine_test.go

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
gosql "database/sql"
66
"fmt"
77
"math"
8-
"net"
98
"os"
109
"testing"
1110

@@ -25,19 +24,6 @@ var (
2524
noUserFmt = "no_user:@tcp(%s:%d)/"
2625
)
2726

28-
func findEmptyPort() (int, error) {
29-
listener, err := net.Listen("tcp", ":0")
30-
if err != nil {
31-
return -1, err
32-
}
33-
port := listener.Addr().(*net.TCPAddr).Port
34-
if err = listener.Close(); err != nil {
35-
return -1, err
36-
37-
}
38-
return port, nil
39-
}
40-
4127
// initTestServer initializes an in-memory server with the given port, but does not start it.
4228
func initTestServer(port int) (*server.Server, error) {
4329
pro := memory.NewDBProvider()
@@ -58,7 +44,7 @@ func initTestServer(port int) (*server.Server, error) {
5844

5945
// TestSmoke checks that an in-memory server can be started and stopped without error.
6046
func TestSmoke(t *testing.T) {
61-
port, err := findEmptyPort()
47+
port, err := sql.GetEmptyPort()
6248
require.NoError(t, err)
6349

6450
s, err := initTestServer(port)
@@ -315,7 +301,7 @@ func TestServerPreparedStatements(t *testing.T) {
315301
},
316302
}
317303

318-
port, perr := findEmptyPort()
304+
port, perr := sql.GetEmptyPort()
319305
require.NoError(t, perr)
320306

321307
s, serr := initTestServer(port)
@@ -381,7 +367,7 @@ func TestServerVariables(t *testing.T) {
381367
hostname, herr := os.Hostname()
382368
require.NoError(t, herr)
383369

384-
port, perr := findEmptyPort()
370+
port, perr := sql.GetEmptyPort()
385371
require.NoError(t, perr)
386372

387373
s, serr := initTestServer(port)

server/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func NewServerWithHandler(
113113
return newServerFromHandler(cfg, e, sm, handler, listener)
114114
}
115115

116-
func portInUse(hostPort string) bool {
116+
func PortInUse(hostPort string) bool {
117117
timeout := time.Second
118118
conn, _ := net.DialTimeout("tcp", hostPort, timeout)
119119
if conn != nil {
@@ -166,7 +166,7 @@ func newServerFromHandler(cfg Config, e *sqle.Engine, sm *SessionManager, handle
166166
l := cfg.Listener
167167
var unixSocketInUse error
168168
if l == nil {
169-
if portInUse(cfg.Address) {
169+
if PortInUse(cfg.Address) {
170170
unixSocketInUse = fmt.Errorf("Port %s already in use.", cfg.Address)
171171
}
172172

sql/testutils.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,24 @@
1414

1515
package sql
1616

17+
import "net"
18+
1719
func MustConvert(val interface{}, _ ConvertInRange, err error) interface{} {
1820
if err != nil {
1921
panic(err)
2022
}
2123
return val
2224
}
25+
26+
func GetEmptyPort() (int, error) {
27+
listener, err := net.Listen("tcp", ":0")
28+
if err != nil {
29+
return -1, err
30+
}
31+
port := listener.Addr().(*net.TCPAddr).Port
32+
if err = listener.Close(); err != nil {
33+
return -1, err
34+
35+
}
36+
return port, nil
37+
}

0 commit comments

Comments
 (0)