mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests: enable --strict-reconfig-check
by default and expose it to common framework
Signed-off-by: Clark <fwyongxing@gmail.com>
This commit is contained in:
parent
5707147363
commit
3beb25489d
@ -41,7 +41,7 @@ func TestCtlV3AuthTxnJWT(t *testing.T) { testCtl(t, authTestTxn, wi
|
|||||||
func TestCtlV3AuthPrefixPerm(t *testing.T) { testCtl(t, authTestPrefixPerm) }
|
func TestCtlV3AuthPrefixPerm(t *testing.T) { testCtl(t, authTestPrefixPerm) }
|
||||||
func TestCtlV3AuthMemberAdd(t *testing.T) { testCtl(t, authTestMemberAdd) }
|
func TestCtlV3AuthMemberAdd(t *testing.T) { testCtl(t, authTestMemberAdd) }
|
||||||
func TestCtlV3AuthMemberRemove(t *testing.T) {
|
func TestCtlV3AuthMemberRemove(t *testing.T) {
|
||||||
testCtl(t, authTestMemberRemove, withQuorum(), withNoStrictReconfig())
|
testCtl(t, authTestMemberRemove, withQuorum(), withDisableStrictReconfig())
|
||||||
}
|
}
|
||||||
func TestCtlV3AuthMemberUpdate(t *testing.T) { testCtl(t, authTestMemberUpdate) }
|
func TestCtlV3AuthMemberUpdate(t *testing.T) { testCtl(t, authTestMemberUpdate) }
|
||||||
func TestCtlV3AuthRevokeWithDelete(t *testing.T) { testCtl(t, authTestRevokeWithDelete) }
|
func TestCtlV3AuthRevokeWithDelete(t *testing.T) { testCtl(t, authTestRevokeWithDelete) }
|
||||||
|
@ -29,16 +29,16 @@ import (
|
|||||||
func TestCtlV3MemberList(t *testing.T) { testCtl(t, memberListTest) }
|
func TestCtlV3MemberList(t *testing.T) { testCtl(t, memberListTest) }
|
||||||
func TestCtlV3MemberListWithHex(t *testing.T) { testCtl(t, memberListWithHexTest) }
|
func TestCtlV3MemberListWithHex(t *testing.T) { testCtl(t, memberListWithHexTest) }
|
||||||
func TestCtlV3MemberRemove(t *testing.T) {
|
func TestCtlV3MemberRemove(t *testing.T) {
|
||||||
testCtl(t, memberRemoveTest, withQuorum(), withNoStrictReconfig())
|
testCtl(t, memberRemoveTest, withQuorum(), withDisableStrictReconfig())
|
||||||
}
|
}
|
||||||
func TestCtlV3MemberRemoveNoTLS(t *testing.T) {
|
func TestCtlV3MemberRemoveNoTLS(t *testing.T) {
|
||||||
testCtl(t, memberRemoveTest, withQuorum(), withNoStrictReconfig(), withCfg(*e2e.NewConfigNoTLS()))
|
testCtl(t, memberRemoveTest, withQuorum(), withDisableStrictReconfig(), withCfg(*e2e.NewConfigNoTLS()))
|
||||||
}
|
}
|
||||||
func TestCtlV3MemberRemoveClientTLS(t *testing.T) {
|
func TestCtlV3MemberRemoveClientTLS(t *testing.T) {
|
||||||
testCtl(t, memberRemoveTest, withQuorum(), withNoStrictReconfig(), withCfg(*e2e.NewConfigClientTLS()))
|
testCtl(t, memberRemoveTest, withQuorum(), withDisableStrictReconfig(), withCfg(*e2e.NewConfigClientTLS()))
|
||||||
}
|
}
|
||||||
func TestCtlV3MemberRemoveClientAutoTLS(t *testing.T) {
|
func TestCtlV3MemberRemoveClientAutoTLS(t *testing.T) {
|
||||||
testCtl(t, memberRemoveTest, withQuorum(), withNoStrictReconfig(), withCfg(
|
testCtl(t, memberRemoveTest, withQuorum(), withDisableStrictReconfig(), withCfg(
|
||||||
// default ClusterSize is 1
|
// default ClusterSize is 1
|
||||||
e2e.EtcdProcessClusterConfig{
|
e2e.EtcdProcessClusterConfig{
|
||||||
ClusterSize: 3,
|
ClusterSize: 3,
|
||||||
@ -48,7 +48,7 @@ func TestCtlV3MemberRemoveClientAutoTLS(t *testing.T) {
|
|||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
func TestCtlV3MemberRemovePeerTLS(t *testing.T) {
|
func TestCtlV3MemberRemovePeerTLS(t *testing.T) {
|
||||||
testCtl(t, memberRemoveTest, withQuorum(), withNoStrictReconfig(), withCfg(*e2e.NewConfigPeerTLS()))
|
testCtl(t, memberRemoveTest, withQuorum(), withDisableStrictReconfig(), withCfg(*e2e.NewConfigPeerTLS()))
|
||||||
}
|
}
|
||||||
func TestCtlV3MemberAdd(t *testing.T) { testCtl(t, memberAddTest) }
|
func TestCtlV3MemberAdd(t *testing.T) { testCtl(t, memberAddTest) }
|
||||||
func TestCtlV3MemberAddNoTLS(t *testing.T) { testCtl(t, memberAddTest, withCfg(*e2e.NewConfigNoTLS())) }
|
func TestCtlV3MemberAddNoTLS(t *testing.T) { testCtl(t, memberAddTest, withCfg(*e2e.NewConfigNoTLS())) }
|
||||||
|
@ -125,8 +125,9 @@ type ctlCtx struct {
|
|||||||
t *testing.T
|
t *testing.T
|
||||||
apiPrefix string
|
apiPrefix string
|
||||||
cfg e2e.EtcdProcessClusterConfig
|
cfg e2e.EtcdProcessClusterConfig
|
||||||
|
|
||||||
corruptFunc func(string) error
|
corruptFunc func(string) error
|
||||||
noStrictReconfig bool
|
disableStrictReconfigCheck bool
|
||||||
|
|
||||||
epc *e2e.EtcdProcessCluster
|
epc *e2e.EtcdProcessCluster
|
||||||
|
|
||||||
@ -185,8 +186,8 @@ func withCorruptFunc(f func(string) error) ctlOption {
|
|||||||
return func(cx *ctlCtx) { cx.corruptFunc = f }
|
return func(cx *ctlCtx) { cx.corruptFunc = f }
|
||||||
}
|
}
|
||||||
|
|
||||||
func withNoStrictReconfig() ctlOption {
|
func withDisableStrictReconfig() ctlOption {
|
||||||
return func(cx *ctlCtx) { cx.noStrictReconfig = true }
|
return func(cx *ctlCtx) { cx.disableStrictReconfigCheck = true }
|
||||||
}
|
}
|
||||||
|
|
||||||
func withApiPrefix(p string) ctlOption {
|
func withApiPrefix(p string) ctlOption {
|
||||||
@ -226,7 +227,7 @@ func testCtlWithOffline(t *testing.T, testFunc func(ctlCtx), testOfflineFunc fun
|
|||||||
if !ret.quorum {
|
if !ret.quorum {
|
||||||
ret.cfg = *e2e.ConfigStandalone(ret.cfg)
|
ret.cfg = *e2e.ConfigStandalone(ret.cfg)
|
||||||
}
|
}
|
||||||
ret.cfg.NoStrictReconfig = ret.noStrictReconfig
|
ret.cfg.DisableStrictReconfigCheck = ret.disableStrictReconfigCheck
|
||||||
if ret.initialCorruptCheck {
|
if ret.initialCorruptCheck {
|
||||||
ret.cfg.InitialCorruptCheck = ret.initialCorruptCheck
|
ret.cfg.InitialCorruptCheck = ret.initialCorruptCheck
|
||||||
}
|
}
|
||||||
|
@ -31,4 +31,5 @@ type ClusterConfig struct {
|
|||||||
PeerTLS TLSConfig
|
PeerTLS TLSConfig
|
||||||
ClientTLS TLSConfig
|
ClientTLS TLSConfig
|
||||||
QuotaBackendBytes int64
|
QuotaBackendBytes int64
|
||||||
|
DisableStrictReconfigCheck bool
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ func (e e2eRunner) NewCluster(ctx context.Context, t testing.TB, cfg config.Clus
|
|||||||
InitialToken: "new",
|
InitialToken: "new",
|
||||||
ClusterSize: cfg.ClusterSize,
|
ClusterSize: cfg.ClusterSize,
|
||||||
QuotaBackendBytes: cfg.QuotaBackendBytes,
|
QuotaBackendBytes: cfg.QuotaBackendBytes,
|
||||||
|
DisableStrictReconfigCheck: cfg.DisableStrictReconfigCheck,
|
||||||
}
|
}
|
||||||
switch cfg.ClientTLS {
|
switch cfg.ClientTLS {
|
||||||
case config.NoTLS:
|
case config.NoTLS:
|
||||||
|
@ -169,7 +169,7 @@ type EtcdProcessClusterConfig struct {
|
|||||||
ForceNewCluster bool
|
ForceNewCluster bool
|
||||||
InitialToken string
|
InitialToken string
|
||||||
QuotaBackendBytes int64
|
QuotaBackendBytes int64
|
||||||
NoStrictReconfig bool
|
DisableStrictReconfigCheck bool
|
||||||
EnableV2 bool
|
EnableV2 bool
|
||||||
InitialCorruptCheck bool
|
InitialCorruptCheck bool
|
||||||
AuthTokenOpts string
|
AuthTokenOpts string
|
||||||
@ -317,7 +317,7 @@ func (cfg *EtcdProcessClusterConfig) EtcdServerProcessConfigs(tb testing.TB) []*
|
|||||||
"--quota-backend-bytes", fmt.Sprintf("%d", cfg.QuotaBackendBytes),
|
"--quota-backend-bytes", fmt.Sprintf("%d", cfg.QuotaBackendBytes),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if cfg.NoStrictReconfig {
|
if cfg.DisableStrictReconfigCheck {
|
||||||
args = append(args, "--strict-reconfig-check=false")
|
args = append(args, "--strict-reconfig-check=false")
|
||||||
}
|
}
|
||||||
if cfg.EnableV2 {
|
if cfg.EnableV2 {
|
||||||
|
@ -48,6 +48,7 @@ func (e integrationRunner) NewCluster(ctx context.Context, t testing.TB, cfg con
|
|||||||
integrationCfg.Size = cfg.ClusterSize
|
integrationCfg.Size = cfg.ClusterSize
|
||||||
integrationCfg.ClientTLS, err = tlsInfo(t, cfg.ClientTLS)
|
integrationCfg.ClientTLS, err = tlsInfo(t, cfg.ClientTLS)
|
||||||
integrationCfg.QuotaBackendBytes = cfg.QuotaBackendBytes
|
integrationCfg.QuotaBackendBytes = cfg.QuotaBackendBytes
|
||||||
|
integrationCfg.DisableStrictReconfigCheck = cfg.DisableStrictReconfigCheck
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("ClientTLS: %s", err)
|
t.Fatalf("ClientTLS: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ type ClusterConfig struct {
|
|||||||
|
|
||||||
WatchProgressNotifyInterval time.Duration
|
WatchProgressNotifyInterval time.Duration
|
||||||
ExperimentalMaxLearners int
|
ExperimentalMaxLearners int
|
||||||
StrictReconfigCheck bool
|
DisableStrictReconfigCheck bool
|
||||||
CorruptCheckTime time.Duration
|
CorruptCheckTime time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ func (c *Cluster) mustNewMember(t testutil.TB) *Member {
|
|||||||
LeaseCheckpointPersist: c.Cfg.LeaseCheckpointPersist,
|
LeaseCheckpointPersist: c.Cfg.LeaseCheckpointPersist,
|
||||||
WatchProgressNotifyInterval: c.Cfg.WatchProgressNotifyInterval,
|
WatchProgressNotifyInterval: c.Cfg.WatchProgressNotifyInterval,
|
||||||
ExperimentalMaxLearners: c.Cfg.ExperimentalMaxLearners,
|
ExperimentalMaxLearners: c.Cfg.ExperimentalMaxLearners,
|
||||||
StrictReconfigCheck: c.Cfg.StrictReconfigCheck,
|
DisableStrictReconfigCheck: c.Cfg.DisableStrictReconfigCheck,
|
||||||
CorruptCheckTime: c.Cfg.CorruptCheckTime,
|
CorruptCheckTime: c.Cfg.CorruptCheckTime,
|
||||||
})
|
})
|
||||||
m.DiscoveryURL = c.Cfg.DiscoveryURL
|
m.DiscoveryURL = c.Cfg.DiscoveryURL
|
||||||
@ -604,7 +604,7 @@ type MemberConfig struct {
|
|||||||
LeaseCheckpointPersist bool
|
LeaseCheckpointPersist bool
|
||||||
WatchProgressNotifyInterval time.Duration
|
WatchProgressNotifyInterval time.Duration
|
||||||
ExperimentalMaxLearners int
|
ExperimentalMaxLearners int
|
||||||
StrictReconfigCheck bool
|
DisableStrictReconfigCheck bool
|
||||||
CorruptCheckTime time.Duration
|
CorruptCheckTime time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -720,7 +720,7 @@ func MustNewMember(t testutil.TB, mcfg MemberConfig) *Member {
|
|||||||
m.V2Deprecation = config.V2_DEPR_DEFAULT
|
m.V2Deprecation = config.V2_DEPR_DEFAULT
|
||||||
m.GrpcServerRecorder = &grpc_testing.GrpcRecorder{}
|
m.GrpcServerRecorder = &grpc_testing.GrpcRecorder{}
|
||||||
m.Logger = memberLogger(t, mcfg.Name)
|
m.Logger = memberLogger(t, mcfg.Name)
|
||||||
m.StrictReconfigCheck = mcfg.StrictReconfigCheck
|
m.StrictReconfigCheck = !mcfg.DisableStrictReconfigCheck
|
||||||
if err := m.listenGRPC(); err != nil {
|
if err := m.listenGRPC(); err != nil {
|
||||||
t.Fatalf("listenGRPC FAILED: %v", err)
|
t.Fatalf("listenGRPC FAILED: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -333,7 +333,7 @@ func TestIssue3699(t *testing.T) {
|
|||||||
// TestRejectUnhealthyAdd ensures an unhealthy cluster rejects adding members.
|
// TestRejectUnhealthyAdd ensures an unhealthy cluster rejects adding members.
|
||||||
func TestRejectUnhealthyAdd(t *testing.T) {
|
func TestRejectUnhealthyAdd(t *testing.T) {
|
||||||
integration.BeforeTest(t)
|
integration.BeforeTest(t)
|
||||||
c := integration.NewCluster(t, &integration.ClusterConfig{Size: 3, UseBridge: true, StrictReconfigCheck: true})
|
c := integration.NewCluster(t, &integration.ClusterConfig{Size: 3, UseBridge: true})
|
||||||
defer c.Terminate(t)
|
defer c.Terminate(t)
|
||||||
|
|
||||||
// make Cluster unhealthy and wait for downed peer
|
// make Cluster unhealthy and wait for downed peer
|
||||||
@ -373,7 +373,7 @@ func TestRejectUnhealthyAdd(t *testing.T) {
|
|||||||
// if quorum will be lost.
|
// if quorum will be lost.
|
||||||
func TestRejectUnhealthyRemove(t *testing.T) {
|
func TestRejectUnhealthyRemove(t *testing.T) {
|
||||||
integration.BeforeTest(t)
|
integration.BeforeTest(t)
|
||||||
c := integration.NewCluster(t, &integration.ClusterConfig{Size: 5, UseBridge: true, StrictReconfigCheck: true})
|
c := integration.NewCluster(t, &integration.ClusterConfig{Size: 5, UseBridge: true})
|
||||||
defer c.Terminate(t)
|
defer c.Terminate(t)
|
||||||
|
|
||||||
// make cluster unhealthy and wait for downed peer; (3 up, 2 down)
|
// make cluster unhealthy and wait for downed peer; (3 up, 2 down)
|
||||||
@ -418,11 +418,11 @@ func TestRestartRemoved(t *testing.T) {
|
|||||||
integration.BeforeTest(t)
|
integration.BeforeTest(t)
|
||||||
|
|
||||||
// 1. start single-member Cluster
|
// 1. start single-member Cluster
|
||||||
c := integration.NewCluster(t, &integration.ClusterConfig{Size: 1, StrictReconfigCheck: true})
|
c := integration.NewCluster(t, &integration.ClusterConfig{Size: 1})
|
||||||
defer c.Terminate(t)
|
defer c.Terminate(t)
|
||||||
|
|
||||||
// 2. add a new member
|
// 2. add a new member
|
||||||
c.Cfg.StrictReconfigCheck = false
|
c.Cfg.DisableStrictReconfigCheck = true
|
||||||
c.AddMember(t)
|
c.AddMember(t)
|
||||||
c.WaitLeader(t)
|
c.WaitLeader(t)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user