Skip to content

Commit

Permalink
Remove passing of anonymous visualize function
Browse files Browse the repository at this point in the history
Signed-off-by: shashwat-jain <shashwat.jain@salesforce.com>
  • Loading branch information
shashwat010 committed Feb 11, 2025
1 parent ad33010 commit a92d284
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 17 deletions.
2 changes: 1 addition & 1 deletion tests/robustness/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func testRobustness(ctx context.Context, t *testing.T, lg *zap.Logger, s scenari
client.ValidateGotAtLeastOneProgressNotify(t, r.Client, s.Watch.RequestProgress || watchProgressNotifyEnabled)
}
validateConfig := validate.Config{ExpectRevisionUnique: s.Traffic.ExpectUniqueRevision()}
r.Visualize = validate.ValidateAndReturnVisualize(t, lg, validateConfig, r.Client, persistedRequests, 5*time.Minute)
r.Visualize = validate.ValidateAndReturnVisualize(t, lg, validateConfig, r.Client, persistedRequests, 5*time.Minute).Visualize

panicked = false
}
Expand Down
40 changes: 31 additions & 9 deletions tests/robustness/validate/operations.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,39 @@ var (
errFutureRevRespRequested = errors.New("request about a future rev with response")
)

func validateLinearizableOperationsAndVisualize(lg *zap.Logger, operations []porcupine.Operation, timeout time.Duration) (result porcupine.CheckResult, visualize func(basepath string) error) {
type Results struct {
Info porcupine.LinearizationInfo
Model porcupine.Model
Linearizable porcupine.CheckResult
Lg *zap.Logger // TODO: Remove logger from struct and instead of making it an argument for Visualize
}

func (r Results) Visualize(path string) error {

r.Lg.Info("Saving visualization", zap.String("path", path))
err := porcupine.VisualizePath(r.Model, r.Info, path)
if err != nil {
return fmt.Errorf("failed to visualize, err: %w", err)
}
return nil
}

func validateLinearizableOperationsAndVisualize(
lg *zap.Logger,
operations []porcupine.Operation,
timeout time.Duration,
) (results Results) {
lg.Info("Validating linearizable operations", zap.Duration("timeout", timeout))
start := time.Now()
result, info := porcupine.CheckOperationsVerbose(model.NonDeterministicModel, operations, timeout)

results = Results{
Info: info,
Model: model.NonDeterministicModel,
Linearizable: result,
Lg: lg,
}

switch result {
case porcupine.Illegal:
lg.Error("Linearization failed", zap.Duration("duration", time.Since(start)))
Expand All @@ -46,14 +75,7 @@ func validateLinearizableOperationsAndVisualize(lg *zap.Logger, operations []por
default:
panic(fmt.Sprintf("Unknown Linearization result %s", result))
}
return result, func(path string) error {
lg.Info("Saving visualization", zap.String("path", path))
err := porcupine.VisualizePath(model.NonDeterministicModel, info, path)
if err != nil {
return fmt.Errorf("failed to visualize, err: %w", err)
}
return nil
}
return results
}

func validateSerializableOperations(lg *zap.Logger, operations []porcupine.Operation, replay *model.EtcdReplay) (lastErr error) {
Expand Down
12 changes: 6 additions & 6 deletions tests/robustness/validate/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,18 @@ import (
"go.etcd.io/etcd/tests/v3/robustness/report"
)

// ValidateAndReturnVisualize returns visualize as porcupine.linearizationInfo used to generate visualization is private.
func ValidateAndReturnVisualize(t *testing.T, lg *zap.Logger, cfg Config, reports []report.ClientReport, persistedRequests []model.EtcdRequest, timeout time.Duration) (visualize func(basepath string) error) {
func ValidateAndReturnVisualize(t *testing.T, lg *zap.Logger, cfg Config, reports []report.ClientReport, persistedRequests []model.EtcdRequest, timeout time.Duration) Results {
err := checkValidationAssumptions(reports, persistedRequests)
require.NoErrorf(t, err, "Broken validation assumptions")
linearizableOperations := patchLinearizableOperations(reports, persistedRequests)
serializableOperations := filterSerializableOperations(reports)

linearizable, visualize := validateLinearizableOperationsAndVisualize(lg, linearizableOperations, timeout)
if linearizable != porcupine.Ok {
results := validateLinearizableOperationsAndVisualize(lg, linearizableOperations, timeout)
if results.Linearizable != porcupine.Ok {
t.Error("Failed linearization, skipping further validation")
return visualize
return results
}

// TODO: Use requests from linearization for replay.
replay := model.NewReplay(persistedRequests)

Expand All @@ -51,7 +51,7 @@ func ValidateAndReturnVisualize(t *testing.T, lg *zap.Logger, cfg Config, report
if err != nil {
t.Errorf("Failed validating serializable operations, err: %s", err)
}
return visualize
return results
}

type Config struct {
Expand Down
2 changes: 1 addition & 1 deletion tests/robustness/validate/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func TestDataReports(t *testing.T) {

persistedRequests, err := report.LoadClusterPersistedRequests(lg, path)
require.NoError(t, err)
visualize := ValidateAndReturnVisualize(t, zaptest.NewLogger(t), Config{}, reports, persistedRequests, 5*time.Minute)
visualize := ValidateAndReturnVisualize(t, zaptest.NewLogger(t), Config{}, reports, persistedRequests, 5*time.Minute).Visualize

err = visualize(filepath.Join(path, "history.html"))
require.NoError(t, err)
Expand Down

0 comments on commit a92d284

Please sign in to comment.