Skip to content

Commit c0e7e8c

Browse files
authored
Merge pull request #19370 from shashwat010/visualize
Remove passing of anonymous visualize function
2 parents fefce54 + 5414dba commit c0e7e8c

File tree

7 files changed

+39
-20
lines changed

7 files changed

+39
-20
lines changed

bill-of-materials.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"licenses": [
1414
{
1515
"type": "MIT License",
16-
"confidence": 1
16+
"confidence": 0.96875
1717
}
1818
]
1919
},

tests/go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ replace (
1616
)
1717

1818
require (
19-
github.com/anishathalye/porcupine v0.1.4
19+
github.com/anishathalye/porcupine v1.0.0
2020
github.com/coreos/go-semver v0.3.1
2121
github.com/golang/protobuf v1.5.4
2222
github.com/google/go-cmp v0.6.0

tests/go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
22
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
33
github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow=
44
github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4=
5-
github.com/anishathalye/porcupine v0.1.4 h1:rRekB2jH1mbtLPEzuqyMHp4scU52Bcc1jgkPi1kWFQA=
6-
github.com/anishathalye/porcupine v0.1.4/go.mod h1:/X9OQYnVb7DzfKCQVO4tI1Aq+o56UJW+RvN/5U4EuZA=
5+
github.com/anishathalye/porcupine v1.0.0 h1:93eF6d26IMDky+G4h8FcLuYp1oO+no8a//I7asq/oKI=
6+
github.com/anishathalye/porcupine v1.0.0/go.mod h1:WM0SsFjWNl2Y4BqHr/E/ll2yY1GY1jqn+W7Z/84Zoog=
77
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
88
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
99
github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E=

tests/robustness/main_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func testRobustness(ctx context.Context, t *testing.T, lg *zap.Logger, s scenari
102102
client.ValidateGotAtLeastOneProgressNotify(t, r.Client, s.Watch.RequestProgress || watchProgressNotifyEnabled)
103103
}
104104
validateConfig := validate.Config{ExpectRevisionUnique: s.Traffic.ExpectUniqueRevision()}
105-
r.Visualize = validate.ValidateAndReturnVisualize(t, lg, validateConfig, r.Client, persistedRequests, 5*time.Minute)
105+
r.Visualize = validate.ValidateAndReturnVisualize(t, lg, validateConfig, r.Client, persistedRequests, 5*time.Minute).Visualize
106106

107107
panicked = false
108108
}

tests/robustness/validate/operations.go

+27-8
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,31 @@ var (
3232
errFutureRevRespRequested = errors.New("request about a future rev with response")
3333
)
3434

35-
func validateLinearizableOperationsAndVisualize(lg *zap.Logger, operations []porcupine.Operation, timeout time.Duration) (result porcupine.CheckResult, visualize func(basepath string) error) {
35+
type Results struct {
36+
Info porcupine.LinearizationInfo
37+
Model porcupine.Model
38+
Linearizable porcupine.CheckResult
39+
Lg *zap.Logger // TODO: Remove logger from struct and instead of making it an argument for Visualize
40+
}
41+
42+
func (r Results) Visualize(path string) error {
43+
r.Lg.Info("Saving visualization", zap.String("path", path))
44+
err := porcupine.VisualizePath(r.Model, r.Info, path)
45+
if err != nil {
46+
return fmt.Errorf("failed to visualize, err: %w", err)
47+
}
48+
return nil
49+
}
50+
51+
func validateLinearizableOperationsAndVisualize(
52+
lg *zap.Logger,
53+
operations []porcupine.Operation,
54+
timeout time.Duration,
55+
) (results Results) {
3656
lg.Info("Validating linearizable operations", zap.Duration("timeout", timeout))
3757
start := time.Now()
3858
result, info := porcupine.CheckOperationsVerbose(model.NonDeterministicModel, operations, timeout)
59+
3960
switch result {
4061
case porcupine.Illegal:
4162
lg.Error("Linearization failed", zap.Duration("duration", time.Since(start)))
@@ -46,13 +67,11 @@ func validateLinearizableOperationsAndVisualize(lg *zap.Logger, operations []por
4667
default:
4768
panic(fmt.Sprintf("Unknown Linearization result %s", result))
4869
}
49-
return result, func(path string) error {
50-
lg.Info("Saving visualization", zap.String("path", path))
51-
err := porcupine.VisualizePath(model.NonDeterministicModel, info, path)
52-
if err != nil {
53-
return fmt.Errorf("failed to visualize, err: %w", err)
54-
}
55-
return nil
70+
return Results{
71+
Info: info,
72+
Model: model.NonDeterministicModel,
73+
Linearizable: result,
74+
Lg: lg,
5675
}
5776
}
5877

tests/robustness/validate/validate.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ import (
2828
"go.etcd.io/etcd/tests/v3/robustness/report"
2929
)
3030

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

38-
linearizable, visualize := validateLinearizableOperationsAndVisualize(lg, linearizableOperations, timeout)
39-
if linearizable != porcupine.Ok {
37+
results := validateLinearizableOperationsAndVisualize(lg, linearizableOperations, timeout)
38+
if results.Linearizable != porcupine.Ok {
4039
t.Error("Failed linearization, skipping further validation")
41-
return visualize
40+
return results
4241
}
42+
4343
// TODO: Use requests from linearization for replay.
4444
replay := model.NewReplay(persistedRequests)
4545

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

5757
type Config struct {

tests/robustness/validate/validate_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestDataReports(t *testing.T) {
4545

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

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

0 commit comments

Comments
 (0)