mirror of
https://github.com/duke-git/lancet.git
synced 2025-09-27 03:45:58 +08:00
260 lines
5.3 KiB
Go
260 lines
5.3 KiB
Go
package netutil
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/duke-git/lancet/v2/internal"
|
|
)
|
|
|
|
func TestGetInternalIp(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestGetInternalIp")
|
|
|
|
internalIp := GetInternalIp()
|
|
ip := net.ParseIP(internalIp)
|
|
assert.IsNotNil(ip)
|
|
}
|
|
|
|
func TestGetRequestPublicIp(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestGetPublicIpInfo")
|
|
|
|
ip := "36.112.24.10"
|
|
|
|
request := http.Request{
|
|
Method: "GET",
|
|
Header: http.Header{
|
|
"X-Forwarded-For": {ip},
|
|
},
|
|
}
|
|
publicIp := GetRequestPublicIp(&request)
|
|
assert.Equal(publicIp, ip)
|
|
|
|
request = http.Request{
|
|
Method: "GET",
|
|
Header: http.Header{
|
|
"X-Real-Ip": {ip},
|
|
},
|
|
}
|
|
publicIp = GetRequestPublicIp(&request)
|
|
assert.Equal(publicIp, ip)
|
|
}
|
|
|
|
// func TestGetPublicIpInfo(t *testing.T) {
|
|
// assert := internal.NewAssert(t, "TestGetPublicIpInfo")
|
|
|
|
// publicIpInfo, err := GetPublicIpInfo()
|
|
// assert.IsNil(err)
|
|
|
|
// t.Logf("public ip info is: %+v \n", *publicIpInfo)
|
|
// }
|
|
|
|
func TestIsPublicIP(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestIsPublicIP")
|
|
|
|
ips := []net.IP{
|
|
net.ParseIP("127.0.0.1"),
|
|
net.ParseIP("192.168.0.1"),
|
|
net.ParseIP("10.91.210.131"),
|
|
net.ParseIP("172.20.16.1"),
|
|
net.ParseIP("36.112.24.10"),
|
|
}
|
|
|
|
expected := []bool{false, false, false, false, true}
|
|
|
|
for i := 0; i < len(ips); i++ {
|
|
actual := IsPublicIP(ips[i])
|
|
assert.Equal(expected[i], actual)
|
|
}
|
|
}
|
|
|
|
func TestIsInternalIP(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestIsInternalIP")
|
|
|
|
ips := []net.IP{
|
|
net.ParseIP("127.0.0.1"),
|
|
net.ParseIP("192.168.0.1"),
|
|
net.ParseIP("10.91.210.131"),
|
|
net.ParseIP("172.20.16.1"),
|
|
net.ParseIP("36.112.24.10"),
|
|
}
|
|
|
|
expected := []bool{true, true, true, true, false}
|
|
|
|
for i := 0; i < len(ips); i++ {
|
|
actual := IsInternalIP(ips[i])
|
|
assert.Equal(expected[i], actual)
|
|
}
|
|
}
|
|
|
|
func TestGetIps(t *testing.T) {
|
|
ips := GetIps()
|
|
t.Log(ips)
|
|
}
|
|
|
|
func TestGetMacAddrs(t *testing.T) {
|
|
macAddrs := GetMacAddrs()
|
|
t.Log(macAddrs)
|
|
}
|
|
|
|
func TestEncodeUrl(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestEncodeUrl")
|
|
|
|
urlAddr := "http://www.lancet.com?a=1&b=[2]"
|
|
encodedUrl, err := EncodeUrl(urlAddr)
|
|
if err != nil {
|
|
t.Fail()
|
|
}
|
|
|
|
expected := "http://www.lancet.com?a=1&b=%5B2%5D"
|
|
assert.Equal(expected, encodedUrl)
|
|
}
|
|
|
|
func TestIsPingConnected(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestIsPingConnected")
|
|
|
|
// in github action env, this will fail
|
|
// result1 := IsPingConnected("www.baidu.com")
|
|
// assert.Equal(true, result1)
|
|
|
|
result2 := IsPingConnected("www.!@#&&&.com")
|
|
assert.Equal(false, result2)
|
|
}
|
|
|
|
func TestTelnetConnected(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestTelnetConnected")
|
|
|
|
result1 := IsTelnetConnected("bing.com", "80")
|
|
assert.Equal(true, result1)
|
|
|
|
result2 := IsTelnetConnected("www.baidu.com", "123")
|
|
assert.Equal(false, result2)
|
|
}
|
|
|
|
func TestBuildUrl(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestBuildUrl")
|
|
|
|
tests := []struct {
|
|
scheme string
|
|
host string
|
|
path string
|
|
query map[string][]string
|
|
want string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
scheme: "http",
|
|
host: "www.test.com",
|
|
path: "/path/subpath",
|
|
query: map[string][]string{"a": {"1"}, "b": {"2"}},
|
|
want: "http://www.test.com/path/subpath?a=1&b=2",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
scheme: "http",
|
|
host: "www.test.com",
|
|
path: "/simple-path",
|
|
query: map[string][]string{"a": {"1"}, "b": {"2"}},
|
|
want: "http://www.test.com/simple-path?a=1&b=2",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
scheme: "http",
|
|
host: "www.test.com",
|
|
path: "",
|
|
query: map[string][]string{"a": {"foo", "bar"}, "b": {"baz"}},
|
|
want: "http://www.test.com/?a=foo&a=bar&b=baz",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
scheme: "https",
|
|
host: "www.test. com",
|
|
path: "/path",
|
|
query: nil,
|
|
want: "",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
scheme: "https",
|
|
host: "www.test.com",
|
|
path: "/path with spaces",
|
|
query: nil,
|
|
want: "https://www.test.com/path%20with%20spaces",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
scheme: "https",
|
|
host: "my.api.edu.cn",
|
|
path: "/api",
|
|
query: nil,
|
|
want: "https://my.api.edu.cn/api",
|
|
wantErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
got, err := BuildUrl(tt.scheme, tt.host, tt.path, tt.query)
|
|
assert.Equal(tt.want, got)
|
|
assert.Equal(tt.wantErr, err != nil)
|
|
}
|
|
|
|
}
|
|
|
|
func TestAddQueryParams(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestAddQueryParams")
|
|
|
|
tests := []struct {
|
|
url string
|
|
query map[string][]string
|
|
want string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
url: "http://www.test.com",
|
|
query: map[string][]string{"a": {"1"}, "b": {"2"}},
|
|
want: "http://www.test.com?a=1&b=2",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
url: "http://www.test.com",
|
|
query: map[string][]string{"a": {"foo", "bar"}, "b": {"baz"}},
|
|
want: "http://www.test.com?a=foo&a=bar&b=baz",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
url: "http://www.test.com",
|
|
query: map[string][]string{},
|
|
want: "http://www.test.com",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
url: "http://www.test.com",
|
|
query: map[string][]string{"a": {"$%"}},
|
|
want: "",
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
got, err := AddQueryParams(tt.url, tt.query)
|
|
assert.Equal(tt.want, got)
|
|
assert.Equal(tt.wantErr, err != nil)
|
|
}
|
|
}
|