128 lines
2.4 KiB
Go
128 lines
2.4 KiB
Go
package handlers
|
|
|
|
import "testing"
|
|
|
|
func Test_secureAddr(t *testing.T) {
|
|
type args struct {
|
|
str string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantErr bool
|
|
}{
|
|
// 有效的公网 IP 地址
|
|
{
|
|
name: "有效公网IPv4地址",
|
|
args: args{str: "203.0.113.1"},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "有效公网IPv6地址",
|
|
args: args{str: "2001:db8::1"},
|
|
wantErr: false,
|
|
},
|
|
|
|
// 私有地址
|
|
{
|
|
name: "IPv4私有地址(10.x.x.x)",
|
|
args: args{str: "10.0.0.1"},
|
|
wantErr: false, // 取决于需求,通常私有地址是被允许的全局单播地址
|
|
},
|
|
{
|
|
name: "IPv4私有地址(172.16.x.x)",
|
|
args: args{str: "172.16.0.1"},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "IPv4私有地址(192.168.x.x)",
|
|
args: args{str: "192.168.0.1"},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "IPv6私有地址(ULA)",
|
|
args: args{str: "fd00::1"},
|
|
wantErr: false,
|
|
},
|
|
|
|
// 广播地址
|
|
{
|
|
name: "IPv4本地广播地址",
|
|
args: args{str: "255.255.255.255"},
|
|
wantErr: true,
|
|
},
|
|
|
|
// 未指定地址
|
|
{
|
|
name: "IPv4未指定地址",
|
|
args: args{str: "0.0.0.0"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "IPv6未指定地址",
|
|
args: args{str: "::"},
|
|
wantErr: true,
|
|
},
|
|
|
|
// 回环地址
|
|
{
|
|
name: "IPv4回环地址",
|
|
args: args{str: "127.0.0.1"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "IPv6回环地址",
|
|
args: args{str: "::1"},
|
|
wantErr: true,
|
|
},
|
|
|
|
// 组播地址
|
|
{
|
|
name: "IPv4组播地址",
|
|
args: args{str: "224.0.0.1"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "IPv6组播地址",
|
|
args: args{str: "ff00::1"},
|
|
wantErr: true,
|
|
},
|
|
|
|
// 链路本地地址
|
|
{
|
|
name: "IPv4链路本地地址",
|
|
args: args{str: "169.254.0.1"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "IPv6链路本地地址",
|
|
args: args{str: "fe80::1"},
|
|
wantErr: true,
|
|
},
|
|
|
|
// 格式错误的地址
|
|
{
|
|
name: "格式错误的IP地址",
|
|
args: args{str: "not-an-ip"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "不完整的IP地址",
|
|
args: args{str: "192.168.0"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "超出范围的IP地址",
|
|
args: args{str: "256.256.256.256"},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if err := secureAddr(tt.args.str); (err != nil) != tt.wantErr {
|
|
t.Errorf("secureAddr() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|