Limit a timeout in testing robustness validation

Signed-off-by: Marek Siarkowicz <siarkowicz@google.com>
This commit is contained in:
Marek Siarkowicz 2023-10-13 19:44:24 +02:00
parent 0168c3e1ce
commit e2bb8c698f
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 watchProgressNotifyEnabled := report.Cluster.Cfg.ServerConfig.ExperimentalWatchProgressNotifyInterval != 0
validateGotAtLeastOneProgressNotify(t, report.Client, s.watch.requestProgress || watchProgressNotifyEnabled) validateGotAtLeastOneProgressNotify(t, report.Client, s.watch.requestProgress || watchProgressNotifyEnabled)
validateConfig := validate.Config{ExpectRevisionUnique: s.traffic.ExpectUniqueRevision()} 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 panicked = false
} }

View File

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

View File

@ -18,6 +18,7 @@ import (
"fmt" "fmt"
"sort" "sort"
"testing" "testing"
"time"
"github.com/anishathalye/porcupine" "github.com/anishathalye/porcupine"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
@ -28,9 +29,9 @@ import (
) )
// ValidateAndReturnVisualize returns visualize as porcupine.linearizationInfo used to generate visualization is private. // 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) patchedOperations := patchedOperationHistory(reports)
linearizable, visualize := validateLinearizableOperationsAndVisualize(lg, patchedOperations) linearizable, visualize := validateLinearizableOperationsAndVisualize(lg, patchedOperations, timeout)
if linearizable != porcupine.Ok { if linearizable != porcupine.Ok {
t.Error("Failed linearization, skipping further validation") t.Error("Failed linearization, skipping further validation")
return visualize return visualize

View File

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