github.com/bluenviron/gomavlib/v2@v2.2.1-0.20240308101627-2c07e3da629c/pkg/reconnector/reconnector_test.go (about) 1 package reconnector 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "io" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 ) 12 13 type dummyRWC struct { 14 bytes.Buffer 15 closed bool 16 } 17 18 func (dummyRWC) Close() error { 19 return nil 20 } 21 22 func (d *dummyRWC) Read(p []byte) (int, error) { 23 return d.Buffer.Read(p) 24 } 25 26 func (d *dummyRWC) Write(p []byte) (int, error) { 27 if d.closed { 28 return 0, fmt.Errorf("closed") 29 } 30 return d.Buffer.Write(p) 31 } 32 33 func TestReconnector(t *testing.T) { 34 var buf dummyRWC 35 36 r := New( 37 func(ctx context.Context) (io.ReadWriteCloser, error) { 38 return &buf, nil 39 }, 40 ) 41 42 conn, ok := r.Reconnect() 43 require.Equal(t, true, ok) 44 45 buf.Buffer.Write([]byte{1}) 46 47 recv := make([]byte, 1) 48 _, err := conn.Read(recv) 49 require.NoError(t, err) 50 require.Equal(t, byte(1), recv[0]) 51 52 _, err = conn.Read(recv) 53 require.Equal(t, io.EOF, err) 54 55 buf.closed = true 56 _, err = conn.Write(recv) 57 require.Error(t, err) 58 59 _, ok = r.Reconnect() 60 require.Equal(t, true, ok) 61 62 r.Close() 63 64 _, ok = r.Reconnect() 65 require.Equal(t, false, ok) 66 }