From f763c53d5120df256b3945bd4435d42ae6c4f418 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Tue, 17 Jan 2023 11:56:34 +0100 Subject: [PATCH 1/2] tests: Persist operation history Signed-off-by: Marek Siarkowicz --- tests/linearizability/linearizability_test.go | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/linearizability/linearizability_test.go b/tests/linearizability/linearizability_test.go index 20a6a66ac..c2e460d79 100644 --- a/tests/linearizability/linearizability_test.go +++ b/tests/linearizability/linearizability_test.go @@ -16,6 +16,7 @@ package linearizability import ( "context" + "encoding/json" "os" "path/filepath" "sort" @@ -324,9 +325,15 @@ func checkOperationsAndPersistResults(t *testing.T, operations []porcupine.Opera t.Error(err) } - linearizable, info := porcupine.CheckOperationsVerbose(model.Etcd, operations, 0) - if linearizable != porcupine.Ok { + linearizable, info := porcupine.CheckOperationsVerbose(model.Etcd, operations, time.Minute) + if linearizable == porcupine.Illegal { t.Error("Model is not linearizable") + } + if linearizable == porcupine.Unknown { + t.Error("Linearization timed out") + } + if linearizable != porcupine.Ok { + persistOperationHistory(t, path, operations) persistMemberDataDir(t, clus, path) } @@ -338,6 +345,23 @@ func checkOperationsAndPersistResults(t *testing.T, operations []porcupine.Opera } } +func persistOperationHistory(t *testing.T, path string, operations []porcupine.Operation) { + historyFilePath := filepath.Join(path, "history.json") + t.Logf("saving operation history to %q", historyFilePath) + file, err := os.OpenFile(historyFilePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + if err != nil { + t.Errorf("Failed to save operation history: %v", err) + return + } + encoder := json.NewEncoder(file) + for _, op := range operations { + err := encoder.Encode(op) + if err != nil { + t.Errorf("Failed to encode operation: %v", err) + } + } +} + func persistMemberDataDir(t *testing.T, clus *e2e.EtcdProcessCluster, path string) { for _, member := range clus.Procs { memberDataDir := filepath.Join(path, member.Config().Name) From f629d48600ba7f6150d04dbea0f6687a3d70582b Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Wed, 18 Jan 2023 09:42:56 +0100 Subject: [PATCH 2/2] Close file while persisting operation history Co-authored-by: Benjamin Wang Signed-off-by: Marek Siarkowicz --- tests/linearizability/linearizability_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/linearizability/linearizability_test.go b/tests/linearizability/linearizability_test.go index c2e460d79..22e967881 100644 --- a/tests/linearizability/linearizability_test.go +++ b/tests/linearizability/linearizability_test.go @@ -353,6 +353,7 @@ func persistOperationHistory(t *testing.T, path string, operations []porcupine.O t.Errorf("Failed to save operation history: %v", err) return } + defer file.Close() encoder := json.NewEncoder(file) for _, op := range operations { err := encoder.Encode(op)