github.com/whiteboxio/flow@v0.0.3-0.20190918184116-508d75d68a2c/pkg/corev1alpha1/actor/main_test.go (about)

     1  package actor
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  	"net"
     8  	"net/http"
     9  	"sync"
    10  	"time"
    11  
    12  	core "github.com/awesome-flow/flow/pkg/corev1alpha1"
    13  )
    14  
    15  func sts2name(sts core.MsgStatus) string {
    16  	switch sts {
    17  	case core.MsgStatusDone:
    18  		return "MsgStatusDone"
    19  	case core.MsgStatusFailed:
    20  		return "MsgStatusFailed"
    21  	case core.MsgStatusTimedOut:
    22  		return "MsgStatusTimedOut"
    23  	case core.MsgStatusUnroutable:
    24  		return "MsgStatusUnroutable"
    25  	case core.MsgStatusThrottled:
    26  		return "MsgStatusThrottled"
    27  	default:
    28  		return "Unknown"
    29  	}
    30  }
    31  
    32  type testAddr struct {
    33  	network string
    34  	address string
    35  }
    36  
    37  var _ net.Addr = (*testAddr)(nil)
    38  
    39  func newTestAddr(network, address string) *testAddr {
    40  	return &testAddr{
    41  		network: network,
    42  		address: address,
    43  	}
    44  }
    45  
    46  func (a *testAddr) Network() string {
    47  	return a.network
    48  }
    49  
    50  func (a *testAddr) String() string {
    51  	return fmt.Sprintf("%s://%s", a.network, a.address)
    52  }
    53  
    54  type testConn struct {
    55  	buf        []byte
    56  	offset     int
    57  	lock       sync.Mutex
    58  	localaddr  net.Addr
    59  	remoteaddr net.Addr
    60  	closed     bool
    61  }
    62  
    63  var _ net.Conn = (*testConn)(nil)
    64  
    65  func min(a, b int) int {
    66  	if a < b {
    67  		return a
    68  	}
    69  	return b
    70  }
    71  
    72  func newTestConn(localaddr, remoteaddr net.Addr) *testConn {
    73  	return &testConn{
    74  		buf:        make([]byte, 0),
    75  		localaddr:  localaddr,
    76  		remoteaddr: remoteaddr,
    77  		closed:     false,
    78  	}
    79  }
    80  
    81  func (c *testConn) Read(b []byte) (int, error) {
    82  	c.lock.Lock()
    83  	defer c.lock.Unlock()
    84  
    85  	var err error
    86  	l := min(len(b), len(c.buf)-c.offset)
    87  	n := copy(b, c.buf[c.offset:c.offset+l+0])
    88  
    89  	c.offset += l
    90  	if c.offset == len(c.buf) {
    91  		err = io.EOF
    92  	}
    93  
    94  	return n, err
    95  }
    96  
    97  func (c *testConn) Write(b []byte) (int, error) {
    98  	c.lock.Lock()
    99  	defer c.lock.Unlock()
   100  
   101  	c.buf = make([]byte, len(b))
   102  	n := copy(c.buf, b)
   103  
   104  	return n, nil
   105  }
   106  
   107  func (c *testConn) Close() error {
   108  	c.lock.Lock()
   109  	defer c.lock.Unlock()
   110  	c.closed = true
   111  
   112  	return nil
   113  }
   114  
   115  func (c *testConn) LocalAddr() net.Addr {
   116  	return c.localaddr
   117  }
   118  
   119  func (c *testConn) RemoteAddr() net.Addr {
   120  	return c.remoteaddr
   121  }
   122  
   123  func (c *testConn) SetDeadline(t time.Time) error {
   124  	return nil
   125  }
   126  
   127  func (c *testConn) SetReadDeadline(t time.Time) error {
   128  	return nil
   129  }
   130  
   131  func (c *testConn) SetWriteDeadline(t time.Time) error {
   132  	return nil
   133  }
   134  
   135  type testResponseWriter struct {
   136  	headers map[string][]string
   137  	status  int
   138  	bytes.Buffer
   139  }
   140  
   141  var _ http.ResponseWriter = (*testResponseWriter)(nil)
   142  
   143  func (rw *testResponseWriter) Header() http.Header {
   144  	return rw.headers
   145  }
   146  
   147  func (rw *testResponseWriter) WriteHeader(status int) {
   148  	rw.status = status
   149  }
   150  
   151  func eqErr(e1, e2 error) bool {
   152  	if e1 == nil || e2 == nil {
   153  		return e1 == e2
   154  	}
   155  	return e1.Error() == e2.Error()
   156  }