diff --git a/client/internal/v2/main_test.go b/client/internal/v2/main_test.go index 2a0195aad..d40d87357 100644 --- a/client/internal/v2/main_test.go +++ b/client/internal/v2/main_test.go @@ -15,23 +15,11 @@ package client_test import ( - "net/http" "testing" "go.etcd.io/etcd/client/pkg/v3/testutil" ) -func exampleEndpoints() []string { return nil } -func exampleTransport() *http.Transport { return nil } - -func forUnitTestsRunInMockedContext(mocking func(), example func()) { - mocking() - // TODO: Call 'example' when mocking() provides realistic mocking of transport. - - // The real testing logic of examples gets executed - // as part of ./tests/integration/client/example/... -} - func TestMain(m *testing.M) { testutil.MustTestMainWithLeakDetection(m) } diff --git a/client/pkg/testutil/assert.go b/client/pkg/testutil/assert.go index b96848e1f..88e674b8d 100644 --- a/client/pkg/testutil/assert.go +++ b/client/pkg/testutil/assert.go @@ -15,7 +15,6 @@ package testutil import ( - "reflect" "testing" "github.com/stretchr/testify/assert" @@ -52,11 +51,3 @@ func AssertFalse(t *testing.T, v bool, msg ...string) { newMsg := copyToInterface(msg...) assert.Equal(t, false, v, newMsg) } - -func isNil(v any) bool { - if v == nil { - return true - } - rv := reflect.ValueOf(v) - return rv.Kind() != reflect.Struct && rv.IsNil() -} diff --git a/client/v3/ordering/kv_test.go b/client/v3/ordering/kv_test.go index 2168c3157..cb6d0d390 100644 --- a/client/v3/ordering/kv_test.go +++ b/client/v3/ordering/kv_test.go @@ -16,7 +16,6 @@ package ordering import ( "context" - gContext "context" "sync" "testing" @@ -29,7 +28,7 @@ type mockKV struct { response clientv3.OpResponse } -func (kv *mockKV) Do(ctx gContext.Context, op clientv3.Op) (clientv3.OpResponse, error) { +func (kv *mockKV) Do(ctx context.Context, op clientv3.Op) (clientv3.OpResponse, error) { return kv.response, nil } diff --git a/server/auth/store.go b/server/auth/store.go index ba93e4b7d..4908c32b7 100644 --- a/server/auth/store.go +++ b/server/auth/store.go @@ -37,9 +37,6 @@ import ( ) var ( - authEnabled = []byte{1} - authDisabled = []byte{0} - rootPerm = authpb.Permission{PermType: authpb.READWRITE, Key: []byte{}, RangeEnd: []byte{0}} ErrRootUserNotExist = errors.New("auth: root user does not exist") diff --git a/server/embed/config.go b/server/embed/config.go index 62ff9d1bf..ca068ab00 100644 --- a/server/embed/config.go +++ b/server/embed/config.go @@ -1116,14 +1116,6 @@ func (cfg *Config) getListenClientUrls() (ss []string) { return ss } -func (cfg *Config) getListenClientHttpUrls() (ss []string) { - ss = make([]string, len(cfg.ListenClientHttpUrls)) - for i := range cfg.ListenClientHttpUrls { - ss[i] = cfg.ListenClientHttpUrls[i].String() - } - return ss -} - func (cfg *Config) getMetricsURLs() (ss []string) { ss = make([]string, len(cfg.ListenMetricsUrls)) for i := range cfg.ListenMetricsUrls { diff --git a/server/etcdserver/api/etcdhttp/health.go b/server/etcdserver/api/etcdhttp/health.go index 95950de89..4d6698786 100644 --- a/server/etcdserver/api/etcdhttp/health.go +++ b/server/etcdserver/api/etcdhttp/health.go @@ -23,7 +23,6 @@ import ( "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" - "go.etcd.io/etcd/api/v3/etcdserverpb" pb "go.etcd.io/etcd/api/v3/etcdserverpb" "go.etcd.io/etcd/client/pkg/v3/types" "go.etcd.io/etcd/server/v3/auth" @@ -154,9 +153,9 @@ func checkAlarms(lg *zap.Logger, srv ServerHealth, excludedAlarms AlarmSet) Heal h.Health = "false" switch v.Alarm { - case etcdserverpb.AlarmType_NOSPACE: + case pb.AlarmType_NOSPACE: h.Reason = "ALARM NOSPACE" - case etcdserverpb.AlarmType_CORRUPT: + case pb.AlarmType_CORRUPT: h.Reason = "ALARM CORRUPT" default: h.Reason = "ALARM UNKNOWN" @@ -183,7 +182,7 @@ func checkAPI(lg *zap.Logger, srv ServerHealth, serializable bool) Health { h := Health{Health: "true"} cfg := srv.Config() ctx, cancel := context.WithTimeout(context.Background(), cfg.ReqTimeout()) - _, err := srv.Range(ctx, &etcdserverpb.RangeRequest{KeysOnly: true, Limit: 1, Serializable: serializable}) + _, err := srv.Range(ctx, &pb.RangeRequest{KeysOnly: true, Limit: 1, Serializable: serializable}) cancel() if err != nil && err != auth.ErrUserEmpty && err != auth.ErrPermissionDenied { h.Health = "false" diff --git a/server/etcdserver/api/etcdhttp/health_test.go b/server/etcdserver/api/etcdhttp/health_test.go index 29172b5ee..e3f19c161 100644 --- a/server/etcdserver/api/etcdhttp/health_test.go +++ b/server/etcdserver/api/etcdhttp/health_test.go @@ -34,12 +34,6 @@ import ( "go.etcd.io/raft/v3" ) -type fakeStats struct{} - -func (s *fakeStats) SelfStats() []byte { return nil } -func (s *fakeStats) LeaderStats() []byte { return nil } -func (s *fakeStats) StoreStats() []byte { return nil } - type fakeHealthServer struct { fakeServer health string diff --git a/server/etcdserver/version/monitor_test.go b/server/etcdserver/version/monitor_test.go index b4d147f35..917d82d08 100644 --- a/server/etcdserver/version/monitor_test.go +++ b/server/etcdserver/version/monitor_test.go @@ -410,7 +410,6 @@ type storageMock struct { clusterVersion *semver.Version storageVersion *semver.Version downgradeInfo *DowngradeInfo - locked bool } var _ Server = (*storageMock)(nil) diff --git a/server/storage/schema/migration.go b/server/storage/schema/migration.go index e62acc92c..a34fa2f67 100644 --- a/server/storage/schema/migration.go +++ b/server/storage/schema/migration.go @@ -90,13 +90,6 @@ func newMigrationStep(v semver.Version, isUpgrade bool, changes []schemaChange) return step } -// execute runs actions required to migrate etcd storage between two minor versions. -func (s migrationStep) execute(lg *zap.Logger, tx backend.BatchTx) error { - tx.LockOutsideApply() - defer tx.Unlock() - return s.unsafeExecute(lg, tx) -} - // unsafeExecute is non thread-safe version of execute. func (s migrationStep) unsafeExecute(lg *zap.Logger, tx backend.UnsafeReadWriter) error { err := s.actions.unsafeExecute(lg, tx) diff --git a/tests/e2e/ctl_v3_defrag_test.go b/tests/e2e/ctl_v3_defrag_test.go index ca1d23540..479ba1a28 100644 --- a/tests/e2e/ctl_v3_defrag_test.go +++ b/tests/e2e/ctl_v3_defrag_test.go @@ -34,15 +34,6 @@ func maintenanceInitKeys(cx ctlCtx) { } } -func ctlV3OnlineDefrag(cx ctlCtx) error { - cmdArgs := append(cx.PrefixArgs(), "defrag") - lines := make([]expect.ExpectedResponse, cx.epc.Cfg.ClusterSize) - for i := range lines { - lines[i] = expect.ExpectedResponse{Value: "Finished defragmenting etcd member"} - } - return e2e.SpawnWithExpects(cmdArgs, cx.envMap, lines...) -} - func ctlV3OfflineDefrag(cx ctlCtx) error { cmdArgs := append(cx.PrefixArgsUtl(), "defrag", "--data-dir", cx.dataDir) lines := []expect.ExpectedResponse{{Value: "finished defragmenting directory"}} diff --git a/tests/e2e/ctl_v3_lease_test.go b/tests/e2e/ctl_v3_lease_test.go index 43a66bf2f..e55679874 100644 --- a/tests/e2e/ctl_v3_lease_test.go +++ b/tests/e2e/ctl_v3_lease_test.go @@ -96,11 +96,3 @@ func ctlV3LeaseRevoke(cx ctlCtx, leaseID string) error { cmdArgs := append(cx.PrefixArgs(), "lease", "revoke", leaseID) return e2e.SpawnWithExpectWithEnv(cmdArgs, cx.envMap, expect.ExpectedResponse{Value: fmt.Sprintf("lease %s revoked", leaseID)}) } - -func ctlV3LeaseTimeToLive(cx ctlCtx, leaseID string, withKeys bool) error { - cmdArgs := append(cx.PrefixArgs(), "lease", "timetolive", leaseID) - if withKeys { - cmdArgs = append(cmdArgs, "--keys") - } - return e2e.SpawnWithExpectWithEnv(cmdArgs, cx.envMap, expect.ExpectedResponse{Value: fmt.Sprintf("lease %s granted with", leaseID)}) -} diff --git a/tests/e2e/ctl_v3_member_test.go b/tests/e2e/ctl_v3_member_test.go index 7e42446b3..ccdc01bdf 100644 --- a/tests/e2e/ctl_v3_member_test.go +++ b/tests/e2e/ctl_v3_member_test.go @@ -162,11 +162,6 @@ func memberListWithHexTest(cx ctlCtx) { } } -func ctlV3MemberRemove(cx ctlCtx, ep, memberID, clusterID string) error { - cmdArgs := append(cx.prefixArgs([]string{ep}), "member", "remove", memberID) - return e2e.SpawnWithExpectWithEnv(cmdArgs, cx.envMap, expect.ExpectedResponse{Value: fmt.Sprintf("%s removed from cluster %s", memberID, clusterID)}) -} - func memberAddTest(cx ctlCtx) { peerURL := fmt.Sprintf("http://localhost:%d", e2e.EtcdProcessBasePort+11) if err := ctlV3MemberAdd(cx, peerURL, false); err != nil { diff --git a/tests/e2e/ctl_v3_test.go b/tests/e2e/ctl_v3_test.go index ea8085bba..f365aff16 100644 --- a/tests/e2e/ctl_v3_test.go +++ b/tests/e2e/ctl_v3_test.go @@ -182,10 +182,6 @@ func withCorruptFunc(f func(string) error) ctlOption { return func(cx *ctlCtx) { cx.corruptFunc = f } } -func withDisableStrictReconfig() ctlOption { - return func(cx *ctlCtx) { cx.disableStrictReconfigCheck = true } -} - func withFlagByEnv() ctlOption { return func(cx *ctlCtx) { cx.envMap = make(map[string]string) } } @@ -345,24 +341,3 @@ func (cx *ctlCtx) PrefixArgsUtl() []string { func isGRPCTimedout(err error) bool { return strings.Contains(err.Error(), "grpc: timed out trying to connect") } - -func (cx *ctlCtx) memberToRemove() (ep string, memberID string, clusterID string) { - n1 := cx.cfg.ClusterSize - if n1 < 2 { - cx.t.Fatalf("%d-node is too small to test 'member remove'", n1) - } - - resp, err := getMemberList(*cx, false) - if err != nil { - cx.t.Fatal(err) - } - if n1 != len(resp.Members) { - cx.t.Fatalf("expected %d, got %d", n1, len(resp.Members)) - } - - ep = resp.Members[0].ClientURLs[0] - clusterID = fmt.Sprintf("%x", resp.Header.ClusterId) - memberID = fmt.Sprintf("%x", resp.Members[1].ID) - - return ep, memberID, clusterID -} diff --git a/tests/e2e/ctl_v3_txn_test.go b/tests/e2e/ctl_v3_txn_test.go deleted file mode 100644 index bc05cb055..000000000 --- a/tests/e2e/ctl_v3_txn_test.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2016 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package e2e - -import ( - "go.etcd.io/etcd/tests/v3/framework/e2e" -) - -type txnRequests struct { - compare []string - ifSuccess []string - ifFail []string - results []string -} - -func ctlV3Txn(cx ctlCtx, rqs txnRequests, expectedExitErr bool) error { - // TODO: support non-interactive mode - cmdArgs := append(cx.PrefixArgs(), "txn") - if cx.interactive { - cmdArgs = append(cmdArgs, "--interactive") - } - proc, err := e2e.SpawnCmd(cmdArgs, cx.envMap) - if err != nil { - return err - } - _, err = proc.Expect("compares:") - if err != nil { - return err - } - for _, req := range rqs.compare { - if err = proc.Send(req + "\r"); err != nil { - return err - } - } - if err = proc.Send("\r"); err != nil { - return err - } - - _, err = proc.Expect("success requests (get, put, del):") - if err != nil { - return err - } - for _, req := range rqs.ifSuccess { - if err = proc.Send(req + "\r"); err != nil { - return err - } - } - if err = proc.Send("\r"); err != nil { - return err - } - - _, err = proc.Expect("failure requests (get, put, del):") - if err != nil { - return err - } - for _, req := range rqs.ifFail { - if err = proc.Send(req + "\r"); err != nil { - return err - } - } - if err = proc.Send("\r"); err != nil { - return err - } - - for _, line := range rqs.results { - _, err = proc.Expect(line) - if err != nil { - return err - } - } - - err = proc.Close() - if expectedExitErr { - return nil - } - - return err -} diff --git a/tests/e2e/v3_curl_kv_test.go b/tests/e2e/v3_curl_kv_test.go index 147fe0283..e0a3c2f54 100644 --- a/tests/e2e/v3_curl_kv_test.go +++ b/tests/e2e/v3_curl_kv_test.go @@ -183,7 +183,7 @@ func mustExecuteTxn(cx ctlCtx, reqData string) (bool, []any) { clus := cx.epc args := e2e.CURLPrefixArgsCluster(clus.Cfg, clus.Procs[0], "POST", e2e.CURLReq{ Endpoint: "/v3/kv/txn", - Value: string(reqData), + Value: reqData, }) resp, err := runCommandAndReadJsonOutput(args) require.NoError(cx.t, err) diff --git a/tests/framework/integration/integration.go b/tests/framework/integration/integration.go index 6e182e7f1..6be69ad8a 100644 --- a/tests/framework/integration/integration.go +++ b/tests/framework/integration/integration.go @@ -53,7 +53,7 @@ func (e integrationRunner) NewCluster(ctx context.Context, t testing.TB, opts .. QuotaBackendBytes: cfg.QuotaBackendBytes, DisableStrictReconfigCheck: !cfg.StrictReconfigCheck, AuthToken: cfg.AuthToken, - SnapshotCount: uint64(cfg.SnapshotCount), + SnapshotCount: cfg.SnapshotCount, } integrationCfg.ClientTLS, err = tlsInfo(t, cfg.ClientTLS) if err != nil { diff --git a/tests/integration/clientv3/naming/resolver_test.go b/tests/integration/clientv3/naming/resolver_test.go index fc7ba077e..814ed7768 100644 --- a/tests/integration/clientv3/naming/resolver_test.go +++ b/tests/integration/clientv3/naming/resolver_test.go @@ -126,7 +126,7 @@ func testEtcdGrpcResolver(t *testing.T, lbPolicy string) { // Allow 25% tolerance as round robin is not perfect and we don't want the test to flake expected := float64(totalRequests) * 0.5 - assert.InEpsilon(t, float64(expected), float64(responses), 0.25, "unexpected total responses from foo: %s", string(lastResponse)) + assert.InEpsilon(t, expected, float64(responses), 0.25, "unexpected total responses from foo: %s", string(lastResponse)) } } diff --git a/tests/robustness/failpoints.go b/tests/robustness/failpoints.go index ca905bf4e..d7fbba8aa 100644 --- a/tests/robustness/failpoints.go +++ b/tests/robustness/failpoints.go @@ -175,13 +175,6 @@ func verifyClusterHealth(ctx context.Context, t *testing.T, clus *e2e.EtcdProces return nil } -type FailpointConfig struct { - failpoint Failpoint - count int - retries int - waitBetweenTriggers time.Duration -} - type Failpoint interface { Inject(ctx context.Context, t *testing.T, lg *zap.Logger, clus *e2e.EtcdProcessCluster) error Name() string diff --git a/tools/.golangci.yaml b/tools/.golangci.yaml index 9eb67f303..e82199541 100644 --- a/tools/.golangci.yaml +++ b/tools/.golangci.yaml @@ -21,9 +21,9 @@ linters: - ineffassign - revive - staticcheck - # - stylecheck # TODO: enable by #16610 - # - unused # TODO: enable by #16610 - # - unconvert # Remove unnecessary type conversions TODO: enable by #16610 + - stylecheck + - unused + - unconvert # Remove unnecessary type conversions linters-settings: # please keep this alphabetized goimports: local-prefixes: go.etcd.io # Put imports beginning with prefix after 3rd-party packages.