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 }