Example #1
0
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())
}
Example #2
0
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)
}
Example #3
0
// 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),
	}
}
Example #4
0
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)
}
Example #5
0
func TestNewStreamConstructsNewStreams(t *testing.T) {
	s := data.NewStream(make(chan *chunk.Chunk), chunk.NoopWriter)

	assert.IsType(t, new(data.Stream), s)
}