simplify tests (#245)

This commit is contained in:
Alessandro Ros
2023-04-13 12:01:57 +02:00
committed by GitHub
parent 7bf71a18b3
commit 1f19f3cdb8
4 changed files with 371 additions and 833 deletions

View File

@@ -6,7 +6,7 @@
[![CodeCov](https://codecov.io/gh/bluenviron/gortsplib/branch/main/graph/badge.svg)](https://app.codecov.io/gh/bluenviron/gortsplib/branch/main)
[![PkgGoDev](https://pkg.go.dev/badge/github.com/bluenviron/gortsplib/v3)](https://pkg.go.dev/github.com/bluenviron/gortsplib/v3#pkg-index)
RTSP 1.0 client and server library for the Go programming language, written for [rtsp-simple-server](https://github.com/aler9/rtsp-simple-server).
RTSP 1.0 client and server library for the Go programming language, written for [MediaMTX](https://github.com/aler9/mediamtx).
Go ≥ 1.18 is required.

View File

@@ -3,7 +3,6 @@ package gortsplib
import (
"bytes"
"crypto/tls"
"errors"
"net"
"strconv"
"strings"
@@ -63,7 +62,7 @@ func absoluteControlAttribute(md *psdp.MediaDescription) string {
return v
}
func doDescribe(conn *conn.Conn) (*sdp.SessionDescription, error) {
func doDescribe(t *testing.T, conn *conn.Conn) *sdp.SessionDescription {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Describe,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
@@ -71,21 +70,65 @@ func doDescribe(conn *conn.Conn) (*sdp.SessionDescription, error) {
"CSeq": base.HeaderValue{"1"},
},
})
if err != nil {
return nil, err
}
if res.StatusCode != base.StatusOK {
return nil, errors.New("bad status code")
}
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var desc sdp.SessionDescription
err = desc.Unmarshal(res.Body)
if err != nil {
return nil, err
}
require.NoError(t, err)
return &desc
}
return &desc, err
func doSetup(t *testing.T, conn *conn.Conn, u string, inTH *headers.Transport) (*base.Response, *headers.Transport) {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(u),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
return res, &th
}
func doPlay(t *testing.T, conn *conn.Conn, u string, session string) {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL(u),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
}
func doPause(t *testing.T, conn *conn.Conn, u string, session string) {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Pause,
URL: mustParseURL(u),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
}
func readSession(t *testing.T, res *base.Response) string {
var sx headers.Session
err := sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
return sx.Session
}
func TestServerPlayPath(t *testing.T) {
@@ -188,8 +231,7 @@ func TestServerPlayPath(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
th := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
@@ -204,32 +246,14 @@ func TestServerPlayPath(t *testing.T) {
InterleavedIDs: &[2]int{0, 1},
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(strings.ReplaceAll(ca.setupURL, "[control]", "/"+
relativeControlAttribute(desc.MediaDescriptions[1]))),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn,
strings.ReplaceAll(ca.setupURL, "[control]", "/"+
relativeControlAttribute(desc.MediaDescriptions[1])),
th)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL(ca.playURL),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, ca.playURL, session)
})
}
}
@@ -288,8 +312,7 @@ func TestServerPlaySetupErrors(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
th := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
@@ -318,9 +341,8 @@ func TestServerPlaySetupErrors(t *testing.T) {
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
th.InterleavedIDs = &[2]int{2, 3}
res, err = writeReqReadRes(conn, base.Request{
@@ -329,7 +351,7 @@ func TestServerPlaySetupErrors(t *testing.T) {
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Transport": th.Marshal(),
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -339,9 +361,8 @@ func TestServerPlaySetupErrors(t *testing.T) {
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
th.InterleavedIDs = &[2]int{2, 3}
res, err = writeReqReadRes(conn, base.Request{
@@ -350,7 +371,7 @@ func TestServerPlaySetupErrors(t *testing.T) {
Header: base.Header{
"CSeq": base.HeaderValue{"4"},
"Transport": th.Marshal(),
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -425,8 +446,7 @@ func TestServerPlaySetupErrorSameUDPPortsAndIP(t *testing.T) {
ClientPorts: &[2]int{35466, 35467},
}
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
@@ -566,8 +586,7 @@ func TestServerPlay(t *testing.T) {
<-nconnOpened
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Mode: func() *headers.TransportMode {
@@ -595,20 +614,7 @@ func TestServerPlay(t *testing.T) {
inTH.InterleavedIDs = &[2]int{4, 5}
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var l1 net.PacketConn
var l2 net.PacketConn
@@ -665,20 +671,9 @@ func TestServerPlay(t *testing.T) {
<-sessionOpened
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://"+listenIP+":8554/teststream", session)
// server -> client (direct)
switch transport {
@@ -765,7 +760,7 @@ func TestServerPlay(t *testing.T) {
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"4"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -777,7 +772,7 @@ func TestServerPlay(t *testing.T) {
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"5"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -789,7 +784,7 @@ func TestServerPlay(t *testing.T) {
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"6"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -867,8 +862,7 @@ func TestServerPlayDecodeErrors(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Mode: func() *headers.TransportMode {
@@ -889,20 +883,7 @@ func TestServerPlayDecodeErrors(t *testing.T) {
inTH.InterleavedIDs = &[2]int{0, 1}
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
var resTH headers.Transport
err = resTH.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
res, resTH := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var l1 net.PacketConn
var l2 net.PacketConn
@@ -917,20 +898,9 @@ func TestServerPlayDecodeErrors(t *testing.T) {
defer l2.Close()
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
switch { //nolint:dupl
case ca.proto == "udp" && ca.name == "rtcp invalid":
@@ -1004,8 +974,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Mode: func() *headers.TransportMode {
@@ -1026,16 +995,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
inTH.InterleavedIDs = &[2]int{0, 1}
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var l1 net.PacketConn
var l2 net.PacketConn
@@ -1049,20 +1009,9 @@ func TestServerPlayRTCPReport(t *testing.T) {
defer l2.Close()
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
for i := 0; i < 2; i++ {
stream.WritePacketRTP(stream.Medias()[0], &rtp.Packet{
@@ -1110,7 +1059,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"4"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -1226,45 +1175,26 @@ func TestServerPlayTCPResponseBeforeFrames(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
session := readSession(t, res)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
_, err = conn.ReadInterleavedFrame()
require.NoError(t, err)
@@ -1306,56 +1236,27 @@ func TestServerPlayPlayPlay(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolUDP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
ClientPorts: &[2]int{30450, 30451},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolUDP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
ClientPorts: &[2]int{30450, 30451},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"4"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
}
func TestServerPlayPlayPausePlay(t *testing.T) {
@@ -1424,67 +1325,28 @@ func TestServerPlayPlayPausePlay(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Pause,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
doPause(t, conn, "rtsp://localhost:8554/teststream", session)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
}
func TestServerPlayPlayPausePause(t *testing.T) {
@@ -1549,73 +1411,30 @@ func TestServerPlayPlayPausePause(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
session := readSession(t, res)
err = conn.WriteRequest(&base.Request{
Method: base.Pause,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"4"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
res, err = conn.ReadResponseIgnoreFrames()
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPause(t, conn, "rtsp://localhost:8554/teststream", session)
err = conn.WriteRequest(&base.Request{
Method: base.Pause,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"5"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
res, err = conn.ReadResponseIgnoreFrames()
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPause(t, conn, "rtsp://localhost:8554/teststream", session)
}
func TestServerPlayTimeout(t *testing.T) {
@@ -1677,8 +1496,7 @@ func TestServerPlayTimeout(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Mode: func() *headers.TransportMode {
@@ -1700,31 +1518,11 @@ func TestServerPlayTimeout(t *testing.T) {
inTH.Protocol = headers.TransportProtocolUDP
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
<-sessionClosed
})
@@ -1786,8 +1584,7 @@ func TestServerPlayWithoutTeardown(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Delivery: func() *headers.TransportDelivery {
@@ -1808,31 +1605,11 @@ func TestServerPlayWithoutTeardown(t *testing.T) {
inTH.InterleavedIDs = &[2]int{0, 1}
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
nconn.Close()
@@ -1886,8 +1663,7 @@ func TestServerPlayUDPChangeConn(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Delivery: func() *headers.TransportDelivery {
@@ -1902,33 +1678,13 @@ func TestServerPlayUDPChangeConn(t *testing.T) {
ClientPorts: &[2]int{35466, 35467},
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
sxID = sx.Session
sxID = session
}()
func() {
@@ -1990,8 +1746,7 @@ func TestServerPlayPartialMedias(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Delivery: func() *headers.TransportDelivery {
@@ -2006,31 +1761,11 @@ func TestServerPlayPartialMedias(t *testing.T) {
InterleavedIDs: &[2]int{4, 5},
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[1])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
f, err := conn.ReadInterleavedFrame()
require.NoError(t, err)
@@ -2045,8 +1780,7 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTH := &headers.Transport{
Delivery: func() *headers.TransportDelivery {
@@ -2061,20 +1795,8 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
InterleavedIDs: &[2]int{0, 1},
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
ssrcs := make([]*uint32, 2)
ssrcs[0] = th.SSRC
@@ -2091,9 +1813,7 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
InterleavedIDs: &[2]int{2, 3},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
@@ -2101,27 +1821,18 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Transport": inTH.Marshal(),
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
th = headers.Transport{}
th = &headers.Transport{}
err = th.Unmarshal(res.Header["Transport"])
require.NoError(t, err)
ssrcs[1] = th.SSRC
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"4"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
var ri headers.RTPInfo
err = ri.Unmarshal(res.Header["RTP-Info"])

View File

@@ -276,27 +276,16 @@ func TestServerRecordPath(t *testing.T) {
InterleavedIDs: &[2]int{0, 1},
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(ca.setupURL),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, ca.setupURL, th)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Record,
URL: mustParseURL(ca.announceURL),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -351,31 +340,22 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
@@ -394,7 +374,7 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
}(),
InterleavedIDs: &[2]int{2, 3},
}.Marshal(),
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -471,7 +451,7 @@ func TestServerRecordErrorRecordPartialMedias(t *testing.T) {
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
th := &headers.Transport{
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
@@ -484,27 +464,16 @@ func TestServerRecordErrorRecordPartialMedias(t *testing.T) {
InterleavedIDs: &[2]int{0, 1},
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": th.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Record,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -648,7 +617,7 @@ func TestServerRecord(t *testing.T) {
var l1s [2]net.PacketConn
var l2s [2]net.PacketConn
var sx headers.Session
var session string
var serverPorts [2]*[2]int
for i := 0; i < 2; i++ {
@@ -679,19 +648,9 @@ func TestServerRecord(t *testing.T) {
inTH.InterleavedIDs = &[2]int{2 + i*2, 3 + i*2}
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[i].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[i].Control, inTH)
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session = readSession(t, res)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
@@ -707,7 +666,7 @@ func TestServerRecord(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -780,7 +739,7 @@ func TestServerRecord(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -861,20 +820,9 @@ func TestServerRecordErrorInvalidProtocol(t *testing.T) {
ClientPorts: &[2]int{35466, 35467},
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
@@ -885,7 +833,7 @@ func TestServerRecordErrorInvalidProtocol(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -957,31 +905,22 @@ func TestServerRecordRTCPReport(t *testing.T) {
require.NoError(t, err)
defer l2.Close()
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord
return &v
}(),
Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{34556, 34557},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModeRecord
return &v
}(),
Protocol: headers.TransportProtocolUDP,
ClientPorts: &[2]int{34556, 34557},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
session := readSession(t, res)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
@@ -992,7 +931,7 @@ func TestServerRecordRTCPReport(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -1143,20 +1082,9 @@ func TestServerRecordTimeout(t *testing.T) {
inTH.InterleavedIDs = &[2]int{0, 1}
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
@@ -1167,7 +1095,7 @@ func TestServerRecordTimeout(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -1266,20 +1194,9 @@ func TestServerRecordWithoutTeardown(t *testing.T) {
inTH.InterleavedIDs = &[2]int{0, 1}
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
var th headers.Transport
err = th.Unmarshal(res.Header["Transport"])
@@ -1290,7 +1207,7 @@ func TestServerRecordWithoutTeardown(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -1373,33 +1290,22 @@ func TestServerRecordUDPChangeConn(t *testing.T) {
ClientPorts: &[2]int{35466, 35467},
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Record,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
sxID = sx.Session
sxID = session
}()
func() {
@@ -1550,20 +1456,9 @@ func TestServerRecordDecodeErrors(t *testing.T) {
defer l2.Close()
}
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
session := readSession(t, res)
var resTH headers.Transport
err = resTH.Unmarshal(res.Header["Transport"])
@@ -1574,7 +1469,7 @@ func TestServerRecordDecodeErrors(t *testing.T) {
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"3"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)

View File

@@ -358,42 +358,34 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
var sx headers.Session
var session string
if ca == "inside session" {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
session = readSession(t, res)
}
headers := base.Header{
"CSeq": base.HeaderValue{"2"},
}
if ca == "inside session" {
headers["Session"] = base.HeaderValue{sx.Session}
headers["Session"] = base.HeaderValue{session}
}
res, err := writeReqReadRes(conn, base.Request{
@@ -408,7 +400,7 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
"CSeq": base.HeaderValue{"3"},
}
if ca == "inside session" {
headers["Session"] = base.HeaderValue{sx.Session}
headers["Session"] = base.HeaderValue{session}
}
res, err = writeReqReadRes(conn, base.Request{
@@ -461,53 +453,33 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
defer nconn1.Close()
conn1 := conn.NewConn(nconn1)
desc1, err := doDescribe(conn1)
require.NoError(t, err)
desc1 := doDescribe(t, conn1)
res, err := writeReqReadRes(conn1, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc1.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn1, absoluteControlAttribute(desc1.MediaDescriptions[0]), inTH)
res, err = writeReqReadRes(conn1, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
session := readSession(t, res)
doPlay(t, conn1, "rtsp://localhost:8554/teststream", session)
nconn2, err := net.Dial("tcp", "localhost:8554")
require.NoError(t, err)
defer nconn2.Close()
conn2 := conn.NewConn(nconn2)
desc2, err := doDescribe(conn2)
require.NoError(t, err)
desc2 := doDescribe(t, conn2)
res, err = writeReqReadRes(conn2, base.Request{
Method: base.Setup,
@@ -526,7 +498,7 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)
@@ -572,45 +544,26 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Play,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
session := readSession(t, res)
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Setup,
@@ -664,8 +617,7 @@ func TestServerSetupMultipleTransports(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
inTHS := headers.Transports{
{
@@ -775,43 +727,34 @@ func TestServerGetSetParameter(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
var sx headers.Session
var session string
if ca == "inside session" {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
session = readSession(t, res)
}
headers := base.Header{
"CSeq": base.HeaderValue{"3"},
}
if ca == "inside session" {
headers["Session"] = base.HeaderValue{sx.Session}
headers["Session"] = base.HeaderValue{session}
}
res, err := writeReqReadRes(conn, base.Request{
@@ -827,7 +770,7 @@ func TestServerGetSetParameter(t *testing.T) {
"CSeq": base.HeaderValue{"4"},
}
if ca == "inside session" {
headers["Session"] = base.HeaderValue{sx.Session}
headers["Session"] = base.HeaderValue{session}
}
res, err = writeReqReadRes(conn, base.Request{
@@ -929,30 +872,22 @@ func TestServerSessionClose(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
session.Close()
session.Close()
@@ -1010,30 +945,37 @@ func TestServerSessionAutoClose(t *testing.T) {
require.NoError(t, err)
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
_, err = writeReqReadRes(conn, base.Request{
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
"CSeq": base.HeaderValue{"1"},
"Transport": inTH.Marshal(),
},
})
require.NoError(t, err)
if ca == "200" {
require.Equal(t, base.StatusOK, res.StatusCode)
} else {
require.Equal(t, base.StatusBadRequest, res.StatusCode)
}
nconn.Close()
<-sessionClosed
@@ -1070,41 +1012,31 @@ func TestServerSessionTeardown(t *testing.T) {
defer nconn.Close()
conn := conn.NewConn(nconn)
desc, err := doDescribe(conn)
require.NoError(t, err)
desc := doDescribe(t, conn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Setup,
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Transport": headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}.Marshal(),
},
})
require.NoError(t, err)
require.Equal(t, base.StatusOK, res.StatusCode)
inTH := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
var sx headers.Session
err = sx.Unmarshal(res.Header["Session"])
require.NoError(t, err)
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
session := readSession(t, res)
res, err = writeReqReadRes(conn, base.Request{
Method: base.Teardown,
URL: mustParseURL("rtsp://localhost:8554/"),
Header: base.Header{
"CSeq": base.HeaderValue{"2"},
"Session": base.HeaderValue{sx.Session},
"Session": base.HeaderValue{session},
},
})
require.NoError(t, err)