7 "github.com/stretchr/testify/require"
10 func TestQueuedAppendResumesWithoutADuplicate(t *testing.T) {
12 memory, err := openMemory(t.Context(), dir, newTestClock().Now, newFakeSummarizer(), discardLog())
13 require.NoError(t, err)
17 first, err := memory.AppendOnce("user", "Record the gate size.", nil, func(id int) error {
20 require.Equal(t, 0, memory.log.Len())
24 require.NoError(t, err)
25 require.NoError(t, memory.Close())
27 memory, err = openMemory(t.Context(), dir, newTestClock().Now, newFakeSummarizer(), discardLog())
28 require.NoError(t, err)
31 require.NoError(t, memory.Close())
34 second, err := memory.AppendOnce("user", first.Text, saved, func(int) error {
35 require.FailNow(t, "a recorded message must not be prepared again")
39 require.NoError(t, err)
40 require.Equal(t, first, second)
41 require.Equal(t, 1, memory.Len())
44 func TestQueuedAppendRetriesAnUnwrittenPreparedMessage(t *testing.T) {
45 memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer(), discardLog())
46 require.NoError(t, err)
49 require.NoError(t, memory.Close())
52 failure := errors.New("fake queue write failure")
56 _, err = memory.AppendOnce("work", "[Garden] Check the gate.", nil, func(id int) error {
61 require.ErrorIs(t, err, failure)
62 require.Equal(t, 0, memory.Len())
64 message, err := memory.AppendOnce("work", "[Garden] Check the gate.", saved, func(id int) error {
65 require.Equal(t, *saved, id)
69 require.NoError(t, err)
70 require.Equal(t, 0, message.ID)
71 require.Equal(t, 1, memory.Len())
74 func TestQueuedAppendRefusesAnInvalidReceipt(t *testing.T) {
75 memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer(), discardLog())
76 require.NoError(t, err)
79 require.NoError(t, memory.Close())
82 _, err = memory.Append("user", "Keep the original.")
83 require.NoError(t, err)
85 testCases := []struct {
91 name: "receipt points to different text",
93 cause: "does not match",
96 name: "receipt skips a log position",
98 cause: "beyond the log",
101 name: "receipt has a negative position",
103 cause: "read queued message",
106 for _, tc := range testCases {
107 t.Run(tc.name, func(t *testing.T) {
108 _, err := memory.AppendOnce("user", "Other text.", &tc.id, func(int) error {
109 require.FailNow(t, "an invalid receipt must not be prepared")
113 require.ErrorContains(t, err, tc.cause)
114 require.Equal(t, 1, memory.Len())