mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #16638 from fuweid/fix-stylecheck
*: fix stylecheck/unused/unconvert linter issues
This commit is contained in:
commit
4e7f114fa7
@ -15,23 +15,11 @@
|
|||||||
package client_test
|
package client_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
"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) {
|
func TestMain(m *testing.M) {
|
||||||
testutil.MustTestMainWithLeakDetection(m)
|
testutil.MustTestMainWithLeakDetection(m)
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
package testutil
|
package testutil
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -52,11 +51,3 @@ func AssertFalse(t *testing.T, v bool, msg ...string) {
|
|||||||
newMsg := copyToInterface(msg...)
|
newMsg := copyToInterface(msg...)
|
||||||
assert.Equal(t, false, v, newMsg)
|
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()
|
|
||||||
}
|
|
||||||
|
@ -16,7 +16,6 @@ package ordering
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
gContext "context"
|
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -29,7 +28,7 @@ type mockKV struct {
|
|||||||
response clientv3.OpResponse
|
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
|
return kv.response, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,9 +37,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
authEnabled = []byte{1}
|
|
||||||
authDisabled = []byte{0}
|
|
||||||
|
|
||||||
rootPerm = authpb.Permission{PermType: authpb.READWRITE, Key: []byte{}, RangeEnd: []byte{0}}
|
rootPerm = authpb.Permission{PermType: authpb.READWRITE, Key: []byte{}, RangeEnd: []byte{0}}
|
||||||
|
|
||||||
ErrRootUserNotExist = errors.New("auth: root user does not exist")
|
ErrRootUserNotExist = errors.New("auth: root user does not exist")
|
||||||
|
@ -1116,14 +1116,6 @@ func (cfg *Config) getListenClientUrls() (ss []string) {
|
|||||||
return ss
|
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) {
|
func (cfg *Config) getMetricsURLs() (ss []string) {
|
||||||
ss = make([]string, len(cfg.ListenMetricsUrls))
|
ss = make([]string, len(cfg.ListenMetricsUrls))
|
||||||
for i := range cfg.ListenMetricsUrls {
|
for i := range cfg.ListenMetricsUrls {
|
||||||
|
@ -23,7 +23,6 @@ import (
|
|||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
||||||
"go.etcd.io/etcd/api/v3/etcdserverpb"
|
|
||||||
pb "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/client/pkg/v3/types"
|
||||||
"go.etcd.io/etcd/server/v3/auth"
|
"go.etcd.io/etcd/server/v3/auth"
|
||||||
@ -154,9 +153,9 @@ func checkAlarms(lg *zap.Logger, srv ServerHealth, excludedAlarms AlarmSet) Heal
|
|||||||
|
|
||||||
h.Health = "false"
|
h.Health = "false"
|
||||||
switch v.Alarm {
|
switch v.Alarm {
|
||||||
case etcdserverpb.AlarmType_NOSPACE:
|
case pb.AlarmType_NOSPACE:
|
||||||
h.Reason = "ALARM NOSPACE"
|
h.Reason = "ALARM NOSPACE"
|
||||||
case etcdserverpb.AlarmType_CORRUPT:
|
case pb.AlarmType_CORRUPT:
|
||||||
h.Reason = "ALARM CORRUPT"
|
h.Reason = "ALARM CORRUPT"
|
||||||
default:
|
default:
|
||||||
h.Reason = "ALARM UNKNOWN"
|
h.Reason = "ALARM UNKNOWN"
|
||||||
@ -183,7 +182,7 @@ func checkAPI(lg *zap.Logger, srv ServerHealth, serializable bool) Health {
|
|||||||
h := Health{Health: "true"}
|
h := Health{Health: "true"}
|
||||||
cfg := srv.Config()
|
cfg := srv.Config()
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), cfg.ReqTimeout())
|
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()
|
cancel()
|
||||||
if err != nil && err != auth.ErrUserEmpty && err != auth.ErrPermissionDenied {
|
if err != nil && err != auth.ErrUserEmpty && err != auth.ErrPermissionDenied {
|
||||||
h.Health = "false"
|
h.Health = "false"
|
||||||
|
@ -34,12 +34,6 @@ import (
|
|||||||
"go.etcd.io/raft/v3"
|
"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 {
|
type fakeHealthServer struct {
|
||||||
fakeServer
|
fakeServer
|
||||||
health string
|
health string
|
||||||
|
@ -410,7 +410,6 @@ type storageMock struct {
|
|||||||
clusterVersion *semver.Version
|
clusterVersion *semver.Version
|
||||||
storageVersion *semver.Version
|
storageVersion *semver.Version
|
||||||
downgradeInfo *DowngradeInfo
|
downgradeInfo *DowngradeInfo
|
||||||
locked bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ Server = (*storageMock)(nil)
|
var _ Server = (*storageMock)(nil)
|
||||||
|
@ -90,13 +90,6 @@ func newMigrationStep(v semver.Version, isUpgrade bool, changes []schemaChange)
|
|||||||
return step
|
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.
|
// unsafeExecute is non thread-safe version of execute.
|
||||||
func (s migrationStep) unsafeExecute(lg *zap.Logger, tx backend.UnsafeReadWriter) error {
|
func (s migrationStep) unsafeExecute(lg *zap.Logger, tx backend.UnsafeReadWriter) error {
|
||||||
err := s.actions.unsafeExecute(lg, tx)
|
err := s.actions.unsafeExecute(lg, tx)
|
||||||
|
@ -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 {
|
func ctlV3OfflineDefrag(cx ctlCtx) error {
|
||||||
cmdArgs := append(cx.PrefixArgsUtl(), "defrag", "--data-dir", cx.dataDir)
|
cmdArgs := append(cx.PrefixArgsUtl(), "defrag", "--data-dir", cx.dataDir)
|
||||||
lines := []expect.ExpectedResponse{{Value: "finished defragmenting directory"}}
|
lines := []expect.ExpectedResponse{{Value: "finished defragmenting directory"}}
|
||||||
|
@ -96,11 +96,3 @@ func ctlV3LeaseRevoke(cx ctlCtx, leaseID string) error {
|
|||||||
cmdArgs := append(cx.PrefixArgs(), "lease", "revoke", leaseID)
|
cmdArgs := append(cx.PrefixArgs(), "lease", "revoke", leaseID)
|
||||||
return e2e.SpawnWithExpectWithEnv(cmdArgs, cx.envMap, expect.ExpectedResponse{Value: fmt.Sprintf("lease %s revoked", 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)})
|
|
||||||
}
|
|
||||||
|
@ -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) {
|
func memberAddTest(cx ctlCtx) {
|
||||||
peerURL := fmt.Sprintf("http://localhost:%d", e2e.EtcdProcessBasePort+11)
|
peerURL := fmt.Sprintf("http://localhost:%d", e2e.EtcdProcessBasePort+11)
|
||||||
if err := ctlV3MemberAdd(cx, peerURL, false); err != nil {
|
if err := ctlV3MemberAdd(cx, peerURL, false); err != nil {
|
||||||
|
@ -182,10 +182,6 @@ func withCorruptFunc(f func(string) error) ctlOption {
|
|||||||
return func(cx *ctlCtx) { cx.corruptFunc = f }
|
return func(cx *ctlCtx) { cx.corruptFunc = f }
|
||||||
}
|
}
|
||||||
|
|
||||||
func withDisableStrictReconfig() ctlOption {
|
|
||||||
return func(cx *ctlCtx) { cx.disableStrictReconfigCheck = true }
|
|
||||||
}
|
|
||||||
|
|
||||||
func withFlagByEnv() ctlOption {
|
func withFlagByEnv() ctlOption {
|
||||||
return func(cx *ctlCtx) { cx.envMap = make(map[string]string) }
|
return func(cx *ctlCtx) { cx.envMap = make(map[string]string) }
|
||||||
}
|
}
|
||||||
@ -345,24 +341,3 @@ func (cx *ctlCtx) PrefixArgsUtl() []string {
|
|||||||
func isGRPCTimedout(err error) bool {
|
func isGRPCTimedout(err error) bool {
|
||||||
return strings.Contains(err.Error(), "grpc: timed out trying to connect")
|
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
|
|
||||||
}
|
|
||||||
|
@ -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
|
|
||||||
}
|
|
@ -183,7 +183,7 @@ func mustExecuteTxn(cx ctlCtx, reqData string) (bool, []any) {
|
|||||||
clus := cx.epc
|
clus := cx.epc
|
||||||
args := e2e.CURLPrefixArgsCluster(clus.Cfg, clus.Procs[0], "POST", e2e.CURLReq{
|
args := e2e.CURLPrefixArgsCluster(clus.Cfg, clus.Procs[0], "POST", e2e.CURLReq{
|
||||||
Endpoint: "/v3/kv/txn",
|
Endpoint: "/v3/kv/txn",
|
||||||
Value: string(reqData),
|
Value: reqData,
|
||||||
})
|
})
|
||||||
resp, err := runCommandAndReadJsonOutput(args)
|
resp, err := runCommandAndReadJsonOutput(args)
|
||||||
require.NoError(cx.t, err)
|
require.NoError(cx.t, err)
|
||||||
|
@ -53,7 +53,7 @@ func (e integrationRunner) NewCluster(ctx context.Context, t testing.TB, opts ..
|
|||||||
QuotaBackendBytes: cfg.QuotaBackendBytes,
|
QuotaBackendBytes: cfg.QuotaBackendBytes,
|
||||||
DisableStrictReconfigCheck: !cfg.StrictReconfigCheck,
|
DisableStrictReconfigCheck: !cfg.StrictReconfigCheck,
|
||||||
AuthToken: cfg.AuthToken,
|
AuthToken: cfg.AuthToken,
|
||||||
SnapshotCount: uint64(cfg.SnapshotCount),
|
SnapshotCount: cfg.SnapshotCount,
|
||||||
}
|
}
|
||||||
integrationCfg.ClientTLS, err = tlsInfo(t, cfg.ClientTLS)
|
integrationCfg.ClientTLS, err = tlsInfo(t, cfg.ClientTLS)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -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
|
// Allow 25% tolerance as round robin is not perfect and we don't want the test to flake
|
||||||
expected := float64(totalRequests) * 0.5
|
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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,13 +175,6 @@ func verifyClusterHealth(ctx context.Context, t *testing.T, clus *e2e.EtcdProces
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type FailpointConfig struct {
|
|
||||||
failpoint Failpoint
|
|
||||||
count int
|
|
||||||
retries int
|
|
||||||
waitBetweenTriggers time.Duration
|
|
||||||
}
|
|
||||||
|
|
||||||
type Failpoint interface {
|
type Failpoint interface {
|
||||||
Inject(ctx context.Context, t *testing.T, lg *zap.Logger, clus *e2e.EtcdProcessCluster) error
|
Inject(ctx context.Context, t *testing.T, lg *zap.Logger, clus *e2e.EtcdProcessCluster) error
|
||||||
Name() string
|
Name() string
|
||||||
|
@ -21,9 +21,9 @@ linters:
|
|||||||
- ineffassign
|
- ineffassign
|
||||||
- revive
|
- revive
|
||||||
- staticcheck
|
- staticcheck
|
||||||
# - stylecheck # TODO: enable by #16610
|
- stylecheck
|
||||||
# - unused # TODO: enable by #16610
|
- unused
|
||||||
# - unconvert # Remove unnecessary type conversions TODO: enable by #16610
|
- unconvert # Remove unnecessary type conversions
|
||||||
linters-settings: # please keep this alphabetized
|
linters-settings: # please keep this alphabetized
|
||||||
goimports:
|
goimports:
|
||||||
local-prefixes: go.etcd.io # Put imports beginning with prefix after 3rd-party packages.
|
local-prefixes: go.etcd.io # Put imports beginning with prefix after 3rd-party packages.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user