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:
Clark 2022-08-20 02:23:53 +08:00
parent 5707147363
commit 3beb25489d
9 changed files with 42 additions and 38 deletions

View File

@ -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) }

View File

@ -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())) }

View File

@ -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
} }

View File

@ -31,4 +31,5 @@ type ClusterConfig struct {
PeerTLS TLSConfig PeerTLS TLSConfig
ClientTLS TLSConfig ClientTLS TLSConfig
QuotaBackendBytes int64 QuotaBackendBytes int64
DisableStrictReconfigCheck bool
} }

View File

@ -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:

View File

@ -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 {

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)