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  }