]> git.giacomolli.uk - onechat/blobdiff - syncer_test.go
Bind external events to permanent agent IDs
[onechat] / syncer_test.go
index d463eecbcf7a2babd89b3e22cd04d8c91df38378..65a96725ee02829ac9e4c94f954cc5423562ca5e 100644 (file)
@@ -2,6 +2,7 @@ package main
 
 import (
        "bufio"
+       "context"
        "errors"
        "fmt"
        "os"
@@ -76,16 +77,35 @@ func TestFlushWithoutWritesNeedsNoSync(t *testing.T) {
 }
 
 func TestAFailedSyncFailsEachLaterFlush(t *testing.T) {
+       failure := errors.New("disk error")
        s := newSyncer(func() error {
-               return errors.New("disk error")
+               return failure
        })
 
        s.Written()
-       require.ErrorContains(t, s.Flush(t.Context()), "disk error")
+       require.ErrorIs(t, s.Flush(t.Context()), failure)
 
        s.Written()
-       require.ErrorContains(t, s.Flush(t.Context()), "disk error")
-       require.ErrorContains(t, s.Close(), "disk error")
+       require.ErrorIs(t, s.Flush(t.Context()), failure)
+       require.ErrorIs(t, s.Close(), failure)
+}
+
+func TestFlushCancellationKeepsTheDirectContextError(t *testing.T) {
+       gate := newSyncerGatedSync()
+       s := newSyncer(gate.Sync)
+       s.Written()
+       gate.WaitStarted(t, 1)
+
+       ctx, cancel := context.WithCancel(t.Context())
+       defer cancel()
+
+       cancel()
+
+       err := s.Flush(ctx)
+       require.Equal(t, context.Canceled, err)
+
+       gate.Release()
+       require.NoError(t, s.Close())
 }
 
 func TestMemoryFlushSyncsTheChat(t *testing.T) {