mirror of
https://github.com/aler9/gortsplib
synced 2025-09-28 03:52:12 +08:00
use random UUIDs as media IDs (#163)
* remove Medias.Clone(), Media.Clone(), Format.Clone() * server: use random UUIDs as media IDs * client: use random UUIDs as media IDs
This commit is contained in:
130
server_test.go
130
server_test.go
@@ -315,6 +315,14 @@ type testServerErrMethodNotImplemented struct {
|
||||
stream *ServerStream
|
||||
}
|
||||
|
||||
func (s *testServerErrMethodNotImplemented) OnDescribe(
|
||||
ctx *ServerHandlerOnDescribeCtx,
|
||||
) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, s.stream, nil
|
||||
}
|
||||
|
||||
func (s *testServerErrMethodNotImplemented) OnSetup(
|
||||
ctx *ServerHandlerOnSetupCtx,
|
||||
) (*base.Response, *ServerStream, error) {
|
||||
@@ -326,7 +334,7 @@ func (s *testServerErrMethodNotImplemented) OnSetup(
|
||||
func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
for _, ca := range []string{"outside session", "inside session"} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
@@ -343,12 +351,15 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
var sx headers.Session
|
||||
|
||||
if ca == "inside session" {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -380,7 +391,7 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.SetParameter,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: headers,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -395,7 +406,7 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Options,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/"),
|
||||
Header: headers,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -405,11 +416,16 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
Handler: &testServerHandler{
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -438,9 +454,12 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
defer nconn1.Close()
|
||||
conn1 := conn.NewConn(nconn1)
|
||||
|
||||
desc1, err := doDescribe(conn1)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := writeReqReadRes(conn1, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc1.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -480,9 +499,12 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
defer nconn2.Close()
|
||||
conn2 := conn.NewConn(nconn2)
|
||||
|
||||
desc2, err := doDescribe(conn2)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err = writeReqReadRes(conn2, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc2.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -505,11 +527,16 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
Handler: &testServerHandler{
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -538,9 +565,12 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -577,7 +607,7 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -599,11 +629,16 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerSetupMultipleTransports(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
Handler: &testServerHandler{
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -622,6 +657,9 @@ func TestServerSetupMultipleTransports(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
inTHS := headers.Transports{
|
||||
{
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
@@ -651,7 +689,7 @@ func TestServerSetupMultipleTransports(t *testing.T) {
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": inTHS.Marshal(),
|
||||
@@ -676,13 +714,18 @@ func TestServerSetupMultipleTransports(t *testing.T) {
|
||||
func TestServerGetSetParameter(t *testing.T) {
|
||||
for _, ca := range []string{"inside session", "outside session"} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
var params []byte
|
||||
|
||||
s := &Server{
|
||||
Handler: &testServerHandler{
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
ctx.Session.SetUserData(123)
|
||||
return &base.Response{
|
||||
@@ -725,14 +768,17 @@ func TestServerGetSetParameter(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
var sx headers.Session
|
||||
|
||||
if ca == "inside session" {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
@@ -755,7 +801,7 @@ func TestServerGetSetParameter(t *testing.T) {
|
||||
}
|
||||
|
||||
headers := base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
}
|
||||
if ca == "inside session" {
|
||||
headers["Session"] = base.HeaderValue{sx.Session}
|
||||
@@ -771,7 +817,7 @@ func TestServerGetSetParameter(t *testing.T) {
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
headers = base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
}
|
||||
if ca == "inside session" {
|
||||
headers["Session"] = base.HeaderValue{sx.Session}
|
||||
@@ -843,7 +889,7 @@ func TestServerErrorInvalidSession(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerSessionClose(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
var session *ServerSession
|
||||
@@ -853,6 +899,11 @@ func TestServerSessionClose(t *testing.T) {
|
||||
onSessionOpen: func(ctx *ServerHandlerOnSessionOpenCtx) {
|
||||
session = ctx.Session
|
||||
},
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -871,9 +922,12 @@ func TestServerSessionClose(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -913,7 +967,7 @@ func TestServerSessionAutoClose(t *testing.T) {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
sessionClosed := make(chan struct{})
|
||||
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
@@ -921,6 +975,11 @@ func TestServerSessionAutoClose(t *testing.T) {
|
||||
onSessionClose: func(ctx *ServerHandlerOnSessionCloseCtx) {
|
||||
close(sessionClosed)
|
||||
},
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
if ca == "200" {
|
||||
return &base.Response{
|
||||
@@ -944,9 +1003,12 @@ func TestServerSessionAutoClose(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -973,11 +1035,16 @@ func TestServerSessionAutoClose(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerSessionTeardown(t *testing.T) {
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
Handler: &testServerHandler{
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -996,9 +1063,12 @@ func TestServerSessionTeardown(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -1049,7 +1119,7 @@ func TestServerErrorInvalidPath(t *testing.T) {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
nconnClosed := make(chan struct{})
|
||||
|
||||
stream := NewServerStream(media.Medias{testH264Media.Clone()})
|
||||
stream := NewServerStream(media.Medias{testH264Media})
|
||||
defer stream.Close()
|
||||
|
||||
s := &Server{
|
||||
@@ -1058,6 +1128,11 @@ func TestServerErrorInvalidPath(t *testing.T) {
|
||||
require.EqualError(t, ctx.Error, "invalid path")
|
||||
close(nconnClosed)
|
||||
},
|
||||
onDescribe: func(ctx *ServerHandlerOnDescribeCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, stream, nil
|
||||
},
|
||||
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -1076,10 +1151,13 @@ func TestServerErrorInvalidPath(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
|
||||
if ca == "inside session" {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/mediaID=0"),
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + controlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
@@ -1163,7 +1241,7 @@ func TestServerAuth(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
medias := media.Medias{testH264Media.Clone()}
|
||||
medias := media.Medias{testH264Media}
|
||||
|
||||
req := base.Request{
|
||||
Method: base.Announce,
|
||||
|
Reference in New Issue
Block a user