mirror of
https://github.com/aler9/gortsplib
synced 2025-10-04 23:02:45 +08:00
improve tests
This commit is contained in:
@@ -25,9 +25,11 @@ var casesInterleavedFrame = []struct {
|
||||
}
|
||||
|
||||
func TestInterleavedFrameRead(t *testing.T) {
|
||||
// keep f global to make sure that all its fields are overridden.
|
||||
var f InterleavedFrame
|
||||
|
||||
for _, ca := range casesInterleavedFrame {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
var f InterleavedFrame
|
||||
f.Payload = make([]byte, 1024)
|
||||
err := f.Read(bufio.NewReader(bytes.NewBuffer(ca.enc)))
|
||||
require.NoError(t, err)
|
||||
@@ -48,3 +50,34 @@ func TestInterleavedFrameWrite(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestInterleavedFrameReadErrors(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
byts []byte
|
||||
}{
|
||||
{
|
||||
"empty",
|
||||
[]byte{},
|
||||
},
|
||||
{
|
||||
"invalid magic byte",
|
||||
[]byte{0x55, 0x00, 0x00, 0x00},
|
||||
},
|
||||
{
|
||||
"length too big",
|
||||
[]byte{0x24, 0x00, 0x00, 0x08},
|
||||
},
|
||||
{
|
||||
"invalid payload",
|
||||
[]byte{0x24, 0x00, 0x00, 0x08, 0x01, 0x02},
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
var f InterleavedFrame
|
||||
f.Payload = make([]byte, 5)
|
||||
err := f.Read(bufio.NewReader(bytes.NewBuffer(ca.byts)))
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -11,7 +11,7 @@ import (
|
||||
const (
|
||||
rtspProtocol10 = "RTSP/1.0"
|
||||
requestMaxMethodLength = 64
|
||||
requestMaxPathLength = 2048
|
||||
requestMaxURLLength = 2048
|
||||
requestMaxProtocolLength = 64
|
||||
)
|
||||
|
||||
@@ -63,7 +63,7 @@ func (req *Request) Read(rb *bufio.Reader) error {
|
||||
return fmt.Errorf("empty method")
|
||||
}
|
||||
|
||||
byts, err = readBytesLimited(rb, ' ', requestMaxPathLength)
|
||||
byts, err = readBytesLimited(rb, ' ', requestMaxURLLength)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -131,25 +131,65 @@ var casesRequest = []struct {
|
||||
}
|
||||
|
||||
func TestRequestRead(t *testing.T) {
|
||||
// keep req global to make sure that all its fields are overridden.
|
||||
var req Request
|
||||
for _, c := range casesRequest {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
err := req.Read(bufio.NewReader(bytes.NewBuffer(c.byts)))
|
||||
|
||||
for _, ca := range casesRequest {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
err := req.Read(bufio.NewReader(bytes.NewBuffer(ca.byts)))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, c.req, req)
|
||||
require.Equal(t, ca.req, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequestWrite(t *testing.T) {
|
||||
for _, c := range casesRequest {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
for _, ca := range casesRequest {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
bw := bufio.NewWriter(&buf)
|
||||
err := c.req.Write(bw)
|
||||
err := ca.req.Write(bw)
|
||||
require.NoError(t, err)
|
||||
// do NOT call flush(), write() must have already done it
|
||||
require.Equal(t, c.byts, buf.Bytes())
|
||||
require.Equal(t, ca.byts, buf.Bytes())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequestReadErrors(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
byts []byte
|
||||
}{
|
||||
{
|
||||
"empty",
|
||||
[]byte{},
|
||||
},
|
||||
{
|
||||
"missing url, protocol, eol",
|
||||
[]byte("GET"),
|
||||
},
|
||||
{
|
||||
"missing protocol, eol",
|
||||
[]byte("GET rtsp://testing123/test"),
|
||||
},
|
||||
{
|
||||
"missing eol",
|
||||
[]byte("GET rtsp://testing123/test RTSP/1.0"),
|
||||
},
|
||||
{
|
||||
"invalid URL",
|
||||
[]byte("GET http://testing123 RTSP/1.0\r\n"),
|
||||
},
|
||||
{
|
||||
"invalid protocol",
|
||||
[]byte("GET rtsp://testing123 RTSP/2.0\r\n"),
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
var req Request
|
||||
err := req.Read(bufio.NewReader(bytes.NewBuffer(ca.byts)))
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -109,7 +109,9 @@ var casesResponse = []struct {
|
||||
}
|
||||
|
||||
func TestResponseRead(t *testing.T) {
|
||||
// keep res global to make sure that all its fields are overridden.
|
||||
var res Response
|
||||
|
||||
for _, c := range casesResponse {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
err := res.Read(bufio.NewReader(bytes.NewBuffer(c.byts)))
|
||||
@@ -132,7 +134,45 @@ func TestResponseWrite(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResponseWriteStatusAutofill(t *testing.T) {
|
||||
func TestResponseReadErrors(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
byts []byte
|
||||
}{
|
||||
{
|
||||
"empty",
|
||||
[]byte{},
|
||||
},
|
||||
{
|
||||
"missing code, message, eol",
|
||||
[]byte("RTSP/1.0"),
|
||||
},
|
||||
{
|
||||
"missing message, eol",
|
||||
[]byte("RTSP/1.0 200"),
|
||||
},
|
||||
{
|
||||
"missing eol",
|
||||
[]byte("RTSP/1.0 200 OK"),
|
||||
},
|
||||
{
|
||||
"invalid protocol",
|
||||
[]byte("RTSP/2.0 200 OK\r\n"),
|
||||
},
|
||||
{
|
||||
"invalid code",
|
||||
[]byte("RTSP/2.0 string OK\r\n"),
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
var res Response
|
||||
err := res.Read(bufio.NewReader(bytes.NewBuffer(ca.byts)))
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestResponseWriteAutoFillStatus(t *testing.T) {
|
||||
res := &Response{
|
||||
StatusCode: StatusMethodNotAllowed,
|
||||
Header: Header{
|
||||
|
@@ -183,6 +183,15 @@ func TestAuthRead(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuthWrite(t *testing.T) {
|
||||
for _, ca := range casesAuth {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
vout := ca.h.Write()
|
||||
require.Equal(t, ca.vout, vout)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuthReadError(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
@@ -212,12 +221,3 @@ func TestAuthReadError(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuthWrite(t *testing.T) {
|
||||
for _, ca := range casesAuth {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
vout := ca.h.Write()
|
||||
require.Equal(t, ca.vout, vout)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -178,6 +178,15 @@ func TestRTPInfoRead(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRTPInfoWrite(t *testing.T) {
|
||||
for _, ca := range casesRTPInfo {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
req := ca.h.Write()
|
||||
require.Equal(t, ca.vout, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRTPInfoReadError(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
@@ -199,12 +208,3 @@ func TestRTPInfoReadError(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRTPInfoWrite(t *testing.T) {
|
||||
for _, ca := range casesRTPInfo {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
req := ca.h.Write()
|
||||
require.Equal(t, ca.vout, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -59,6 +59,15 @@ func TestSessionRead(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionWrite(t *testing.T) {
|
||||
for _, ca := range casesSession {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
req := ca.h.Write()
|
||||
require.Equal(t, ca.vout, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionReadError(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
@@ -80,12 +89,3 @@ func TestSessionReadError(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionWrite(t *testing.T) {
|
||||
for _, ca := range casesSession {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
req := ca.h.Write()
|
||||
require.Equal(t, ca.vout, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -124,6 +124,15 @@ func TestTransportRead(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestTransportWrite(t *testing.T) {
|
||||
for _, ca := range casesTransport {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
req := ca.h.Write()
|
||||
require.Equal(t, ca.vout, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestTransportReadError(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
@@ -145,12 +154,3 @@ func TestTransportReadError(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestTransportWrite(t *testing.T) {
|
||||
for _, ca := range casesTransport {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
req := ca.h.Write()
|
||||
require.Equal(t, ca.vout, req)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user