github.com/jshiv/can-go@v0.2.1-0.20210224011015-069e90e90bdf/pkg/socketcan/dial_test.go (about) 1 package socketcan 2 3 import ( 4 "context" 5 "net" 6 "testing" 7 "time" 8 9 "go.einride.tech/can" 10 "golang.org/x/sync/errgroup" 11 "gotest.tools/v3/assert" 12 ) 13 14 func TestDial_TCP(t *testing.T) { 15 lis, err := net.Listen("tcp", "localhost:0") 16 assert.NilError(t, err) 17 var g errgroup.Group 18 g.Go(func() error { 19 conn, err := lis.Accept() 20 if err != nil { 21 return err 22 } 23 return conn.Close() 24 }) 25 conn, err := Dial("tcp", lis.Addr().String()) 26 assert.NilError(t, err) 27 assert.NilError(t, conn.Close()) 28 assert.NilError(t, g.Wait()) 29 } 30 31 func TestDialContext_TCP(t *testing.T) { 32 lis, err := net.Listen("tcp", "localhost:0") 33 assert.NilError(t, err) 34 var g errgroup.Group 35 g.Go(func() error { 36 conn, err := lis.Accept() 37 if err != nil { 38 return err 39 } 40 return conn.Close() 41 }) 42 ctx, done := context.WithTimeout(context.Background(), time.Second) 43 defer done() 44 conn, err := DialContext(ctx, "tcp", lis.Addr().String()) 45 assert.NilError(t, err) 46 assert.NilError(t, conn.Close()) 47 assert.NilError(t, g.Wait()) 48 } 49 50 func TestConn_TransmitReceiveTCP(t *testing.T) { 51 // Given: A TCP listener that writes a frame on an accepted connection 52 lis, err := net.Listen("tcp", "localhost:0") 53 assert.NilError(t, err) 54 var g errgroup.Group 55 frame := can.Frame{ID: 42, Length: 5, Data: can.Data{'H', 'e', 'l', 'l', 'o'}} 56 g.Go(func() error { 57 conn, err := lis.Accept() 58 if err != nil { 59 return err 60 } 61 tr := NewTransmitter(conn) 62 ctx, done := context.WithTimeout(context.Background(), time.Second) 63 defer done() 64 if err := tr.TransmitFrame(ctx, frame); err != nil { 65 return err 66 } 67 return conn.Close() 68 }) 69 // When: We connect to the listener 70 ctx, done := context.WithTimeout(context.Background(), time.Second) 71 defer done() 72 conn, err := DialContext(ctx, "tcp", lis.Addr().String()) 73 assert.NilError(t, err) 74 rec := NewReceiver(conn) 75 assert.Assert(t, rec.Receive()) 76 assert.Assert(t, !rec.HasErrorFrame()) 77 assert.DeepEqual(t, frame, rec.Frame()) 78 assert.NilError(t, conn.Close()) 79 assert.NilError(t, g.Wait()) 80 }