Move failpoints to separate package

Signed-off-by: Marek Siarkowicz <siarkowicz@google.com>
This commit is contained in:
Marek Siarkowicz 2023-10-16 20:57:26 +02:00
parent 569640f278
commit d6e376b6c6
2 changed files with 14 additions and 13 deletions

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package robustness package failpoint
import ( import (
"context" "context"
@ -80,10 +80,10 @@ var (
} }
) )
func pickRandomFailpoint(t *testing.T, clus *e2e.EtcdProcessCluster) Failpoint { func PickRandom(t *testing.T, clus *e2e.EtcdProcessCluster) Failpoint {
availableFailpoints := make([]Failpoint, 0, len(allFailpoints)) availableFailpoints := make([]Failpoint, 0, len(allFailpoints))
for _, failpoint := range allFailpoints { for _, failpoint := range allFailpoints {
err := validateFailpoint(clus, failpoint) err := Validate(clus, failpoint)
if err != nil { if err != nil {
continue continue
} }
@ -96,7 +96,7 @@ func pickRandomFailpoint(t *testing.T, clus *e2e.EtcdProcessCluster) Failpoint {
return availableFailpoints[rand.Int()%len(availableFailpoints)] return availableFailpoints[rand.Int()%len(availableFailpoints)]
} }
func validateFailpoint(clus *e2e.EtcdProcessCluster, failpoint Failpoint) error { func Validate(clus *e2e.EtcdProcessCluster, failpoint Failpoint) error {
for _, proc := range clus.Procs { for _, proc := range clus.Procs {
if !failpoint.Available(*clus.Cfg, proc) { if !failpoint.Available(*clus.Cfg, proc) {
return fmt.Errorf("failpoint %q not available on %s", failpoint.Name(), proc.Config().Name) return fmt.Errorf("failpoint %q not available on %s", failpoint.Name(), proc.Config().Name)
@ -105,7 +105,7 @@ func validateFailpoint(clus *e2e.EtcdProcessCluster, failpoint Failpoint) error
return nil return nil
} }
func injectFailpoints(ctx context.Context, t *testing.T, lg *zap.Logger, clus *e2e.EtcdProcessCluster, failpoint Failpoint) { func Inject(ctx context.Context, t *testing.T, lg *zap.Logger, clus *e2e.EtcdProcessCluster, failpoint Failpoint) {
ctx, cancel := context.WithTimeout(ctx, triggerTimeout) ctx, cancel := context.WithTimeout(ctx, triggerTimeout)
defer cancel() defer cancel()
var err error var err error

View File

@ -26,6 +26,7 @@ import (
"go.etcd.io/etcd/api/v3/version" "go.etcd.io/etcd/api/v3/version"
"go.etcd.io/etcd/tests/v3/framework/e2e" "go.etcd.io/etcd/tests/v3/framework/e2e"
"go.etcd.io/etcd/tests/v3/robustness/failpoint"
"go.etcd.io/etcd/tests/v3/robustness/identity" "go.etcd.io/etcd/tests/v3/robustness/identity"
"go.etcd.io/etcd/tests/v3/robustness/model" "go.etcd.io/etcd/tests/v3/robustness/model"
"go.etcd.io/etcd/tests/v3/robustness/report" "go.etcd.io/etcd/tests/v3/robustness/report"
@ -105,7 +106,7 @@ func TestRobustness(t *testing.T) {
} }
scenarios = append(scenarios, testScenario{ scenarios = append(scenarios, testScenario{
name: "Issue14370", name: "Issue14370",
failpoint: RaftBeforeSavePanic, failpoint: failpoint.RaftBeforeSavePanic,
profile: traffic.LowTraffic, profile: traffic.LowTraffic,
traffic: traffic.EtcdPutDeleteLease, traffic: traffic.EtcdPutDeleteLease,
cluster: *e2e.NewConfig( cluster: *e2e.NewConfig(
@ -115,7 +116,7 @@ func TestRobustness(t *testing.T) {
}) })
scenarios = append(scenarios, testScenario{ scenarios = append(scenarios, testScenario{
name: "Issue14685", name: "Issue14685",
failpoint: DefragBeforeCopyPanic, failpoint: failpoint.DefragBeforeCopyPanic,
profile: traffic.LowTraffic, profile: traffic.LowTraffic,
traffic: traffic.EtcdPutDeleteLease, traffic: traffic.EtcdPutDeleteLease,
cluster: *e2e.NewConfig( cluster: *e2e.NewConfig(
@ -125,7 +126,7 @@ func TestRobustness(t *testing.T) {
}) })
scenarios = append(scenarios, testScenario{ scenarios = append(scenarios, testScenario{
name: "Issue13766", name: "Issue13766",
failpoint: KillFailpoint, failpoint: failpoint.KillFailpoint,
profile: traffic.HighTrafficProfile, profile: traffic.HighTrafficProfile,
traffic: traffic.EtcdPut, traffic: traffic.EtcdPut,
cluster: *e2e.NewConfig( cluster: *e2e.NewConfig(
@ -147,7 +148,7 @@ func TestRobustness(t *testing.T) {
if v.Compare(version.V3_6) >= 0 { if v.Compare(version.V3_6) >= 0 {
scenarios = append(scenarios, testScenario{ scenarios = append(scenarios, testScenario{
name: "Issue15271", name: "Issue15271",
failpoint: BlackholeUntilSnapshot, failpoint: failpoint.BlackholeUntilSnapshot,
profile: traffic.HighTrafficProfile, profile: traffic.HighTrafficProfile,
traffic: traffic.EtcdPut, traffic: traffic.EtcdPut,
cluster: *e2e.NewConfig( cluster: *e2e.NewConfig(
@ -170,7 +171,7 @@ func TestRobustness(t *testing.T) {
type testScenario struct { type testScenario struct {
name string name string
failpoint Failpoint failpoint failpoint.Failpoint
cluster e2e.EtcdProcessClusterConfig cluster e2e.EtcdProcessClusterConfig
traffic traffic.Traffic traffic traffic.Traffic
profile traffic.Profile profile traffic.Profile
@ -187,9 +188,9 @@ func testRobustness(ctx context.Context, t *testing.T, lg *zap.Logger, s testSce
defer report.Cluster.Close() defer report.Cluster.Close()
if s.failpoint == nil { if s.failpoint == nil {
s.failpoint = pickRandomFailpoint(t, report.Cluster) s.failpoint = failpoint.PickRandom(t, report.Cluster)
} else { } else {
err = validateFailpoint(report.Cluster, s.failpoint) err = failpoint.Validate(report.Cluster, s.failpoint)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -224,7 +225,7 @@ func (s testScenario) run(ctx context.Context, t *testing.T, lg *zap.Logger, clu
ids := identity.NewIdProvider() ids := identity.NewIdProvider()
g.Go(func() error { g.Go(func() error {
defer close(finishTraffic) defer close(finishTraffic)
injectFailpoints(ctx, t, lg, clus, s.failpoint) failpoint.Inject(ctx, t, lg, clus, s.failpoint)
time.Sleep(time.Second) time.Sleep(time.Second)
return nil return nil
}) })