From dfcdc5ce20fb163a729efc0ea960480dff129eae Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 21 Jan 2025 12:10:58 +0900 Subject: state: store config in separate gob stream This enables early serialisation of config. Signed-off-by: Ophestra --- internal/state/state_test.go | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'internal/state/state_test.go') diff --git a/internal/state/state_test.go b/internal/state/state_test.go index b19c64b5..ee2a88cc 100644 --- a/internal/state/state_test.go +++ b/internal/state/state_test.go @@ -1,6 +1,9 @@ package state_test import ( + "bytes" + "encoding/gob" + "io" "math/rand/v2" "reflect" "slices" @@ -28,9 +31,12 @@ func testStore(t *testing.T, s state.Store) { tl ) - var tc [tl]state.State + var tc [tl]struct { + state state.State + ct bytes.Buffer + } for i := 0; i < tl; i++ { - makeState(t, &tc[i]) + makeState(t, &tc[i].state, &tc[i].ct) } do := func(aid int, f func(c state.Cursor)) { @@ -41,7 +47,7 @@ func testStore(t *testing.T, s state.Store) { insert := func(i, aid int) { do(aid, func(c state.Cursor) { - if err := c.Save(&tc[i]); err != nil { + if err := c.Save(&tc[i].state, &tc[i].ct); err != nil { t.Fatalf("Save(&tc[%v]): error = %v", i, err) } }) @@ -51,15 +57,17 @@ func testStore(t *testing.T, s state.Store) { do(aid, func(c state.Cursor) { if entries, err := c.Load(); err != nil { t.Fatalf("Load: error = %v", err) - } else if got, ok := entries[tc[i].ID]; !ok { + } else if got, ok := entries[tc[i].state.ID]; !ok { t.Fatalf("Load: entry %s missing", - &tc[i].ID) + &tc[i].state.ID) } else { - got.Time = tc[i].Time - if !reflect.DeepEqual(got, &tc[i]) { + got.Time = tc[i].state.Time + tc[i].state.Config = fst.Template() + if !reflect.DeepEqual(got, &tc[i].state) { t.Fatalf("Load: entry %s got %#v, want %#v", - &tc[i].ID, got, &tc[i]) + &tc[i].state.ID, got, &tc[i].state) } + tc[i].state.Config = nil } }) } @@ -104,7 +112,7 @@ func testStore(t *testing.T, s state.Store) { t.Run("clear aid 1", func(t *testing.T) { do(1, func(c state.Cursor) { - if err := c.Destroy(tc[insertEntryOtherApp].ID); err != nil { + if err := c.Destroy(tc[insertEntryOtherApp].state.ID); err != nil { t.Fatalf("Destroy: error = %v", err) } }) @@ -124,11 +132,13 @@ func testStore(t *testing.T, s state.Store) { }) } -func makeState(t *testing.T, s *state.State) { +func makeState(t *testing.T, s *state.State, ct io.Writer) { if err := fst.NewAppID(&s.ID); err != nil { t.Fatalf("cannot create dummy state: %v", err) } - s.Config = fst.Template() + if err := gob.NewEncoder(ct).Encode(fst.Template()); err != nil { + t.Fatalf("cannot encode dummy config: %v", err) + } s.PID = rand.Int() s.Time = time.Now() } -- cgit v1.3.1