From 0a106754d32e3241c03dcdf8bcdb16b841adcde5 Mon Sep 17 00:00:00 2001 From: Piotr Tabor Date: Fri, 11 Sep 2020 18:59:33 +0200 Subject: [PATCH 1/2] etcdserver: Speed-up v3compactor unit tests. The tests were taking ~15s because of 5s wait time in Recorder !? --- etcdserver/api/v3compactor/periodic_test.go | 13 +++++++------ etcdserver/api/v3compactor/revision_test.go | 4 ++-- pkg/testutil/recorder.go | 11 ++++++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/etcdserver/api/v3compactor/periodic_test.go b/etcdserver/api/v3compactor/periodic_test.go index c876ab408..31248d772 100644 --- a/etcdserver/api/v3compactor/periodic_test.go +++ b/etcdserver/api/v3compactor/periodic_test.go @@ -31,8 +31,9 @@ func TestPeriodicHourly(t *testing.T) { retentionDuration := time.Duration(retentionHours) * time.Hour fc := clockwork.NewFakeClock() - rg := &fakeRevGetter{testutil.NewRecorderStream(), 0} - compactable := &fakeCompactable{testutil.NewRecorderStream()} + // TODO: Do not depand or real time (Recorder.Wait) in unit tests. + rg := &fakeRevGetter{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond), 0} + compactable := &fakeCompactable{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond)} tb := newPeriodic(zap.NewExample(), fc, retentionDuration, rg, compactable) tb.Run() @@ -82,8 +83,8 @@ func TestPeriodicMinutes(t *testing.T) { retentionDuration := time.Duration(retentionMinutes) * time.Minute fc := clockwork.NewFakeClock() - rg := &fakeRevGetter{testutil.NewRecorderStream(), 0} - compactable := &fakeCompactable{testutil.NewRecorderStream()} + rg := &fakeRevGetter{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond), 0} + compactable := &fakeCompactable{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond)} tb := newPeriodic(zap.NewExample(), fc, retentionDuration, rg, compactable) tb.Run() @@ -130,8 +131,8 @@ func TestPeriodicMinutes(t *testing.T) { func TestPeriodicPause(t *testing.T) { fc := clockwork.NewFakeClock() retentionDuration := time.Hour - rg := &fakeRevGetter{testutil.NewRecorderStream(), 0} - compactable := &fakeCompactable{testutil.NewRecorderStream()} + rg := &fakeRevGetter{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond), 0} + compactable := &fakeCompactable{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond)} tb := newPeriodic(zap.NewExample(), fc, retentionDuration, rg, compactable) tb.Run() diff --git a/etcdserver/api/v3compactor/revision_test.go b/etcdserver/api/v3compactor/revision_test.go index 80c714d06..f4085abca 100644 --- a/etcdserver/api/v3compactor/revision_test.go +++ b/etcdserver/api/v3compactor/revision_test.go @@ -28,8 +28,8 @@ import ( func TestRevision(t *testing.T) { fc := clockwork.NewFakeClock() - rg := &fakeRevGetter{testutil.NewRecorderStream(), 0} - compactable := &fakeCompactable{testutil.NewRecorderStream()} + rg := &fakeRevGetter{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond), 0} + compactable := &fakeCompactable{testutil.NewRecorderStreamWithWaitTimout(10 * time.Millisecond)} tb := newRevision(zap.NewExample(), fc, 10, rg, compactable) tb.Run() diff --git a/pkg/testutil/recorder.go b/pkg/testutil/recorder.go index 3722f9de1..41349fec5 100644 --- a/pkg/testutil/recorder.go +++ b/pkg/testutil/recorder.go @@ -82,11 +82,16 @@ func (r *RecorderBuffered) Chan() <-chan Action { // RecorderStream writes all Actions to an unbuffered channel type recorderStream struct { - ch chan Action + ch chan Action + waitTimeout time.Duration } func NewRecorderStream() Recorder { - return &recorderStream{ch: make(chan Action)} + return NewRecorderStreamWithWaitTimout(time.Duration(5 * time.Second)) +} + +func NewRecorderStreamWithWaitTimout(waitTimeout time.Duration) Recorder { + return &recorderStream{ch: make(chan Action), waitTimeout: waitTimeout} } func (r *recorderStream) Record(a Action) { @@ -110,7 +115,7 @@ func (r *recorderStream) Chan() <-chan Action { func (r *recorderStream) Wait(n int) ([]Action, error) { acts := make([]Action, n) - timeoutC := time.After(5 * time.Second) + timeoutC := time.After(r.waitTimeout) for i := 0; i < n; i++ { select { case acts[i] = <-r.ch: From 3f449a85482b7f232423e463b8a434a9314b6597 Mon Sep 17 00:00:00 2001 From: Piotr Tabor Date: Fri, 11 Sep 2020 19:07:19 +0200 Subject: [PATCH 2/2] *: 'go test --short ./...' runs all UNIT tests. Marked all 'integrational, e2e' as skipped in the --short mode. Thanks to this we will be able to significantly simplify ./test script. The run currently takes ~23s. With (follow up) move of ~clientv3/snapshot to integration tests (as part of modularization), we can expect this to fall to 5-10s. ``` % time go test --short ./... --count=1 ok go.etcd.io/etcd/v3 0.098s ? go.etcd.io/etcd/v3/Documentation/learning/lock/client [no test files] ? go.etcd.io/etcd/v3/Documentation/learning/lock/storage [no test files] ok go.etcd.io/etcd/v3/auth 0.724s ? go.etcd.io/etcd/v3/auth/authpb [no test files] ok go.etcd.io/etcd/v3/client 0.166s ok go.etcd.io/etcd/v3/client/integration 0.166s ok go.etcd.io/etcd/v3/clientv3 3.219s ok go.etcd.io/etcd/v3/clientv3/balancer 1.102s ? go.etcd.io/etcd/v3/clientv3/balancer/connectivity [no test files] ? go.etcd.io/etcd/v3/clientv3/balancer/picker [no test files] ? go.etcd.io/etcd/v3/clientv3/balancer/resolver/endpoint [no test files] ok go.etcd.io/etcd/v3/clientv3/clientv3util 0.096s [no tests to run] ok go.etcd.io/etcd/v3/clientv3/concurrency 3.323s ? go.etcd.io/etcd/v3/clientv3/credentials [no test files] ok go.etcd.io/etcd/v3/clientv3/integration 0.131s ? go.etcd.io/etcd/v3/clientv3/leasing [no test files] ? go.etcd.io/etcd/v3/clientv3/mirror [no test files] ok go.etcd.io/etcd/v3/clientv3/namespace 0.041s ok go.etcd.io/etcd/v3/clientv3/naming 0.115s ok go.etcd.io/etcd/v3/clientv3/ordering 0.121s ok go.etcd.io/etcd/v3/clientv3/snapshot 19.325s ok go.etcd.io/etcd/v3/clientv3/yaml 0.090s ok go.etcd.io/etcd/v3/contrib/raftexample 7.572s ? go.etcd.io/etcd/v3/contrib/recipes [no test files] ok go.etcd.io/etcd/v3/embed 0.282s ok go.etcd.io/etcd/v3/etcdctl 0.054s ? go.etcd.io/etcd/v3/etcdctl/ctlv2 [no test files] ok go.etcd.io/etcd/v3/etcdctl/ctlv2/command 0.117s ? go.etcd.io/etcd/v3/etcdctl/ctlv3 [no test files] ok go.etcd.io/etcd/v3/etcdctl/ctlv3/command 0.070s ok go.etcd.io/etcd/v3/etcdmain 0.172s ok go.etcd.io/etcd/v3/etcdserver 1.698s ? go.etcd.io/etcd/v3/etcdserver/api [no test files] ok go.etcd.io/etcd/v3/etcdserver/api/etcdhttp 0.075s ok go.etcd.io/etcd/v3/etcdserver/api/membership 0.104s ? go.etcd.io/etcd/v3/etcdserver/api/membership/membershippb [no test files] ok go.etcd.io/etcd/v3/etcdserver/api/rafthttp 0.181s ok go.etcd.io/etcd/v3/etcdserver/api/snap 0.078s ? go.etcd.io/etcd/v3/etcdserver/api/snap/snappb [no test files] ok go.etcd.io/etcd/v3/etcdserver/api/v2auth 0.142s ok go.etcd.io/etcd/v3/etcdserver/api/v2discovery 0.035s ok go.etcd.io/etcd/v3/etcdserver/api/v2error 0.043s ok go.etcd.io/etcd/v3/etcdserver/api/v2http 0.070s ok go.etcd.io/etcd/v3/etcdserver/api/v2http/httptypes 0.031s ? go.etcd.io/etcd/v3/etcdserver/api/v2stats [no test files] ok go.etcd.io/etcd/v3/etcdserver/api/v2store 0.645s ok go.etcd.io/etcd/v3/etcdserver/api/v2v3 0.218s ? go.etcd.io/etcd/v3/etcdserver/api/v3alarm [no test files] ? go.etcd.io/etcd/v3/etcdserver/api/v3client [no test files] ok go.etcd.io/etcd/v3/etcdserver/api/v3compactor 1.765s ? go.etcd.io/etcd/v3/etcdserver/api/v3election [no test files] ? go.etcd.io/etcd/v3/etcdserver/api/v3election/v3electionpb [no test files] ? go.etcd.io/etcd/v3/etcdserver/api/v3election/v3electionpb/gw [no test files] ? go.etcd.io/etcd/v3/etcdserver/api/v3lock [no test files] ? go.etcd.io/etcd/v3/etcdserver/api/v3lock/v3lockpb [no test files] ? go.etcd.io/etcd/v3/etcdserver/api/v3lock/v3lockpb/gw [no test files] ok go.etcd.io/etcd/v3/etcdserver/api/v3rpc 0.091s ok go.etcd.io/etcd/v3/etcdserver/api/v3rpc/rpctypes 0.012s ok go.etcd.io/etcd/v3/etcdserver/cindex 0.054s ok go.etcd.io/etcd/v3/etcdserver/etcdserverpb 0.039s ? go.etcd.io/etcd/v3/etcdserver/etcdserverpb/gw [no test files] ok go.etcd.io/etcd/v3/functional/agent 0.094s ? go.etcd.io/etcd/v3/functional/cmd/etcd-agent [no test files] ? go.etcd.io/etcd/v3/functional/cmd/etcd-proxy [no test files] ? go.etcd.io/etcd/v3/functional/cmd/etcd-runner [no test files] ? go.etcd.io/etcd/v3/functional/cmd/etcd-tester [no test files] ok go.etcd.io/etcd/v3/functional/rpcpb 0.060s ? go.etcd.io/etcd/v3/functional/runner [no test files] ok go.etcd.io/etcd/v3/functional/tester 0.079s ok go.etcd.io/etcd/v3/integration 0.684s ok go.etcd.io/etcd/v3/integration/embed 0.101s ok go.etcd.io/etcd/v3/lease 3.455s ok go.etcd.io/etcd/v3/lease/leasehttp 2.185s ? go.etcd.io/etcd/v3/lease/leasepb [no test files] ok go.etcd.io/etcd/v3/mvcc 7.246s ok go.etcd.io/etcd/v3/mvcc/backend 0.354s ? go.etcd.io/etcd/v3/mvcc/mvccpb [no test files] ok go.etcd.io/etcd/v3/pkg/adt 0.025s ? go.etcd.io/etcd/v3/pkg/contention [no test files] ? go.etcd.io/etcd/v3/pkg/cpuutil [no test files] ok go.etcd.io/etcd/v3/pkg/crc 0.008s ? go.etcd.io/etcd/v3/pkg/debugutil [no test files] ok go.etcd.io/etcd/v3/pkg/expect 0.015s ok go.etcd.io/etcd/v3/pkg/fileutil 0.268s ok go.etcd.io/etcd/v3/pkg/flags 0.021s ok go.etcd.io/etcd/v3/pkg/httputil 0.020s ok go.etcd.io/etcd/v3/pkg/idutil 0.008s ok go.etcd.io/etcd/v3/pkg/ioutil 0.025s ok go.etcd.io/etcd/v3/pkg/logutil 0.047s ? go.etcd.io/etcd/v3/pkg/mock/mockserver [no test files] ? go.etcd.io/etcd/v3/pkg/mock/mockstorage [no test files] ? go.etcd.io/etcd/v3/pkg/mock/mockstore [no test files] ? go.etcd.io/etcd/v3/pkg/mock/mockwait [no test files] ok go.etcd.io/etcd/v3/pkg/netutil 1.024s ok go.etcd.io/etcd/v3/pkg/osutil 0.021s ok go.etcd.io/etcd/v3/pkg/pathutil 0.008s ok go.etcd.io/etcd/v3/pkg/pbutil 0.008s ok go.etcd.io/etcd/v3/pkg/proxy 4.081s ok go.etcd.io/etcd/v3/pkg/report 0.008s ? go.etcd.io/etcd/v3/pkg/runtime [no test files] ok go.etcd.io/etcd/v3/pkg/schedule 0.009s ok go.etcd.io/etcd/v3/pkg/srv 0.019s ok go.etcd.io/etcd/v3/pkg/stringutil 0.008s ? go.etcd.io/etcd/v3/pkg/systemd [no test files] ok go.etcd.io/etcd/v3/pkg/testutil 0.023s ok go.etcd.io/etcd/v3/pkg/tlsutil 3.965s ok go.etcd.io/etcd/v3/pkg/traceutil 0.034s ok go.etcd.io/etcd/v3/pkg/transport 0.532s ok go.etcd.io/etcd/v3/pkg/types 0.028s ok go.etcd.io/etcd/v3/pkg/wait 0.023s ok go.etcd.io/etcd/v3/proxy/grpcproxy 0.101s ? go.etcd.io/etcd/v3/proxy/grpcproxy/adapter [no test files] ? go.etcd.io/etcd/v3/proxy/grpcproxy/cache [no test files] ok go.etcd.io/etcd/v3/proxy/httpproxy 0.044s ok go.etcd.io/etcd/v3/proxy/tcpproxy 0.047s ok go.etcd.io/etcd/v3/raft 0.312s ok go.etcd.io/etcd/v3/raft/confchange 0.183s ok go.etcd.io/etcd/v3/raft/quorum 0.316s ok go.etcd.io/etcd/v3/raft/raftpb 0.024s ok go.etcd.io/etcd/v3/raft/rafttest 0.640s ok go.etcd.io/etcd/v3/raft/tracker 0.026s ok go.etcd.io/etcd/v3/tests/e2e 0.077s ? go.etcd.io/etcd/v3/tools/benchmark [no test files] ? go.etcd.io/etcd/v3/tools/benchmark/cmd [no test files] ? go.etcd.io/etcd/v3/tools/etcd-dump-db [no test files] ok go.etcd.io/etcd/v3/tools/etcd-dump-logs 0.088s ? go.etcd.io/etcd/v3/tools/etcd-dump-metrics [no test files] ? go.etcd.io/etcd/v3/tools/local-tester/bridge [no test files] ? go.etcd.io/etcd/v3/version [no test files] ok go.etcd.io/etcd/v3/wal 1.517s ? go.etcd.io/etcd/v3/wal/walpb [no test files] go test --short ./... --count=1 76.12s user 12.57s system 375% cpu 23.635 total ``` --- clientv3/integration/mirror_test.go | 4 ++-- clientv3/snapshot/v3_snapshot_test.go | 2 ++ integration/cluster.go | 7 +++++++ integration/embed/embed_test.go | 5 +++++ pkg/testutil/leak_test.go | 1 + pkg/testutil/testutil.go | 9 +++++++++ raft/rafttest/interaction_env.go | 2 +- tests/e2e/cluster_test.go | 5 ++++- tests/e2e/ctl_v2_test.go | 4 +++- tests/e2e/ctl_v3_make_mirror_test.go | 2 +- tests/e2e/ctl_v3_snapshot_test.go | 2 +- tests/e2e/ctl_v3_test.go | 6 ++++-- tests/e2e/etcd_config_test.go | 12 ++++++++++++ tests/e2e/etcd_release_upgrade_test.go | 4 ++-- tests/e2e/gateway_test.go | 2 +- tests/e2e/util.go | 6 ++++++ tests/e2e/v2_curl_test.go | 2 +- 17 files changed, 62 insertions(+), 13 deletions(-) diff --git a/clientv3/integration/mirror_test.go b/clientv3/integration/mirror_test.go index 2d62d7717..48756ef2c 100644 --- a/clientv3/integration/mirror_test.go +++ b/clientv3/integration/mirror_test.go @@ -73,8 +73,8 @@ func TestMirrorSync(t *testing.T) { } func TestMirrorSyncBase(t *testing.T) { - cluster := integration.NewClusterV3(nil, &integration.ClusterConfig{Size: 1}) - defer cluster.Terminate(nil) + cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) + defer cluster.Terminate(t) cli := cluster.Client(0) ctx := context.TODO() diff --git a/clientv3/snapshot/v3_snapshot_test.go b/clientv3/snapshot/v3_snapshot_test.go index d001d7eb1..8ffc10ea1 100644 --- a/clientv3/snapshot/v3_snapshot_test.go +++ b/clientv3/snapshot/v3_snapshot_test.go @@ -33,6 +33,8 @@ import ( "go.uber.org/zap" ) +// TODO(ptabor): This is integration test. Skip it in --short and move to integration tests directory. + // TestSnapshotV3RestoreSingle tests single node cluster restoring // from a snapshot file. func TestSnapshotV3RestoreSingle(t *testing.T) { diff --git a/integration/cluster.go b/integration/cluster.go index da198c38b..44bbe8ba8 100644 --- a/integration/cluster.go +++ b/integration/cluster.go @@ -193,6 +193,8 @@ func (c *cluster) fillClusterForMembers() error { } func newCluster(t testing.TB, cfg *ClusterConfig) *cluster { + testutil.SkipTestIfShortMode(t, "Cannot start etcd cluster in --short tests") + c := &cluster{cfg: cfg} ms := make([]*member, cfg.Size) for i := 0; i < cfg.Size; i++ { @@ -209,6 +211,7 @@ func newCluster(t testing.TB, cfg *ClusterConfig) *cluster { // NewCluster returns an unlaunched cluster of the given size which has been // set to use static bootstrap. func NewCluster(t testing.TB, size int) *cluster { + t.Helper() return newCluster(t, &ClusterConfig{Size: size}) } @@ -1245,6 +1248,10 @@ type ClusterV3 struct { // NewClusterV3 returns a launched cluster with a grpc client connection // for each cluster member. func NewClusterV3(t testing.TB, cfg *ClusterConfig) *ClusterV3 { + if t != nil { + t.Helper() + } + cfg.UseGRPC = true if os.Getenv("CLIENT_DEBUG") != "" { clientv3.SetLogger(grpclog.NewLoggerV2WithVerbosity(os.Stderr, os.Stderr, os.Stderr, 4)) diff --git a/integration/embed/embed_test.go b/integration/embed/embed_test.go index 4791e29f9..665182d56 100644 --- a/integration/embed/embed_test.go +++ b/integration/embed/embed_test.go @@ -31,6 +31,7 @@ import ( "go.etcd.io/etcd/v3/clientv3" "go.etcd.io/etcd/v3/embed" + "go.etcd.io/etcd/v3/pkg/testutil" "go.etcd.io/etcd/v3/pkg/transport" ) @@ -44,6 +45,8 @@ var ( ) func TestEmbedEtcd(t *testing.T) { + testutil.SkipTestIfShortMode(t, "Cannot start embedded cluster in --short tests") + tests := []struct { cfg embed.Config @@ -128,6 +131,8 @@ func TestEmbedEtcdGracefulStopInsecure(t *testing.T) { testEmbedEtcdGracefulStop // testEmbedEtcdGracefulStop ensures embedded server stops // cutting existing transports. func testEmbedEtcdGracefulStop(t *testing.T, secure bool) { + testutil.SkipTestIfShortMode(t, "Cannot start embedded cluster in --short tests") + cfg := embed.NewConfig() if secure { cfg.ClientTLSInfo = testTLSInfo diff --git a/pkg/testutil/leak_test.go b/pkg/testutil/leak_test.go index c6f34efcf..fa70782f3 100644 --- a/pkg/testutil/leak_test.go +++ b/pkg/testutil/leak_test.go @@ -34,6 +34,7 @@ func TestMain(m *testing.M) { } func TestSample(t *testing.T) { + SkipTestIfShortMode(t, "Counting leaked routines is disabled in --short tests") defer AfterTest(t) ranSample = true for range make([]struct{}, 100) { diff --git a/pkg/testutil/testutil.go b/pkg/testutil/testutil.go index 0e02ddc0d..db51304e7 100644 --- a/pkg/testutil/testutil.go +++ b/pkg/testutil/testutil.go @@ -82,3 +82,12 @@ func Poll(interval time.Duration, timeout time.Duration, condition ConditionFunc } } } + +func SkipTestIfShortMode(t testing.TB, reason string) { + if t != nil { + t.Helper() + if testing.Short() { + t.Skip(reason) + } + } +} diff --git a/raft/rafttest/interaction_env.go b/raft/rafttest/interaction_env.go index a88d60fa9..4764ba379 100644 --- a/raft/rafttest/interaction_env.go +++ b/raft/rafttest/interaction_env.go @@ -28,7 +28,7 @@ type InteractionOpts struct { OnConfig func(*raft.Config) } -// A Node is a member of a raft group tested via an InteractionEnv. +// Node is a member of a raft group tested via an InteractionEnv. type Node struct { *raft.RawNode Storage diff --git a/tests/e2e/cluster_test.go b/tests/e2e/cluster_test.go index d7ae14915..6fd7525e3 100644 --- a/tests/e2e/cluster_test.go +++ b/tests/e2e/cluster_test.go @@ -20,6 +20,7 @@ import ( "net/url" "os" "strings" + "testing" "time" "go.etcd.io/etcd/v3/etcdserver" @@ -141,7 +142,9 @@ type etcdProcessClusterConfig struct { // newEtcdProcessCluster launches a new cluster from etcd processes, returning // a new etcdProcessCluster once all nodes are ready to accept client requests. -func newEtcdProcessCluster(cfg *etcdProcessClusterConfig) (*etcdProcessCluster, error) { +func newEtcdProcessCluster(t testing.TB, cfg *etcdProcessClusterConfig) (*etcdProcessCluster, error) { + skipInShortMode(t) + etcdCfgs := cfg.etcdServerProcessConfigs() epc := &etcdProcessCluster{ cfg: cfg, diff --git a/tests/e2e/ctl_v2_test.go b/tests/e2e/ctl_v2_test.go index 4f4409ef6..b2a3ebf22 100644 --- a/tests/e2e/ctl_v2_test.go +++ b/tests/e2e/ctl_v2_test.go @@ -498,10 +498,12 @@ func etcdctlBackup(clus *etcdProcessCluster, dataDir, backupDir string, v3 bool) } func setupEtcdctlTest(t *testing.T, cfg *etcdProcessClusterConfig, quorum bool) *etcdProcessCluster { + skipInShortMode(t) + if !quorum { cfg = configStandalone(*cfg) } - epc, err := newEtcdProcessCluster(cfg) + epc, err := newEtcdProcessCluster(t, cfg) if err != nil { t.Fatalf("could not start etcd process cluster (%v)", err) } diff --git a/tests/e2e/ctl_v3_make_mirror_test.go b/tests/e2e/ctl_v3_make_mirror_test.go index ef1cf24c5..0dcc25b36 100644 --- a/tests/e2e/ctl_v3_make_mirror_test.go +++ b/tests/e2e/ctl_v3_make_mirror_test.go @@ -68,7 +68,7 @@ func testMirrorCommand(cx ctlCtx, flags []string, sourcekvs []kv, destkvs []kvEx dialTimeout: 7 * time.Second, } - mirrorepc, err := newEtcdProcessCluster(&mirrorctx.cfg) + mirrorepc, err := newEtcdProcessCluster(cx.t, &mirrorctx.cfg) if err != nil { cx.t.Fatalf("could not start etcd process cluster (%v)", err) } diff --git a/tests/e2e/ctl_v3_snapshot_test.go b/tests/e2e/ctl_v3_snapshot_test.go index 68347fb6a..93a52c243 100644 --- a/tests/e2e/ctl_v3_snapshot_test.go +++ b/tests/e2e/ctl_v3_snapshot_test.go @@ -158,7 +158,7 @@ func TestIssue6361(t *testing.T) { os.Setenv("ETCDCTL_API", "3") defer os.Unsetenv("ETCDCTL_API") - epc, err := newEtcdProcessCluster(&etcdProcessClusterConfig{ + epc, err := newEtcdProcessCluster(t, &etcdProcessClusterConfig{ clusterSize: 1, initialToken: "new", keepDataDir: true, diff --git a/tests/e2e/ctl_v3_test.go b/tests/e2e/ctl_v3_test.go index e97ef7163..fdcb6d234 100644 --- a/tests/e2e/ctl_v3_test.go +++ b/tests/e2e/ctl_v3_test.go @@ -30,6 +30,8 @@ import ( func TestCtlV3Version(t *testing.T) { testCtl(t, versionTest) } func TestClusterVersion(t *testing.T) { + skipInShortMode(t) + tests := []struct { name string rollingStart bool @@ -57,7 +59,7 @@ func TestClusterVersion(t *testing.T) { cfg.baseScheme = "unix" // to avoid port conflict cfg.rollingStart = tt.rollingStart - epc, err := newEtcdProcessCluster(&cfg) + epc, err := newEtcdProcessCluster(t, &cfg) if err != nil { t.Fatalf("could not start etcd process cluster (%v)", err) } @@ -216,7 +218,7 @@ func testCtl(t *testing.T, testFunc func(ctlCtx), opts ...ctlOption) { ret.cfg.initialCorruptCheck = ret.initialCorruptCheck } - epc, err := newEtcdProcessCluster(&ret.cfg) + epc, err := newEtcdProcessCluster(t, &ret.cfg) if err != nil { t.Fatalf("could not start etcd process cluster (%v)", err) } diff --git a/tests/e2e/etcd_config_test.go b/tests/e2e/etcd_config_test.go index 9e6b478c4..f0389f404 100644 --- a/tests/e2e/etcd_config_test.go +++ b/tests/e2e/etcd_config_test.go @@ -27,6 +27,8 @@ import ( const exampleConfigFile = "../../etcd.conf.yml.sample" func TestEtcdExampleConfig(t *testing.T) { + skipInShortMode(t) + proc, err := spawnCmd([]string{binDir + "/etcd", "--config-file", exampleConfigFile}) if err != nil { t.Fatal(err) @@ -40,6 +42,8 @@ func TestEtcdExampleConfig(t *testing.T) { } func TestEtcdMultiPeer(t *testing.T) { + skipInShortMode(t) + peers, tmpdirs := make([]string, 3), make([]string, 3) for i := range peers { peers[i] = fmt.Sprintf("e%d=http://127.0.0.1:%d", i, etcdProcessBasePort+i) @@ -87,6 +91,8 @@ func TestEtcdMultiPeer(t *testing.T) { // TestEtcdUnixPeers checks that etcd will boot with unix socket peers. func TestEtcdUnixPeers(t *testing.T) { + skipInShortMode(t) + d, err := ioutil.TempDir("", "e1.etcd") if err != nil { t.Fatal(err) @@ -116,6 +122,8 @@ func TestEtcdUnixPeers(t *testing.T) { // TestEtcdPeerCNAuth checks that the inter peer auth based on CN of cert is working correctly. func TestEtcdPeerCNAuth(t *testing.T) { + skipInShortMode(t) + peers, tmpdirs := make([]string, 3), make([]string, 3) for i := range peers { peers[i] = fmt.Sprintf("e%d=https://127.0.0.1:%d", i, etcdProcessBasePort+i) @@ -193,6 +201,8 @@ func TestEtcdPeerCNAuth(t *testing.T) { // TestEtcdPeerNameAuth checks that the inter peer auth based on cert name validation is working correctly. func TestEtcdPeerNameAuth(t *testing.T) { + skipInShortMode(t) + peers, tmpdirs := make([]string, 3), make([]string, 3) for i := range peers { peers[i] = fmt.Sprintf("e%d=https://127.0.0.1:%d", i, etcdProcessBasePort+i) @@ -269,6 +279,8 @@ func TestEtcdPeerNameAuth(t *testing.T) { } func TestGrpcproxyAndCommonName(t *testing.T) { + skipInShortMode(t) + argsWithNonEmptyCN := []string{ binDir + "/etcd", "grpc-proxy", diff --git a/tests/e2e/etcd_release_upgrade_test.go b/tests/e2e/etcd_release_upgrade_test.go index 0ae2e40b9..53ecde18e 100644 --- a/tests/e2e/etcd_release_upgrade_test.go +++ b/tests/e2e/etcd_release_upgrade_test.go @@ -41,7 +41,7 @@ func TestReleaseUpgrade(t *testing.T) { copiedCfg.snapshotCount = 3 copiedCfg.baseScheme = "unix" // to avoid port conflict - epc, err := newEtcdProcessCluster(&copiedCfg) + epc, err := newEtcdProcessCluster(t, &copiedCfg) if err != nil { t.Fatalf("could not start etcd process cluster (%v)", err) } @@ -132,7 +132,7 @@ func TestReleaseUpgradeWithRestart(t *testing.T) { copiedCfg.snapshotCount = 10 copiedCfg.baseScheme = "unix" - epc, err := newEtcdProcessCluster(&copiedCfg) + epc, err := newEtcdProcessCluster(t, &copiedCfg) if err != nil { t.Fatalf("could not start etcd process cluster (%v)", err) } diff --git a/tests/e2e/gateway_test.go b/tests/e2e/gateway_test.go index fb0857a28..809c3e37d 100644 --- a/tests/e2e/gateway_test.go +++ b/tests/e2e/gateway_test.go @@ -27,7 +27,7 @@ var ( ) func TestGateway(t *testing.T) { - ec, err := newEtcdProcessCluster(&configNoTLS) + ec, err := newEtcdProcessCluster(t, &configNoTLS) if err != nil { t.Fatal(err) } diff --git a/tests/e2e/util.go b/tests/e2e/util.go index 64b2fbc57..a4d7fe2de 100644 --- a/tests/e2e/util.go +++ b/tests/e2e/util.go @@ -19,9 +19,11 @@ import ( "fmt" "math/rand" "strings" + "testing" "time" "go.etcd.io/etcd/v3/pkg/expect" + "go.etcd.io/etcd/v3/pkg/testutil" ) func waitReadyExpectProc(exproc *expect.ExpectProcess, readyStrs []string) error { @@ -109,3 +111,7 @@ func closeWithTimeout(p *expect.ExpectProcess, d time.Duration) error { func toTLS(s string) string { return strings.Replace(s, "http://", "https://", 1) } + +func skipInShortMode(t testing.TB) { + testutil.SkipTestIfShortMode(t, "e2e tests are not running in --short mode") +} diff --git a/tests/e2e/v2_curl_test.go b/tests/e2e/v2_curl_test.go index 7cfcbebd6..dc94365b3 100644 --- a/tests/e2e/v2_curl_test.go +++ b/tests/e2e/v2_curl_test.go @@ -38,7 +38,7 @@ func testCurlPutGet(t *testing.T, cfg *etcdProcessClusterConfig) { cfg = configStandalone(*cfg) cfg.enableV2 = true - epc, err := newEtcdProcessCluster(cfg) + epc, err := newEtcdProcessCluster(t, cfg) if err != nil { t.Fatalf("could not start etcd process cluster (%v)", err) }