add ServerConn.Close(), ServerSession.Close()

This commit is contained in:
aler9
2021-05-07 11:42:01 +02:00
parent 1c9fe6c394
commit e52fda806d
9 changed files with 430 additions and 203 deletions

View File

@@ -427,6 +427,31 @@ func TestServerErrorWrongUDPPorts(t *testing.T) {
})
}
func TestServerConnClose(t *testing.T) {
connClosed := make(chan struct{})
s := &Server{
Handler: &testServerHandler{
onConnOpen: func(sc *ServerConn) {
sc.Close()
},
onConnClose: func(sc *ServerConn, err error) {
close(connClosed)
},
},
}
err := s.Start("127.0.0.1:8554")
require.NoError(t, err)
defer s.Close()
conn, err := net.Dial("tcp", "localhost:8554")
require.NoError(t, err)
defer conn.Close()
<-connClosed
}
func TestServerCSeq(t *testing.T) {
s := &Server{}
err := s.Start("127.0.0.1:8554")
@@ -493,7 +518,7 @@ func TestServerErrorCSeqMissing(t *testing.T) {
func TestServerErrorInvalidMethod(t *testing.T) {
h := &testServerHandler{
onConnClose: func(sc *ServerConn, err error) {
require.Equal(t, "unhandled request", err.Error())
require.Equal(t, "unhandled request (INVALID rtsp://localhost:8554/)", err.Error())
},
}
@@ -846,3 +871,55 @@ func TestServerErrorInvalidSession(t *testing.T) {
})
}
}
func TestServerSessionClose(t *testing.T) {
sessionClosed := make(chan struct{})
s := &Server{
Handler: &testServerHandler{
onSessionOpen: func(ss *ServerSession) {
ss.Close()
},
onSessionClose: func(ss *ServerSession, err error) {
close(sessionClosed)
},
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, error) {
return &base.Response{
StatusCode: base.StatusOK,
}, nil
},
},
}
err := s.Start("127.0.0.1:8554")
require.NoError(t, err)
defer s.Close()
conn, err := net.Dial("tcp", "localhost:8554")
require.NoError(t, err)
defer conn.Close()
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
err = base.Request{
Method: base.Setup,
URL: base.MustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: StreamProtocolTCP,
Delivery: func() *base.StreamDelivery {
v := base.StreamDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Write(),
},
}.Write(bconn.Writer)
require.NoError(t, err)
<-sessionClosed
}