func TestRecvEmitsAnErrorWhenNotSuccessful(t *testing.T) { s := data.NewStream(make(chan *chunk.Chunk), chunk.NoopWriter) parser := &MockParser{} parser.On("Parse", mock.Anything).Return(nil, errors.New("foo")).Once() s.SetParser(parser) go s.Recv() s.Chunks() <- new(chunk.Chunk) assert.Equal(t, "foo", (<-s.Errs()).Error()) }
func TestRecvPushesDataWhenSuccessful(t *testing.T) { s := data.NewStream(make(chan *chunk.Chunk), chunk.NoopWriter) parser := &MockParser{} parser.On("Parse", mock.Anything).Return(new(data.Audio), nil).Once() s.SetParser(parser) go s.Recv() s.Chunks() <- new(chunk.Chunk) assert.Equal(t, new(data.Audio), <-s.In()) parser.AssertExpectations(t) }
// New returns a new instance of the *Manager type. It takes in an incoming // chunk stream, as well as a *chunk.Writer to read and write chunks from, // respectively. // // During initialization, this function instantiates new instances of the // NetConn, NetStream, and DataStream types, and attaches them the appropriate // channels (also instantiated by this function). // // All internal channels (including the closer) are instantiated at this time, // as well. func New(chunks chunk.Stream, writer chunk.Writer) *Manager { netConnChunks := make(chan *chunk.Chunk) dataStreamChunks := make(chan *chunk.Chunk) netStreamChunks := make(chan *chunk.Chunk) return &Manager{ chunks: chunks, closer: make(chan struct{}), channels: map[Gate]chan<- *chunk.Chunk{ NetConnGate: netConnChunks, DataStreamGate: dataStreamChunks, NetStreamGate: netStreamChunks, }, netConn: conn.NewNetConnection(netConnChunks, writer), dataStream: data.NewStream(dataStreamChunks, writer), netStream: stream.New(netStreamChunks, writer), } }
func TestRecvWritesToChunkWriter(t *testing.T) { buf := new(bytes.Buffer) writer := chunk.NewWriter(buf, 4096) ch := &chunk.Chunk{ Header: new(chunk.Header), Data: []byte{0x0, 0x1, 0x2, 0x3}, } d := new(MockData) d.On("Marshal").Return(ch, nil).Once() s := data.NewStream(make(chan *chunk.Chunk), writer) go s.Recv() err := s.Write(d) assert.Equal(t, []byte{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, }, buf.Bytes()) assert.Nil(t, err) }
func TestNewStreamConstructsNewStreams(t *testing.T) { s := data.NewStream(make(chan *chunk.Chunk), chunk.NoopWriter) assert.IsType(t, new(data.Stream), s) }