Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
23 changes: 10 additions & 13 deletions _example/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ package main
import (
"database/sql"
"fmt"
"net"
"testing"

_ "github.com/go-sql-driver/mysql"
"github.com/gocraft/dbr/v2"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

gms "github.com/dolthub/go-mysql-server/sql"
)

var expectedResults = [][]string{
Expand All @@ -35,7 +36,8 @@ var expectedResults = [][]string{

func TestExampleUsersDisabled(t *testing.T) {
enableUsers = false
useUnusedPort(t)
_, err := gms.GetEmptyPort()
require.NoError(t, err)
go func() {
main()
}()
Expand All @@ -53,7 +55,8 @@ func TestExampleUsersDisabled(t *testing.T) {
func TestExampleRootUserEnabled(t *testing.T) {
enableUsers = true
pretendThatFileExists = false
useUnusedPort(t)
_, err := gms.GetEmptyPort()
require.NoError(t, err)
go func() {
main()
}()
Expand All @@ -74,7 +77,8 @@ func TestExampleRootUserEnabled(t *testing.T) {
func TestExampleLoadedUser(t *testing.T) {
enableUsers = true
pretendThatFileExists = true
useUnusedPort(t)
_, err := gms.GetEmptyPort()
require.NoError(t, err)
go func() {
main()
}()
Expand All @@ -99,7 +103,8 @@ func TestExampleLoadedUser(t *testing.T) {
func TestIssue1621(t *testing.T) {
// This is an issue that is specific to using the example server, as this is not a logic issue but a setup issue
enableUsers = true
useUnusedPort(t)
_, err := gms.GetEmptyPort()
require.NoError(t, err)
go func() {
main()
}()
Expand Down Expand Up @@ -141,11 +146,3 @@ func checkRows(t *testing.T, expectedRows [][]string, actualRows *sql.Rows) {
}
assert.NoError(t, actualRows.Close())
}

func useUnusedPort(t *testing.T) {
// Tests should grab an open port, otherwise they'll fail if some hardcoded port is already in use
listener, err := net.Listen("tcp", ":0")
require.NoError(t, err)
port = listener.Addr().(*net.TCPAddr).Port
require.NoError(t, listener.Close())
}
9 changes: 2 additions & 7 deletions enginetest/engine_only_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
sql2 "database/sql"
"fmt"
"io"
"net"
"runtime"
"strings"
"testing"
Expand Down Expand Up @@ -1051,7 +1050,7 @@ func TestAlterTableWithBadSchema(t *testing.T) {
ctx := harness.NewContext()
ctx.SetCurrentDatabase("mydb")
_, iter, _, err := engine.Query(ctx, tt.q)
// errors should be analyze time, not execution time
// errors should analyze time, not execution time
if tt.err {
require.Error(t, err)
} else {
Expand All @@ -1065,14 +1064,10 @@ func TestAlterTableWithBadSchema(t *testing.T) {

func newDatabase() (*sql2.DB, func()) {
// Grab an empty port so that tests do not fail if a specific port is already in use
listener, err := net.Listen("tcp", ":0")
port, err := sql.GetEmptyPort()
if err != nil {
panic(err)
}
port := listener.Addr().(*net.TCPAddr).Port
if err = listener.Close(); err != nil {
panic(err)
}

harness := enginetest.NewDefaultMemoryHarness()
pro := harness.Provider()
Expand Down
18 changes: 6 additions & 12 deletions enginetest/enginetests.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
dsql "database/sql"
"fmt"
"io"
"net"
"os"
"reflect"
"strings"
Expand Down Expand Up @@ -2144,7 +2143,8 @@ func TestUserAuthentication(t *testing.T, h Harness) {
}
clientHarness.Setup(setup.MydbData, setup.MytableData)

port := getEmptyPort(t)
port, err := sql.GetEmptyPort()
require.NoError(t, err)
for _, script := range queries.ServerAuthTests {
t.Run(script.Name, func(t *testing.T) {
ctx := NewContextWithClient(clientHarness, sql.Client{
Expand Down Expand Up @@ -2240,14 +2240,6 @@ func TestUserAuthentication(t *testing.T, h Harness) {
}
}

func getEmptyPort(t *testing.T) int {
listener, err := net.Listen("tcp", ":0")
require.NoError(t, err)
port := listener.Addr().(*net.TCPAddr).Port
require.NoError(t, listener.Close())
return port
}

func TestComplexIndexQueries(t *testing.T, harness Harness) {
harness.Setup(setup.ComplexIndexSetup...)
e := mustNewEngine(t, harness)
Expand Down Expand Up @@ -5725,7 +5717,8 @@ func testCharsetCollationWire(t *testing.T, h Harness, sessionBuilder server.Ses
harness.Setup(setup.MydbData)
}

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

port := getEmptyPort(t)
port, err := sql.GetEmptyPort()
require.NoError(t, err)
for _, script := range queries.TypeWireTests {
t.Run(script.Name, func(t *testing.T) {
e := mustNewEngine(t, harness)
Expand Down
16 changes: 1 addition & 15 deletions enginetest/server_engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"errors"
"fmt"
"io"
"net"
"strconv"
"strings"
"testing"
Expand Down Expand Up @@ -61,7 +60,7 @@ func NewServerQueryEngine(t *testing.T, engine *sqle.Engine, builder server.Sess
panic(err)
}

p, err := findEmptyPort()
p, err := sql.GetEmptyPort()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -708,19 +707,6 @@ func prepareBindingArgs(ctx *sql.Context, bindings map[string]sqlparser.Expr) ([
return args, nil
}

func findEmptyPort() (int, error) {
listener, err := net.Listen("tcp", ":0")
if err != nil {
return -1, err
}
port := listener.Addr().(*net.TCPAddr).Port
if err = listener.Close(); err != nil {
return -1, err

}
return port, nil
}

func (s *ServerQueryEngine) CloseSession(connID uint32) {
// TODO
}
Expand Down
20 changes: 3 additions & 17 deletions enginetest/server_engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
gosql "database/sql"
"fmt"
"math"
"net"
"os"
"testing"

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

func findEmptyPort() (int, error) {
listener, err := net.Listen("tcp", ":0")
if err != nil {
return -1, err
}
port := listener.Addr().(*net.TCPAddr).Port
if err = listener.Close(); err != nil {
return -1, err

}
return port, nil
}

// initTestServer initializes an in-memory server with the given port, but does not start it.
func initTestServer(port int) (*server.Server, error) {
pro := memory.NewDBProvider()
Expand All @@ -58,7 +44,7 @@ func initTestServer(port int) (*server.Server, error) {

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

s, err := initTestServer(port)
Expand Down Expand Up @@ -315,7 +301,7 @@ func TestServerPreparedStatements(t *testing.T) {
},
}

port, perr := findEmptyPort()
port, perr := sql.GetEmptyPort()
require.NoError(t, perr)

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

port, perr := findEmptyPort()
port, perr := sql.GetEmptyPort()
require.NoError(t, perr)

s, serr := initTestServer(port)
Expand Down
4 changes: 2 additions & 2 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ func NewServerWithHandler(
return newServerFromHandler(cfg, e, sm, handler, listener)
}

func portInUse(hostPort string) bool {
func PortInUse(hostPort string) bool {
timeout := time.Second
conn, _ := net.DialTimeout("tcp", hostPort, timeout)
if conn != nil {
Expand Down Expand Up @@ -166,7 +166,7 @@ func newServerFromHandler(cfg Config, e *sqle.Engine, sm *SessionManager, handle
l := cfg.Listener
var unixSocketInUse error
if l == nil {
if portInUse(cfg.Address) {
if PortInUse(cfg.Address) {
unixSocketInUse = fmt.Errorf("Port %s already in use.", cfg.Address)
}

Expand Down
15 changes: 15 additions & 0 deletions sql/testutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,24 @@

package sql

import "net"

func MustConvert(val interface{}, _ ConvertInRange, err error) interface{} {
if err != nil {
panic(err)
}
return val
}

func GetEmptyPort() (int, error) {
listener, err := net.Listen("tcp", ":0")
if err != nil {
return -1, err
}
port := listener.Addr().(*net.TCPAddr).Port
if err = listener.Close(); err != nil {
return -1, err

}
return port, nil
}
Loading