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:
Alessandro Ros
2022-12-22 20:32:28 +01:00
committed by GitHub
parent cabfcd627b
commit ae9dac0ad3
43 changed files with 532 additions and 546 deletions

View File

@@ -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,