Browse Source

rtmp: improve tests

pull/1060/head
aler9 3 years ago
parent
commit
2a0567ab4a
  1. 145
      internal/rtmp/conn_test.go

145
internal/rtmp/conn_test.go

@ -49,6 +49,8 @@ func getTcURL(u string) string { @@ -49,6 +49,8 @@ func getTcURL(u string) string {
}
func TestClientHandshake(t *testing.T) {
for _, ca := range []string{"read", "publish"} {
t.Run(ca, func(t *testing.T) {
ln, err := net.Listen("tcp", "127.0.0.1:9121")
require.NoError(t, err)
defer ln.Close()
@ -152,6 +154,7 @@ func TestClientHandshake(t *testing.T) { @@ -152,6 +154,7 @@ func TestClientHandshake(t *testing.T) {
})
require.NoError(t, err)
if ca == "read" {
// C->S create stream
msg, err = mrw.Read()
require.NoError(t, err)
@ -213,6 +216,89 @@ func TestClientHandshake(t *testing.T) { @@ -213,6 +216,89 @@ func TestClientHandshake(t *testing.T) {
},
})
require.NoError(t, err)
} else {
// C->S releaseStream
msg, err = mrw.Read()
require.NoError(t, err)
require.Equal(t, &message.MsgCommandAMF0{
ChunkStreamID: 3,
Payload: []interface{}{
"releaseStream",
float64(2),
nil,
"",
},
}, msg)
// C->S FCPublish
msg, err = mrw.Read()
require.NoError(t, err)
require.Equal(t, &message.MsgCommandAMF0{
ChunkStreamID: 3,
Payload: []interface{}{
"FCPublish",
float64(3),
nil,
"",
},
}, msg)
// C->S createStream
msg, err = mrw.Read()
require.NoError(t, err)
require.Equal(t, &message.MsgCommandAMF0{
ChunkStreamID: 3,
Payload: []interface{}{
"createStream",
float64(4),
nil,
},
}, msg)
// S->C result
err = mrw.Write(&message.MsgCommandAMF0{
ChunkStreamID: 3,
Payload: []interface{}{
"_result",
float64(4),
nil,
float64(1),
},
})
require.NoError(t, err)
// C->S publish
msg, err = mrw.Read()
require.NoError(t, err)
require.Equal(t, &message.MsgCommandAMF0{
ChunkStreamID: 4,
MessageStreamID: 16777216,
Payload: []interface{}{
"publish",
float64(5),
nil,
"",
"stream",
},
}, msg)
// S->C onStatus
err = mrw.Write(&message.MsgCommandAMF0{
ChunkStreamID: 5,
MessageStreamID: 16777216,
Payload: []interface{}{
"onStatus",
float64(5),
nil,
flvio.AMFMap{
{K: "level", V: "status"},
{K: "code", V: "NetStream.Publish.Start"},
{K: "description", V: "publish start"},
},
},
})
require.NoError(t, err)
}
close(done)
}()
@ -225,13 +311,17 @@ func TestClientHandshake(t *testing.T) { @@ -225,13 +311,17 @@ func TestClientHandshake(t *testing.T) {
defer nconn.Close()
conn := NewClientConn(nconn, u)
err = conn.ClientHandshake(true)
err = conn.ClientHandshake(ca == "read")
require.NoError(t, err)
<-done
})
}
}
func TestServerHandshake(t *testing.T) {
for _, ca := range []string{"read", "publish"} {
t.Run(ca, func(t *testing.T) {
ln, err := net.Listen("tcp", "127.0.0.1:9121")
require.NoError(t, err)
defer ln.Close()
@ -352,6 +442,50 @@ func TestServerHandshake(t *testing.T) { @@ -352,6 +442,50 @@ func TestServerHandshake(t *testing.T) {
})
require.NoError(t, err)
if ca == "read" {
// C->S createStream
err = mrw.Write(&message.MsgCommandAMF0{
ChunkStreamID: 3,
Payload: []interface{}{
"createStream",
float64(2),
nil,
},
})
require.NoError(t, err)
// S->C result
msg, err = mrw.Read()
require.NoError(t, err)
require.Equal(t, &message.MsgCommandAMF0{
ChunkStreamID: 3,
Payload: []interface{}{
"_result",
float64(2),
nil,
float64(1),
},
}, msg)
// C->S user control set buffer length
err = mrw.Write(&message.MsgUserControlSetBufferLength{
BufferLength: 0x64,
})
require.NoError(t, err)
// C->S play
err = mrw.Write(&message.MsgCommandAMF0{
ChunkStreamID: 4,
MessageStreamID: 16777216,
Payload: []interface{}{
"play",
float64(0),
nil,
"",
},
})
require.NoError(t, err)
} else {
// C->S releaseStream
err = mrw.Write(&message.MsgCommandAMF0{
ChunkStreamID: 3,
@ -402,19 +536,22 @@ func TestServerHandshake(t *testing.T) { @@ -402,19 +536,22 @@ func TestServerHandshake(t *testing.T) {
// C->S publish
err = mrw.Write(&message.MsgCommandAMF0{
ChunkStreamID: 8,
MessageStreamID: 1,
ChunkStreamID: 4,
MessageStreamID: 16777216,
Payload: []interface{}{
"publish",
float64(5),
nil,
"",
"live",
"stream",
},
})
require.NoError(t, err)
}
<-done
})
}
}
func TestReadTracks(t *testing.T) {

Loading…
Cancel
Save