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

@ -122,11 +122,12 @@ func dialWithSchemeTest(cx ctlCtx) {
} }
type ctlCtx struct { type ctlCtx struct {
t *testing.T t *testing.T
apiPrefix string apiPrefix string
cfg e2e.EtcdProcessClusterConfig cfg e2e.EtcdProcessClusterConfig
corruptFunc func(string) error
noStrictReconfig bool corruptFunc func(string) error
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

@ -27,8 +27,9 @@ const (
) )
type ClusterConfig struct { type ClusterConfig struct {
ClusterSize int ClusterSize int
PeerTLS TLSConfig PeerTLS TLSConfig
ClientTLS TLSConfig ClientTLS TLSConfig
QuotaBackendBytes int64 QuotaBackendBytes int64
DisableStrictReconfigCheck bool
} }

View File

@ -43,9 +43,10 @@ func (e e2eRunner) BeforeTest(t testing.TB) {
func (e e2eRunner) NewCluster(ctx context.Context, t testing.TB, cfg config.ClusterConfig) Cluster { func (e e2eRunner) NewCluster(ctx context.Context, t testing.TB, cfg config.ClusterConfig) Cluster {
e2eConfig := e2e.EtcdProcessClusterConfig{ e2eConfig := e2e.EtcdProcessClusterConfig{
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

@ -166,14 +166,14 @@ type EtcdProcessClusterConfig struct {
CipherSuites []string CipherSuites []string
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
V2deprecation string V2deprecation string
RollingStart bool RollingStart bool
@ -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)