github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/helper/bufconndialer/bufconndialer_test.go (about)

     1  package bufconndialer
     2  
     3  import (
     4  	"io"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  // TestBufConnDialer asserts that bufconndialer creates a dialer connected to a
    11  // listener.
    12  func TestBufConnDialer(t *testing.T) {
    13  	listener, dialer := New()
    14  
    15  	cleanup := make(chan struct{})
    16  	go func() {
    17  		defer close(cleanup)
    18  		for {
    19  			conn, err := listener.Accept()
    20  			if err != nil {
    21  				// google.golang.org/grpc/test/bufconn.Listener doesn't
    22  				// return a net.ErrClosed so we have to compare strings
    23  				if err.Error() == "closed" {
    24  					return
    25  				}
    26  
    27  				t.Errorf("error accepting connection: %v", err)
    28  				return
    29  			}
    30  
    31  			n, err := conn.Write([]byte("ok"))
    32  			if err != nil {
    33  				t.Errorf("error writing to connection after %d bytes: %v", n, err)
    34  				return
    35  			}
    36  			if err := conn.Close(); err != nil {
    37  				t.Errorf("error closing connection: %v", err)
    38  				return
    39  			}
    40  		}
    41  	}()
    42  
    43  	conn, err := dialer.Dial("anything", "goes")
    44  	require.NoError(t, err)
    45  
    46  	buf := make([]byte, 2)
    47  	_, err = conn.Read(buf)
    48  	require.NoError(t, err)
    49  	require.Equal(t, "ok", string(buf))
    50  
    51  	_, err = conn.Read(buf)
    52  	require.EqualError(t, err, io.EOF.Error())
    53  
    54  	listener.Close()
    55  	<-cleanup
    56  }