Files
lancet/netutil/net_test.go
2025-06-23 11:31:54 +08:00

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)
}
}