Merge pull request #16764 from serathius/robustness-validate-timeout

Limit a timeout in testing robustness validation
This commit is contained in:
Marek Siarkowicz 2024-04-06 14:33:20 +02:00 committed by GitHub
commit 10657ef304
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 11 additions and 9 deletions

View File

@ -94,7 +94,7 @@ func testRobustness(ctx context.Context, t *testing.T, lg *zap.Logger, s testSce
watchProgressNotifyEnabled := report.Cluster.Cfg.ServerConfig.ExperimentalWatchProgressNotifyInterval != 0
validateGotAtLeastOneProgressNotify(t, report.Client, s.watch.requestProgress || watchProgressNotifyEnabled)
validateConfig := validate.Config{ExpectRevisionUnique: s.traffic.ExpectUniqueRevision()}
report.Visualize = validate.ValidateAndReturnVisualize(t, lg, validateConfig, report.Client)
report.Visualize = validate.ValidateAndReturnVisualize(t, lg, validateConfig, report.Client, 5*time.Minute)
panicked = false
}

View File

@ -28,17 +28,17 @@ import (
"go.etcd.io/etcd/tests/v3/robustness/model"
)
func validateLinearizableOperationsAndVisualize(lg *zap.Logger, operations []porcupine.Operation) (result porcupine.CheckResult, visualize func(basepath string) error) {
const timeout = 5 * time.Minute
func validateLinearizableOperationsAndVisualize(lg *zap.Logger, operations []porcupine.Operation, timeout time.Duration) (result porcupine.CheckResult, visualize func(basepath string) error) {
lg.Info("Validating linearizable operations", zap.Duration("timeout", timeout))
start := time.Now()
result, info := porcupine.CheckOperationsVerbose(model.NonDeterministicModel, operations, timeout)
switch result {
case porcupine.Illegal:
lg.Error("Linearization failed")
lg.Error("Linearization failed", zap.Duration("duration", time.Since(start)))
case porcupine.Unknown:
lg.Error("Linearization has timed out")
lg.Error("Linearization has timed out", zap.Duration("duration", time.Since(start)))
case porcupine.Ok:
lg.Info("Linearization success")
lg.Info("Linearization success", zap.Duration("duration", time.Since(start)))
default:
panic(fmt.Sprintf("Unknown Linearization result %s", result))
}

View File

@ -18,6 +18,7 @@ import (
"fmt"
"sort"
"testing"
"time"
"github.com/anishathalye/porcupine"
"github.com/google/go-cmp/cmp"
@ -28,9 +29,9 @@ import (
)
// 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) (visualize func(basepath string) error) {
func ValidateAndReturnVisualize(t *testing.T, lg *zap.Logger, cfg Config, reports []report.ClientReport, timeout time.Duration) (visualize func(basepath string) error) {
patchedOperations := patchedOperationHistory(reports)
linearizable, visualize := validateLinearizableOperationsAndVisualize(lg, patchedOperations)
linearizable, visualize := validateLinearizableOperationsAndVisualize(lg, patchedOperations, timeout)
if linearizable != porcupine.Ok {
t.Error("Failed linearization, skipping further validation")
return visualize

View File

@ -18,6 +18,7 @@ import (
"os"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
"go.uber.org/zap/zaptest"
@ -37,7 +38,7 @@ func TestValidate(t *testing.T) {
path := filepath.Join(testdataPath, file.Name())
reports, err := report.LoadClientReports(path)
assert.NoError(t, err)
visualize := ValidateAndReturnVisualize(t, zaptest.NewLogger(t), Config{}, reports)
visualize := ValidateAndReturnVisualize(t, zaptest.NewLogger(t), Config{}, reports, 5*time.Minute)
if t.Failed() {
err := visualize(filepath.Join(path, "history.html"))