carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package registry
2
3import (
4 "errors"
5 "path/filepath"
6 "testing"
7)
8
9func TestPlan12RecoveryIntentJournalDurable(t *testing.T) {
10 path := filepath.Join(t.TempDir(), "registry.db")
11 r, err := Open(path)
12 if err != nil {
13 t.Fatal(err)
14 }
15 if err = r.BeginRecoveryHandover(t.Context(), "intent", "before"); err != nil {
16 t.Fatal(err)
17 }
18 if err = r.Close(); err != nil {
19 t.Fatal(err)
20 }
21 r, err = Open(path)
22 if err != nil {
23 t.Fatal(err)
24 }
25 defer r.Close()
26 pending, err := r.PendingRecoveryHandovers(t.Context())
27 if err != nil || pending["intent"] != "before" {
28 t.Fatal(pending, err)
29 }
30 if err = r.ReviseRecoveryHandover(t.Context(), "intent", "before", "after"); err != nil {
31 t.Fatal(err)
32 }
33 if err = r.ReviseRecoveryHandover(t.Context(), "intent", "before", "stale"); !errors.Is(err, ErrClaimOwnership) {
34 t.Fatal("stale revision", err)
35 }
36 if err = r.CompleteRecoveryHandover(t.Context(), "intent", "before"); !errors.Is(err, ErrClaimOwnership) {
37 t.Fatal("stale completion", err)
38 }
39 if err = r.CompleteRecoveryHandover(t.Context(), "intent", "after"); err != nil {
40 t.Fatal(err)
41 }
42 pending, err = r.PendingRecoveryHandovers(t.Context())
43 if err != nil || len(pending) != 0 {
44 t.Fatal(pending, err)
45 }
46 if err = r.ReviseRecoveryHandover(t.Context(), "intent", "after", "reopened"); !errors.Is(err, ErrClaimOwnership) {
47 t.Fatal("reopened completed intent", err)
48 }
49}
50