func TestParserReturnsMultiStreamsWhenNoStreamsAlreadyExist(t *testing.T) { parser := chunk.NewParser(nil) stream, err := parser.Stream(1, 2, 3) assert.Nil(t, err) assert.NotNil(t, stream) }
func TestParserReturnsNewSingleChunkStreams(t *testing.T) { parser := chunk.NewParser(nil) stream, err := parser.Stream(1) assert.NotNil(t, stream) assert.Nil(t, err) }
func TestParserDoesNotReturnMultiStreamsWhenStreamsAlreadyExist(t *testing.T) { parser := chunk.NewParser(nil) parser.Stream(1) // take out stream ID 1 multiStream, err := parser.Stream(1, 2) assert.Nil(t, multiStream) assert.Equal(t, "rtmp/chunk: stream 1 already exists", err.Error()) }
func TestParserReturnsConsistentChunkStreams(t *testing.T) { parser := chunk.NewParser(nil) s1, _ := parser.Stream(1) s2, _ := parser.Stream(1) assert.True(t, reflect.ValueOf(s1).Pointer() == reflect.ValueOf(s2).Pointer(), "rtmp/chunk: parser should return identical streams, but pointer values differed") }
func newStreamWithChunk(streamId uint32, chunks ...*chunk.Chunk) chunk.Stream { buf := new(bytes.Buffer) for _, c := range chunks { chunk.NewWriter(buf, chunk.DefaultReadSize).Write(c) } parser := chunk.NewParser(chunk.NewReader( buf, chunk.DefaultReadSize, chunk.NoopNormalizer, )) go parser.Recv() st, _ := parser.Stream(streamId) return st }
func TestStreamClosesAfterSignalSent(t *testing.T) { errs := make(chan error, 2) chunks := make(chan *chunk.Chunk) reader := &MockReader{} reader.On("Recv").Return().Once() reader.On("Chunks").Return(chunks) reader.On("Errs").Return(errs) reader.On("Close").Return().Once() p := chunk.NewParser(reader) go p.Recv() p.Close() // reader.AssertExpectations(t) }
func TestStreamPropogatesErrors(t *testing.T) { errs := make(chan error, 2) chunks := make(chan *chunk.Chunk) reader := &MockReader{} reader.On("Recv").Return().Once() reader.On("Chunks").Return(chunks) reader.On("Errs").Return(errs) reader.On("Close").Return() p := chunk.NewParser(reader) errs <- errors.New("testing: some error") go p.Recv() err := <-p.Errs() p.Close() // reader.AssertExpectations(t) assert.Equal(t, "testing: some error", err.Error()) }
// New instantiates and returns a pointer to a new instance of type Client. The // client is initialized with the given connection. func New(conn io.ReadWriter) *Client { chunkWriter := chunk.NewWriter(conn, 4096) chunks := chunk.NewParser(chunk.NewReader( conn, chunk.DefaultReadSize, chunk.NewNormalizer(), )) controlChunks, _ := chunks.Stream(2) netChunks, _ := chunks.Stream(3, 4, 5, 8) return &Client{ chunks: chunks, controlStream: control.NewStream( controlChunks, chunkWriter, control.NewParser(), control.NewChunker(), ), cmdManager: cmd.New(netChunks, chunkWriter), Conn: conn, } }
func TestNewStreamReturnsNewStreams(t *testing.T) { p := chunk.NewParser(&MockReader{}) assert.IsType(t, &chunk.Parser{}, p) }