1package runutil 2 3import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/go-kit/log/level" 9 "github.com/stretchr/testify/assert" 10) 11 12func TestCloseWithLogOnErr(t *testing.T) { 13 t.Run("With non-close error", func(t *testing.T) { 14 closer := fakeCloser{err: fmt.Errorf("an error")} 15 logger := fakeLogger{} 16 17 CloseWithLogOnErr(&logger, closer, "closing failed") 18 19 assert.Equal(t, []interface{}{ 20 "level", level.WarnValue(), "msg", "detected close error", "err", "closing failed: an error", 21 }, logger.keyvals) 22 }) 23 24 t.Run("With no error", func(t *testing.T) { 25 closer := fakeCloser{} 26 logger := fakeLogger{} 27 28 CloseWithLogOnErr(&logger, closer, "closing failed") 29 30 assert.Empty(t, logger.keyvals) 31 }) 32 33 t.Run("With closed error", func(t *testing.T) { 34 closer := fakeCloser{err: os.ErrClosed} 35 logger := fakeLogger{} 36 37 CloseWithLogOnErr(&logger, closer, "closing failed") 38 39 assert.Empty(t, logger.keyvals) 40 }) 41} 42 43type fakeCloser struct { 44 err error 45} 46 47func (c fakeCloser) Close() error { 48 return c.err 49} 50 51type fakeLogger struct { 52 keyvals []interface{} 53} 54 55func (l *fakeLogger) Log(keyvals ...interface{}) error { 56 l.keyvals = keyvals 57 return nil 58} 59