gitlab.com/beacon-software/gadget@v0.0.0-20181217202115-54565ea1ed5e/buffer/mockconnection.go (about)

     1  package buffer
     2  
     3  import (
     4  	"net"
     5  
     6  	"gitlab.com/beacon-software/gadget/collection"
     7  	"gitlab.com/beacon-software/gadget/errors"
     8  )
     9  
    10  // MockConnection is used for testing
    11  type MockConnection struct {
    12  	ReadMessages  collection.Stack
    13  	ReadFunc      func(mu MarshalUnmarshal) error
    14  	WriteMessages collection.Stack
    15  	WriteError    error
    16  	IsClosed      bool
    17  }
    18  
    19  // NewMockConnection returns a MockConnection
    20  func NewMockConnection() *MockConnection {
    21  	return &MockConnection{
    22  		ReadMessages:  collection.NewStack(),
    23  		WriteMessages: collection.NewStack(),
    24  	}
    25  }
    26  
    27  // GetConnection is a no-op
    28  func (conn *MockConnection) GetConnection() net.Conn {
    29  	return nil
    30  }
    31  
    32  // GetConnectionInfo is always blank for the mock connection
    33  func (conn *MockConnection) GetConnectionInfo() string {
    34  	return ""
    35  }
    36  
    37  // Closed sets the MockConnection IsClosed to true
    38  func (conn *MockConnection) Closed() bool {
    39  	return conn.IsClosed
    40  }
    41  
    42  // Read either uses the ReadFunc or pops a message from the ReadMessages stack
    43  func (conn *MockConnection) Read(mu MarshalUnmarshal) errors.TracerError {
    44  	if nil != conn.ReadFunc {
    45  		return errors.Wrap(conn.ReadFunc(mu))
    46  	}
    47  	v, e := conn.ReadMessages.Pop()
    48  	var message MarshalUnmarshal
    49  	var err error
    50  	var ok bool
    51  	if nil == e {
    52  		message, ok = v.(MarshalUnmarshal)
    53  		if !ok {
    54  			err, _ = v.(error)
    55  		} else {
    56  			data, _ := message.MarshalBinary()
    57  			err = mu.UnmarshalBinary(data)
    58  		}
    59  	}
    60  	return errors.Wrap(err)
    61  }
    62  
    63  // Write pushed the message into a Stack and returns the WriteError on the MockConnection
    64  func (conn *MockConnection) Write(mu MarshalUnmarshal) errors.TracerError {
    65  	conn.WriteMessages.Push(mu)
    66  	return errors.Wrap(conn.WriteError)
    67  }
    68  
    69  // Close sets IsClosed to true on the MockConnection
    70  func (conn *MockConnection) Close() errors.TracerError {
    71  	conn.IsClosed = true
    72  	return nil
    73  }