mirror of
https://github.com/aler9/gortsplib
synced 2025-10-06 07:37:07 +08:00
move url.URL into base.URL (#459)
This commit is contained in:
165
pkg/base/url_test.go
Normal file
165
pkg/base/url_test.go
Normal file
@@ -0,0 +1,165 @@
|
||||
package base
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func mustParseURL(s string) *URL {
|
||||
u, err := ParseURL(s)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
func TestParseURL(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
enc string
|
||||
u *URL
|
||||
}{
|
||||
{
|
||||
"ipv6 stateless",
|
||||
`rtsp://user:pa%23ss@[fe80::a8f4:3219:f33e:a072%wl0]:8554/prox%23ied`,
|
||||
&URL{
|
||||
Scheme: "rtsp",
|
||||
Host: "[fe80::a8f4:3219:f33e:a072%wl0]:8554",
|
||||
Path: "/prox#ied",
|
||||
User: url.UserPassword("user", "pa#ss"),
|
||||
},
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
u, err := ParseURL(ca.enc)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, ca.u, u)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestURLParseErrors(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
enc string
|
||||
err string
|
||||
}{
|
||||
{
|
||||
"invalid",
|
||||
":testing",
|
||||
"parse \":testing\": missing protocol scheme",
|
||||
},
|
||||
{
|
||||
"unsupported scheme",
|
||||
"http://testing",
|
||||
"unsupported scheme 'http'",
|
||||
},
|
||||
{
|
||||
"with opaque data",
|
||||
"rtsp:opaque?query",
|
||||
"URLs with opaque data are not supported",
|
||||
},
|
||||
{
|
||||
"with fragment",
|
||||
"rtsp://localhost:8554/teststream#fragment",
|
||||
"URLs with fragments are not supported",
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
_, err := ParseURL(ca.enc)
|
||||
require.EqualError(t, err, ca.err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestURLClone(t *testing.T) {
|
||||
u := mustParseURL("rtsp://localhost:8554/test/stream")
|
||||
u2 := u.Clone()
|
||||
u.Host = "otherhost"
|
||||
|
||||
require.Equal(t, &URL{
|
||||
Scheme: "rtsp",
|
||||
Host: "otherhost",
|
||||
Path: "/test/stream",
|
||||
}, u)
|
||||
|
||||
require.Equal(t, &URL{
|
||||
Scheme: "rtsp",
|
||||
Host: "localhost:8554",
|
||||
Path: "/test/stream",
|
||||
}, u2)
|
||||
}
|
||||
|
||||
func TestURLCloneWithoutCredentials(t *testing.T) {
|
||||
u := mustParseURL("rtsp://user:pass@localhost:8554/test/stream")
|
||||
u2 := u.CloneWithoutCredentials()
|
||||
u.Host = "otherhost"
|
||||
|
||||
require.Equal(t, &URL{
|
||||
Scheme: "rtsp",
|
||||
Host: "otherhost",
|
||||
Path: "/test/stream",
|
||||
User: url.UserPassword("user", "pass"),
|
||||
}, u)
|
||||
|
||||
require.Equal(t, &URL{
|
||||
Scheme: "rtsp",
|
||||
Host: "localhost:8554",
|
||||
Path: "/test/stream",
|
||||
}, u2)
|
||||
}
|
||||
|
||||
func TestURLRTSPPathAndQuery(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
u *URL
|
||||
b string
|
||||
}{
|
||||
{
|
||||
"standard",
|
||||
mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
|
||||
"/teststream/trackID=1",
|
||||
},
|
||||
{
|
||||
"subpath",
|
||||
mustParseURL("rtsp://localhost:8554/test/stream/trackID=1"),
|
||||
"/test/stream/trackID=1",
|
||||
},
|
||||
{
|
||||
"path and query",
|
||||
mustParseURL("rtsp://192.168.1.99:554/test?user=tmp&password=BagRep1&channel=1&stream=0.sdp/trackID=1"),
|
||||
"/test?user=tmp&password=BagRep1&channel=1&stream=0.sdp/trackID=1",
|
||||
},
|
||||
{
|
||||
"path and query with special chars",
|
||||
mustParseURL("rtsp://192.168.1.99:554/te!st?user=tmp&password=BagRep1!&channel=1&stream=0.sdp/trackID=1"),
|
||||
"/te!st?user=tmp&password=BagRep1!&channel=1&stream=0.sdp/trackID=1",
|
||||
},
|
||||
{
|
||||
"path and query attached",
|
||||
mustParseURL("rtsp://192.168.1.99:554/user=tmp&password=BagRep1!&channel=1&stream=0.sdp/trackID=1"),
|
||||
"/user=tmp&password=BagRep1!&channel=1&stream=0.sdp/trackID=1",
|
||||
},
|
||||
{
|
||||
"no path",
|
||||
mustParseURL("rtsp://192.168.1.99:554"),
|
||||
"",
|
||||
},
|
||||
{
|
||||
"single slash",
|
||||
mustParseURL("rtsp://192.168.1.99:554/"),
|
||||
"/",
|
||||
},
|
||||
{
|
||||
"no slash and query",
|
||||
mustParseURL("rtsp://192.168.1.99:554?testing"),
|
||||
"?testing",
|
||||
},
|
||||
} {
|
||||
b, ok := ca.u.RTSPPathAndQuery()
|
||||
require.Equal(t, true, ok)
|
||||
require.Equal(t, ca.b, b)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user