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  }