diff --git a/tests/common/member_test.go b/tests/common/member_test.go index 1efb95039a6..27c5cb4cc51 100644 --- a/tests/common/member_test.go +++ b/tests/common/member_test.go @@ -113,6 +113,8 @@ func TestMemberAdd(t *testing.T) { for _, quorumTc := range quorumTcs { for _, clusterTc := range clusterTestCases() { t.Run(learnerTc.name+"/"+quorumTc.name+"/"+clusterTc.name, func(t *testing.T) { + t.Parallel() + ctxTimeout := 10 * time.Second if quorumTc.waitForQuorum { ctxTimeout += etcdserver.HealthInterval diff --git a/tests/framework/e2e/e2e.go b/tests/framework/e2e/e2e.go index f78df57926e..3d22b5c88de 100644 --- a/tests/framework/e2e/e2e.go +++ b/tests/framework/e2e/e2e.go @@ -17,6 +17,7 @@ package e2e import ( "context" "os" + "sync/atomic" "testing" "go.etcd.io/etcd/client/pkg/v3/testutil" @@ -24,6 +25,8 @@ import ( intf "go.etcd.io/etcd/tests/v3/framework/interfaces" ) +var uniqueBasePort int32 = 20000 + type e2eRunner struct{} func NewE2eRunner() intf.TestRunner { @@ -83,6 +86,7 @@ func (e e2eRunner) NewCluster(ctx context.Context, t testing.TB, opts ...config. default: t.Fatalf("PeerTLS config %q not supported", cfg.PeerTLS) } + e2eConfig.BasePort = int(atomic.AddInt32(&uniqueBasePort, int32(cfg.ClusterSize+2)*5)) epc, err := NewEtcdProcessCluster(ctx, t, WithConfig(e2eConfig)) if err != nil { t.Fatalf("could not start etcd integrationCluster: %s", err)