github.com/MetalBlockchain/metalgo@v1.11.9/network/listener_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package network 5 6 import ( 7 "net" 8 "net/netip" 9 ) 10 11 var _ net.Listener = (*testListener)(nil) 12 13 type testListener struct { 14 ip netip.AddrPort 15 inbound chan net.Conn 16 closed chan struct{} 17 } 18 19 func newTestListener(ip netip.AddrPort) *testListener { 20 return &testListener{ 21 ip: ip, 22 inbound: make(chan net.Conn), 23 closed: make(chan struct{}), 24 } 25 } 26 27 func (l *testListener) Accept() (net.Conn, error) { 28 select { 29 case c := <-l.inbound: 30 return c, nil 31 case <-l.closed: 32 return nil, errClosed 33 } 34 } 35 36 func (l *testListener) Close() error { 37 close(l.closed) 38 return nil 39 } 40 41 func (l *testListener) Addr() net.Addr { 42 return &net.TCPAddr{ 43 IP: l.ip.Addr().AsSlice(), 44 Port: int(l.ip.Port()), 45 } 46 }