You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lal/pkg/base/url_test.go

241 lines
8.1 KiB
Go

// Copyright 2020, Chef. All rights reserved.
// https://github.com/q191201771/lal
//
// Use of this source code is governed by a MIT-style license
// that can be found in the License file.
//
// Author: Chef (191201771@qq.com)
package base_test
import (
"testing"
"github.com/q191201771/lal/pkg/base"
"github.com/q191201771/naza/pkg/assert"
)
type in struct {
rawUrl string
defaultPort int
}
// TODO chef: 测试IPv6的case
func TestParseUrl(t *testing.T) {
// 非法url
_, err := base.ParseUrl("invalidurl", -1)
assert.IsNotNil(t, err)
golden := map[in]base.UrlContext{
// 常见urlurl中无端口另外设置默认端口
in{rawUrl: "rtmp://127.0.0.1/live/test110", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1/live/test110",
Scheme: "rtmp",
StdHost: "127.0.0.1",
HostWithPort: "127.0.0.1:1935",
Host: "127.0.0.1",
Port: 1935,
PathWithRawQuery: "/live/test110",
Path: "/live/test110",
PathWithoutLastItem: "live",
LastItemOfPath: "test110",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1/live/test110",
},
// 域名url
in{rawUrl: "rtmp://localhost/live/test110", defaultPort: 1935}: {
Url: "rtmp://localhost/live/test110",
Scheme: "rtmp",
StdHost: "localhost",
HostWithPort: "localhost:1935",
Host: "localhost",
Port: 1935,
PathWithRawQuery: "/live/test110",
Path: "/live/test110",
PathWithoutLastItem: "live",
LastItemOfPath: "test110",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://localhost/live/test110",
},
// 带参数url
in{rawUrl: "rtmp://127.0.0.1/live/test110?a=1", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1/live/test110?a=1",
Scheme: "rtmp",
StdHost: "127.0.0.1",
HostWithPort: "127.0.0.1:1935",
Host: "127.0.0.1",
Port: 1935,
PathWithRawQuery: "/live/test110?a=1",
Path: "/live/test110",
PathWithoutLastItem: "live",
LastItemOfPath: "test110",
RawQuery: "a=1",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1/live/test110?a=1",
},
// path多级
in{rawUrl: "rtmp://127.0.0.1:19350/a/b/test110", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1:19350/a/b/test110",
Scheme: "rtmp",
StdHost: "127.0.0.1:19350",
HostWithPort: "127.0.0.1:19350",
Host: "127.0.0.1",
Port: 19350,
PathWithRawQuery: "/a/b/test110",
Path: "/a/b/test110",
PathWithoutLastItem: "a/b",
LastItemOfPath: "test110",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1:19350/a/b/test110",
},
// url中无端口没有设置默认端口
in{rawUrl: "rtmp://127.0.0.1/live/test110?a=1", defaultPort: -1}: {
Url: "rtmp://127.0.0.1/live/test110?a=1",
Scheme: "rtmp",
StdHost: "127.0.0.1",
HostWithPort: "127.0.0.1:1935",
Host: "127.0.0.1",
Port: 1935,
PathWithRawQuery: "/live/test110?a=1",
Path: "/live/test110",
PathWithoutLastItem: "live",
LastItemOfPath: "test110",
RawQuery: "a=1",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1/live/test110?a=1",
},
// url中有端口设置默认端口
in{rawUrl: "rtmp://127.0.0.1:19350/live/test110?a=1", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1:19350/live/test110?a=1",
Scheme: "rtmp",
StdHost: "127.0.0.1:19350",
HostWithPort: "127.0.0.1:19350",
Host: "127.0.0.1",
Port: 19350,
PathWithRawQuery: "/live/test110?a=1",
Path: "/live/test110",
PathWithoutLastItem: "live",
LastItemOfPath: "test110",
RawQuery: "a=1",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1:19350/live/test110?a=1",
},
// 无path
in{rawUrl: "rtmp://127.0.0.1:19350", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1:19350",
Scheme: "rtmp",
StdHost: "127.0.0.1:19350",
HostWithPort: "127.0.0.1:19350",
Host: "127.0.0.1",
Port: 19350,
PathWithRawQuery: "",
Path: "",
PathWithoutLastItem: "",
LastItemOfPath: "",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1:19350",
},
// 无path2
in{rawUrl: "rtmp://127.0.0.1:19350/", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1:19350/",
Scheme: "rtmp",
StdHost: "127.0.0.1:19350",
HostWithPort: "127.0.0.1:19350",
Host: "127.0.0.1",
Port: 19350,
PathWithRawQuery: "/",
Path: "/",
PathWithoutLastItem: "",
LastItemOfPath: "",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1:19350/",
},
// path不完整
in{rawUrl: "rtmp://127.0.0.1:19350/live", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1:19350/live",
Scheme: "rtmp",
StdHost: "127.0.0.1:19350",
HostWithPort: "127.0.0.1:19350",
Host: "127.0.0.1",
Port: 19350,
PathWithRawQuery: "/live",
Path: "/live",
PathWithoutLastItem: "",
LastItemOfPath: "live",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1:19350/live",
},
// path不完整2
in{rawUrl: "rtmp://127.0.0.1:19350/live/", defaultPort: 1935}: {
Url: "rtmp://127.0.0.1:19350/live/",
Scheme: "rtmp",
StdHost: "127.0.0.1:19350",
HostWithPort: "127.0.0.1:19350",
Host: "127.0.0.1",
Port: 19350,
PathWithRawQuery: "/live/",
Path: "/live/",
PathWithoutLastItem: "live",
LastItemOfPath: "",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1:19350/live/",
},
}
for k, v := range golden {
ctx, err := base.ParseUrl(k.rawUrl, k.defaultPort)
assert.Equal(t, nil, err)
assert.Equal(t, v, ctx, k.rawUrl)
}
}
func TestParseRtmpUrl(t *testing.T) {
golden := map[string]base.UrlContext{
// 其他测试见ParseUrl
"rtmp://127.0.0.1/test110": {
Url: "rtmp://127.0.0.1/test110",
Scheme: "rtmp",
StdHost: "127.0.0.1",
HostWithPort: "127.0.0.1:1935",
Host: "127.0.0.1",
Port: 1935,
PathWithRawQuery: "/test110",
Path: "/test110",
PathWithoutLastItem: "test110",
LastItemOfPath: "",
RawQuery: "",
RawUrlWithoutUserInfo: "rtmp://127.0.0.1/test110",
},
}
for k, v := range golden {
ctx, err := base.ParseRtmpUrl(k)
assert.Equal(t, nil, err)
assert.Equal(t, v, ctx, k)
}
}
func TestParseRtspUrl(t *testing.T) {
golden := map[string]base.UrlContext{
// 其他测试见ParseUrl
"rtsp://admin:P!@1988@127.0.0.1:5554/h264/ch33/main/av_stream": {
Url: "rtsp://admin:P!@1988@127.0.0.1:5554/h264/ch33/main/av_stream",
Scheme: "rtsp",
Username: "admin",
Password: "P!@1988",
StdHost: "127.0.0.1:5554",
HostWithPort: "127.0.0.1:5554",
Host: "127.0.0.1",
Port: 5554,
PathWithRawQuery: "/h264/ch33/main/av_stream",
Path: "/h264/ch33/main/av_stream",
PathWithoutLastItem: "h264/ch33/main",
LastItemOfPath: "av_stream",
RawQuery: "",
RawUrlWithoutUserInfo: "rtsp://127.0.0.1:5554/h264/ch33/main/av_stream",
},
}
for k, v := range golden {
ctx, err := base.ParseRtspUrl(k)
assert.Equal(t, nil, err)
assert.Equal(t, v, ctx, k)
}
}