diff --git a/transport/internet/tls/ech_test.go b/transport/internet/tls/ech_test.go new file mode 100644 index 00000000..f0bb3c56 --- /dev/null +++ b/transport/internet/tls/ech_test.go @@ -0,0 +1,43 @@ +package tls_test + +import ( + "io" + "net/http" + "strings" + "sync" + "testing" + + "github.com/xtls/xray-core/common" + . "github.com/xtls/xray-core/transport/internet/tls" +) + +func TestECHDial(t *testing.T) { + config := &Config{ + ServerName: "encryptedsni.com", + EchConfigList: "udp://1.1.1.1", + } + // test concurrent Dial(to test cache problem) + wg := sync.WaitGroup{} + for range 10 { + wg.Add(1) + go func() { + TLSConfig := config.GetTLSConfig() + TLSConfig.NextProtos = []string{"http/1.1"} + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: TLSConfig, + }, + } + resp, err := client.Get("https://encryptedsni.com/cdn-cgi/trace") + common.Must(err) + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + common.Must(err) + if !strings.Contains(string(body), "sni=encrypted") { + t.Error("ECH Dial success but SNI is not encrypted") + } + wg.Done() + }() + } + wg.Wait() +}