github.com/projecteru2/core@v0.0.0-20240321043226-06bcc1c23f58/wal/wal_test.go (about) 1 package wal 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 "time" 8 9 "github.com/projecteru2/core/wal/kv" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestRecover(t *testing.T) { 15 var checked bool 16 check := func(interface{}) (bool, error) { 17 checked = true 18 return true, nil 19 } 20 21 var handled bool 22 handle := func(interface{}) (err error) { 23 handled = true 24 return 25 } 26 27 var encoded bool 28 encode := func(interface{}) (bs []byte, err error) { 29 encoded = true 30 return 31 } 32 33 var decoded bool 34 decode := func([]byte) (item interface{}, err error) { 35 decoded = true 36 return 37 } 38 39 path := "/tmp/wal.unitest.wal" 40 os.Remove(path) 41 42 var wal WAL 43 var err error 44 wal, err = NewHydro(path, time.Second) 45 assert.NoError(t, err) 46 defer wal.Close() 47 48 hydro, ok := wal.(*Hydro) 49 assert.True(t, ok) 50 assert.NotNil(t, hydro) 51 hydro.store = kv.NewMockedKV() 52 53 eventype := "create" 54 55 wal.Register(simpleEventHandler{ 56 event: eventype, 57 encode: encode, 58 decode: decode, 59 check: check, 60 handle: handle, 61 }) 62 63 wal.Log(eventype, struct{}{}) 64 65 wal.Recover(context.Background()) 66 assert.True(t, checked) 67 assert.True(t, handled) 68 assert.True(t, encoded) 69 assert.True(t, decoded) 70 } 71 72 // simpleEventHandler simply implements the EventHandler. 73 type simpleEventHandler struct { 74 event string 75 check func(raw interface{}) (bool, error) 76 encode func(interface{}) ([]byte, error) 77 decode func([]byte) (interface{}, error) 78 handle func(interface{}) error 79 } 80 81 // Event . 82 func (h simpleEventHandler) Typ() string { 83 return h.event 84 } 85 86 // Check . 87 func (h simpleEventHandler) Check(ctx context.Context, raw interface{}) (bool, error) { 88 return h.check(raw) 89 } 90 91 // Encode . 92 func (h simpleEventHandler) Encode(raw interface{}) ([]byte, error) { 93 return h.encode(raw) 94 } 95 96 // Decode . 97 func (h simpleEventHandler) Decode(bs []byte) (interface{}, error) { 98 return h.decode(bs) 99 } 100 101 // Handle . 102 func (h simpleEventHandler) Handle(ctx context.Context, raw interface{}) error { 103 return h.handle(raw) 104 }