6 changed files with 356 additions and 22 deletions
@ -0,0 +1,153 @@
@@ -0,0 +1,153 @@
|
||||
package rawmessage |
||||
|
||||
import ( |
||||
"bufio" |
||||
"bytes" |
||||
"io" |
||||
"testing" |
||||
|
||||
"github.com/aler9/rtsp-simple-server/internal/rtmp/chunk" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
type writableChunk interface { |
||||
Write(w io.Writer) error |
||||
} |
||||
|
||||
type sequenceEntry struct { |
||||
chunk writableChunk |
||||
msg *Message |
||||
} |
||||
|
||||
func TestReader(t *testing.T) { |
||||
testSequence := func(t *testing.T, seq []sequenceEntry) { |
||||
var buf bytes.Buffer |
||||
r := NewReader(bufio.NewReader(&buf)) |
||||
|
||||
for _, entry := range seq { |
||||
err := entry.chunk.Write(&buf) |
||||
require.NoError(t, err) |
||||
msg, err := r.Read() |
||||
require.NoError(t, err) |
||||
require.Equal(t, entry.msg, msg) |
||||
} |
||||
} |
||||
|
||||
t.Run("chunk0 + chunk1", func(t *testing.T) { |
||||
testSequence(t, []sequenceEntry{ |
||||
{ |
||||
&chunk.Chunk0{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
BodyLen: 64, |
||||
Body: bytes.Repeat([]byte{0x02}, 64), |
||||
}, |
||||
&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x02}, 64), |
||||
}, |
||||
}, |
||||
{ |
||||
&chunk.Chunk1{ |
||||
ChunkStreamID: 27, |
||||
TimestampDelta: 15, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
BodyLen: 64, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, |
||||
&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576 + 15, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, |
||||
}, |
||||
}) |
||||
}) |
||||
|
||||
t.Run("chunk0 + chunk2 + chunk3", func(t *testing.T) { |
||||
testSequence(t, []sequenceEntry{ |
||||
{ |
||||
&chunk.Chunk0{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
BodyLen: 64, |
||||
Body: bytes.Repeat([]byte{0x02}, 64), |
||||
}, |
||||
&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x02}, 64), |
||||
}, |
||||
}, |
||||
{ |
||||
&chunk.Chunk2{ |
||||
ChunkStreamID: 27, |
||||
TimestampDelta: 15, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, |
||||
&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576 + 15, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, |
||||
}, |
||||
{ |
||||
&chunk.Chunk3{ |
||||
ChunkStreamID: 27, |
||||
Body: bytes.Repeat([]byte{0x04}, 64), |
||||
}, |
||||
&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576 + 15 + 15, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x04}, 64), |
||||
}, |
||||
}, |
||||
}) |
||||
}) |
||||
|
||||
t.Run("chunk0 + chunk3", func(t *testing.T) { |
||||
var buf bytes.Buffer |
||||
r := NewReader(bufio.NewReader(&buf)) |
||||
|
||||
err := chunk.Chunk0{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
BodyLen: 192, |
||||
Body: bytes.Repeat([]byte{0x03}, 128), |
||||
}.Write(&buf) |
||||
require.NoError(t, err) |
||||
|
||||
err = chunk.Chunk3{ |
||||
ChunkStreamID: 27, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}.Write(&buf) |
||||
require.NoError(t, err) |
||||
|
||||
msg, err := r.Read() |
||||
require.NoError(t, err) |
||||
require.Equal(t, &Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x03}, 192), |
||||
}, msg) |
||||
}) |
||||
} |
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
package rawmessage |
||||
|
||||
import ( |
||||
"bufio" |
||||
"bytes" |
||||
"testing" |
||||
|
||||
"github.com/aler9/rtsp-simple-server/internal/rtmp/chunk" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
func TestWriter(t *testing.T) { |
||||
t.Run("chunk0 + chunk1", func(t *testing.T) { |
||||
var buf bytes.Buffer |
||||
br := bufio.NewReader(&buf) |
||||
w := NewWriter(&buf) |
||||
|
||||
err := w.Write(&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
var c0 chunk.Chunk0 |
||||
err = c0.Read(br, 128) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk0{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
BodyLen: 64, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, c0) |
||||
|
||||
err = w.Write(&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576 + 15, |
||||
Type: chunk.MessageTypeSetWindowAckSize, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x04}, 64), |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
var c1 chunk.Chunk1 |
||||
err = c1.Read(br, 128) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk1{ |
||||
ChunkStreamID: 27, |
||||
TimestampDelta: 15, |
||||
Type: chunk.MessageTypeSetWindowAckSize, |
||||
BodyLen: 64, |
||||
Body: bytes.Repeat([]byte{0x04}, 64), |
||||
}, c1) |
||||
}) |
||||
|
||||
t.Run("chunk0 + chunk2 + chunk3", func(t *testing.T) { |
||||
var buf bytes.Buffer |
||||
br := bufio.NewReader(&buf) |
||||
w := NewWriter(&buf) |
||||
|
||||
err := w.Write(&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
var c0 chunk.Chunk0 |
||||
err = c0.Read(br, 128) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk0{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
BodyLen: 64, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, c0) |
||||
|
||||
err = w.Write(&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576 + 15, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x04}, 64), |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
var c2 chunk.Chunk2 |
||||
err = c2.Read(br, 64) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk2{ |
||||
ChunkStreamID: 27, |
||||
TimestampDelta: 15, |
||||
Body: bytes.Repeat([]byte{0x04}, 64), |
||||
}, c2) |
||||
|
||||
err = w.Write(&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576 + 15 + 15, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x05}, 64), |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
var c3 chunk.Chunk3 |
||||
err = c3.Read(br, 64) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk3{ |
||||
ChunkStreamID: 27, |
||||
Body: bytes.Repeat([]byte{0x05}, 64), |
||||
}, c3) |
||||
}) |
||||
|
||||
t.Run("chunk0 + chunk3", func(t *testing.T) { |
||||
var buf bytes.Buffer |
||||
br := bufio.NewReader(&buf) |
||||
w := NewWriter(&buf) |
||||
|
||||
err := w.Write(&Message{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
Body: bytes.Repeat([]byte{0x03}, 192), |
||||
}) |
||||
require.NoError(t, err) |
||||
|
||||
var c0 chunk.Chunk0 |
||||
err = c0.Read(br, 128) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk0{ |
||||
ChunkStreamID: 27, |
||||
Timestamp: 18576, |
||||
Type: chunk.MessageTypeSetPeerBandwidth, |
||||
MessageStreamID: 3123, |
||||
BodyLen: 192, |
||||
Body: bytes.Repeat([]byte{0x03}, 128), |
||||
}, c0) |
||||
|
||||
var c3 chunk.Chunk3 |
||||
err = c3.Read(br, 64) |
||||
require.NoError(t, err) |
||||
require.Equal(t, chunk.Chunk3{ |
||||
ChunkStreamID: 27, |
||||
Body: bytes.Repeat([]byte{0x03}, 64), |
||||
}, c3) |
||||
}) |
||||
} |
Loading…
Reference in new issue