|
|
@@ -1,7 +1,9 @@
|
|
|
package strmatcher_test
|
|
|
|
|
|
import (
|
|
|
+ "reflect"
|
|
|
"testing"
|
|
|
+ "unsafe"
|
|
|
|
|
|
"github.com/v2fly/v2ray-core/v5/common"
|
|
|
. "github.com/v2fly/v2ray-core/v5/common/strmatcher"
|
|
|
@@ -71,3 +73,77 @@ func TestMatcher(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestToDomain(t *testing.T) {
|
|
|
+ { // Test normal ASCII domain, which should not trigger new string data allocation
|
|
|
+ input := "v2fly.org"
|
|
|
+ domain, err := ToDomain(input)
|
|
|
+ if err != nil {
|
|
|
+ t.Error("unexpected error: ", err)
|
|
|
+ }
|
|
|
+ if domain != input {
|
|
|
+ t.Error("unexpected output: ", domain, " for test case ", input)
|
|
|
+ }
|
|
|
+ if (*reflect.StringHeader)(unsafe.Pointer(&input)).Data != (*reflect.StringHeader)(unsafe.Pointer(&domain)).Data {
|
|
|
+ t.Error("different string data of output: ", domain, " and test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test ASCII domain containing upper case letter, which should be converted to lower case
|
|
|
+ input := "v2FLY.oRg"
|
|
|
+ domain, err := ToDomain(input)
|
|
|
+ if err != nil {
|
|
|
+ t.Error("unexpected error: ", err)
|
|
|
+ }
|
|
|
+ if domain != "v2fly.org" {
|
|
|
+ t.Error("unexpected output: ", domain, " for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test internationalized domain, which should be translated to ASCII punycode
|
|
|
+ input := "v2fly.公益"
|
|
|
+ domain, err := ToDomain(input)
|
|
|
+ if err != nil {
|
|
|
+ t.Error("unexpected error: ", err)
|
|
|
+ }
|
|
|
+ if domain != "v2fly.xn--55qw42g" {
|
|
|
+ t.Error("unexpected output: ", domain, " for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test internationalized domain containing upper case letter
|
|
|
+ input := "v2FLY.公益"
|
|
|
+ domain, err := ToDomain(input)
|
|
|
+ if err != nil {
|
|
|
+ t.Error("unexpected error: ", err)
|
|
|
+ }
|
|
|
+ if domain != "v2fly.xn--55qw42g" {
|
|
|
+ t.Error("unexpected output: ", domain, " for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test domain name of invalid character, which should return with error
|
|
|
+ input := "{"
|
|
|
+ _, err := ToDomain(input)
|
|
|
+ if err == nil {
|
|
|
+ t.Error("unexpected non error for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test domain name containing a space, which should return with error
|
|
|
+ input := "Mijia Cloud"
|
|
|
+ _, err := ToDomain(input)
|
|
|
+ if err == nil {
|
|
|
+ t.Error("unexpected non error for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test domain name containing an underscore, which should return with error
|
|
|
+ input := "Mijia_Cloud.com"
|
|
|
+ _, err := ToDomain(input)
|
|
|
+ if err == nil {
|
|
|
+ t.Error("unexpected non error for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ { // Test internationalized domain containing invalid character
|
|
|
+ input := "Mijia Cloud.公司"
|
|
|
+ _, err := ToDomain(input)
|
|
|
+ if err == nil {
|
|
|
+ t.Error("unexpected non error for test case ", input)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|