...

Source file src/github.com/redis/go-redis/v9/internal/pool/main_test.go

Documentation: github.com/redis/go-redis/v9/internal/pool

     1  package pool_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net"
     7  	"sync"
     8  	"syscall"
     9  	"testing"
    10  	"time"
    11  
    12  	. "github.com/bsm/ginkgo/v2"
    13  	. "github.com/bsm/gomega"
    14  )
    15  
    16  func TestGinkgoSuite(t *testing.T) {
    17  	RegisterFailHandler(Fail)
    18  	RunSpecs(t, "pool")
    19  }
    20  
    21  func perform(n int, cbs ...func(int)) {
    22  	var wg sync.WaitGroup
    23  	for _, cb := range cbs {
    24  		for i := 0; i < n; i++ {
    25  			wg.Add(1)
    26  			go func(cb func(int), i int) {
    27  				defer GinkgoRecover()
    28  				defer wg.Done()
    29  
    30  				cb(i)
    31  			}(cb, i)
    32  		}
    33  	}
    34  	wg.Wait()
    35  }
    36  
    37  func dummyDialer(context.Context) (net.Conn, error) {
    38  	return newDummyConn(), nil
    39  }
    40  
    41  func newDummyConn() net.Conn {
    42  	return &dummyConn{
    43  		rawConn: new(dummyRawConn),
    44  	}
    45  }
    46  
    47  var (
    48  	_ net.Conn     = (*dummyConn)(nil)
    49  	_ syscall.Conn = (*dummyConn)(nil)
    50  )
    51  
    52  type dummyConn struct {
    53  	rawConn *dummyRawConn
    54  }
    55  
    56  func (d *dummyConn) SyscallConn() (syscall.RawConn, error) {
    57  	return d.rawConn, nil
    58  }
    59  
    60  var errDummy = fmt.Errorf("dummyConn err")
    61  
    62  func (d *dummyConn) Read(b []byte) (n int, err error) {
    63  	return 0, errDummy
    64  }
    65  
    66  func (d *dummyConn) Write(b []byte) (n int, err error) {
    67  	return 0, errDummy
    68  }
    69  
    70  func (d *dummyConn) Close() error {
    71  	d.rawConn.Close()
    72  	return nil
    73  }
    74  
    75  func (d *dummyConn) LocalAddr() net.Addr {
    76  	return &net.TCPAddr{}
    77  }
    78  
    79  func (d *dummyConn) RemoteAddr() net.Addr {
    80  	return &net.TCPAddr{}
    81  }
    82  
    83  func (d *dummyConn) SetDeadline(t time.Time) error {
    84  	return nil
    85  }
    86  
    87  func (d *dummyConn) SetReadDeadline(t time.Time) error {
    88  	return nil
    89  }
    90  
    91  func (d *dummyConn) SetWriteDeadline(t time.Time) error {
    92  	return nil
    93  }
    94  
    95  var _ syscall.RawConn = (*dummyRawConn)(nil)
    96  
    97  type dummyRawConn struct {
    98  	mu     sync.Mutex
    99  	closed bool
   100  }
   101  
   102  func (d *dummyRawConn) Control(f func(fd uintptr)) error {
   103  	return nil
   104  }
   105  
   106  func (d *dummyRawConn) Read(f func(fd uintptr) (done bool)) error {
   107  	d.mu.Lock()
   108  	defer d.mu.Unlock()
   109  	if d.closed {
   110  		return fmt.Errorf("dummyRawConn closed")
   111  	}
   112  	return nil
   113  }
   114  
   115  func (d *dummyRawConn) Write(f func(fd uintptr) (done bool)) error {
   116  	return nil
   117  }
   118  
   119  func (d *dummyRawConn) Close() {
   120  	d.mu.Lock()
   121  	d.closed = true
   122  	d.mu.Unlock()
   123  }
   124  

View as plain text