Skip to content

Commit d45b70b

Browse files
[release-18.0] Fix flaky tests that use vtcombo (vitessio#16178) (vitessio#16211)
Signed-off-by: Manan Gupta <[email protected]> Co-authored-by: Manan Gupta <[email protected]> Co-authored-by: Manan Gupta <[email protected]>
1 parent 6e1a252 commit d45b70b

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

go/cmd/vttestserver/cli/main_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func TestRunsVschemaMigrations(t *testing.T) {
5959
cluster, err := startCluster()
6060
defer cluster.TearDown()
6161

62-
assert.NoError(t, err)
62+
require.NoError(t, err)
6363
assertColumnVindex(t, cluster, columnVindex{keyspace: "test_keyspace", table: "test_table", vindex: "my_vdx", vindexType: "hash", column: "id"})
6464
assertColumnVindex(t, cluster, columnVindex{keyspace: "app_customer", table: "customers", vindex: "hash", vindexType: "hash", column: "id"})
6565

@@ -76,7 +76,7 @@ func TestPersistentMode(t *testing.T) {
7676
dir := t.TempDir()
7777

7878
cluster, err := startPersistentCluster(dir)
79-
assert.NoError(t, err)
79+
require.NoError(t, err)
8080

8181
// Add a new "ad-hoc" vindex via vtgate once the cluster is up, to later make sure it is persisted across teardowns
8282
err = addColumnVindex(cluster, "test_keyspace", "alter vschema on persistence_test add vindex my_vdx(id)")
@@ -115,7 +115,7 @@ func TestPersistentMode(t *testing.T) {
115115
cluster.PersistentMode = false // Cleanup the tmpdir as we're done
116116
cluster.TearDown()
117117
}()
118-
assert.NoError(t, err)
118+
require.NoError(t, err)
119119

120120
// rerun our sanity checks to make sure vschema is persisted correctly
121121
assertColumnVindex(t, cluster, columnVindex{keyspace: "test_keyspace", table: "test_table", vindex: "my_vdx", vindexType: "hash", column: "id"})
@@ -136,7 +136,7 @@ func TestForeignKeysAndDDLModes(t *testing.T) {
136136
defer resetConfig(conf)
137137

138138
cluster, err := startCluster("--foreign_key_mode=allow", "--enable_online_ddl=true", "--enable_direct_ddl=true")
139-
assert.NoError(t, err)
139+
require.NoError(t, err)
140140
defer cluster.TearDown()
141141

142142
err = execOnCluster(cluster, "test_keyspace", func(conn *mysql.Conn) error {
@@ -162,7 +162,7 @@ func TestForeignKeysAndDDLModes(t *testing.T) {
162162

163163
cluster.TearDown()
164164
cluster, err = startCluster("--foreign_key_mode=disallow", "--enable_online_ddl=false", "--enable_direct_ddl=false")
165-
assert.NoError(t, err)
165+
require.NoError(t, err)
166166
defer cluster.TearDown()
167167

168168
err = execOnCluster(cluster, "test_keyspace", func(conn *mysql.Conn) error {
@@ -190,7 +190,7 @@ func TestCanGetKeyspaces(t *testing.T) {
190190
defer resetConfig(conf)
191191

192192
cluster, err := startCluster()
193-
assert.NoError(t, err)
193+
require.NoError(t, err)
194194
defer cluster.TearDown()
195195

196196
assertGetKeyspaces(t, cluster)
@@ -215,7 +215,7 @@ func TestExternalTopoServerConsul(t *testing.T) {
215215

216216
cluster, err := startCluster("--external_topo_implementation=consul",
217217
fmt.Sprintf("--external_topo_global_server_address=%s", serverAddr), "--external_topo_global_root=consul_test/global")
218-
assert.NoError(t, err)
218+
require.NoError(t, err)
219219
defer cluster.TearDown()
220220

221221
assertGetKeyspaces(t, cluster)
@@ -251,7 +251,7 @@ func TestMtlsAuth(t *testing.T) {
251251
fmt.Sprintf("--vtctld_grpc_cert=%s", clientCert),
252252
fmt.Sprintf("--vtctld_grpc_ca=%s", caCert),
253253
fmt.Sprintf("--grpc_auth_mtls_allowed_substrings=%s", "CN=ClientApp"))
254-
assert.NoError(t, err)
254+
require.NoError(t, err)
255255
defer func() {
256256
cluster.PersistentMode = false // Cleanup the tmpdir as we're done
257257
cluster.TearDown()
@@ -295,7 +295,7 @@ func TestMtlsAuthUnauthorizedFails(t *testing.T) {
295295
fmt.Sprintf("--grpc_auth_mtls_allowed_substrings=%s", "CN=ClientApp"))
296296
defer cluster.TearDown()
297297

298-
assert.Error(t, err)
298+
require.Error(t, err)
299299
assert.Contains(t, err.Error(), "code = Unauthenticated desc = client certificate not authorized")
300300
}
301301

go/vt/vttest/environment.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package vttest
1919
import (
2020
"fmt"
2121
"math/rand"
22+
"net"
2223
"os"
2324
"path"
25+
"strconv"
2426
"strings"
2527

2628
"vitess.io/vitess/go/vt/proto/vttest"
@@ -238,9 +240,26 @@ func tmpdir(dataroot string) (dir string, err error) {
238240
return
239241
}
240242

243+
// randomPort gets a random port that is available for a TCP connection.
244+
// After we generate a random port, we try to establish tcp connections on it and the next 5 values.
245+
// If any of them fail, then we try a different port.
241246
func randomPort() int {
242-
v := rand.Int31n(20000)
243-
return int(v + 10000)
247+
for {
248+
port := int(rand.Int31n(20000) + 10000)
249+
portInUse := false
250+
for i := 0; i < 6; i++ {
251+
ln, err := net.Listen("tcp", net.JoinHostPort("127.0.0.1", strconv.Itoa(port+i)))
252+
if err != nil {
253+
portInUse = true
254+
break
255+
}
256+
ln.Close()
257+
}
258+
if portInUse {
259+
continue
260+
}
261+
return port
262+
}
244263
}
245264

246265
// NewLocalTestEnv returns an instance of the default test environment used

0 commit comments

Comments
 (0)