- 删除 loadbalance_e2e_test.go 中未使用的 encoding/json 导入 - 删除 ssl_e2e_test.go 中未使用的 net/http 导入 - 格式化 testutil/config.go 中的结构体字段对齐 - 为多个文件添加末尾换行符 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
99 lines
2.2 KiB
Go
99 lines
2.2 KiB
Go
//go:build e2e
|
||
|
||
// Package testutil 提供 E2E 测试的工具函数。
|
||
//
|
||
// 包含 SSL/TLS 测试辅助函数。
|
||
//
|
||
// 作者:xfy
|
||
package testutil
|
||
|
||
import (
|
||
"crypto/tls"
|
||
"crypto/x509"
|
||
"net/http"
|
||
"os"
|
||
"time"
|
||
)
|
||
|
||
// CreateTLSClient 创建信任指定证书的 HTTPS 客户端。
|
||
//
|
||
// 参数:
|
||
// - certPath: CA 证书文件路径
|
||
//
|
||
// 返回配置好的 HTTP 客户端,信任指定的证书。
|
||
func CreateTLSClient(certPath string) (*http.Client, error) {
|
||
caCert, err := os.ReadFile(certPath)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
caCertPool := x509.NewCertPool()
|
||
caCertPool.AppendCertsFromPEM(caCert)
|
||
|
||
return &http.Client{
|
||
Timeout: DefaultClientTimeout,
|
||
Transport: &http.Transport{
|
||
TLSClientConfig: &tls.Config{
|
||
RootCAs: caCertPool,
|
||
},
|
||
},
|
||
}, nil
|
||
}
|
||
|
||
// CreateTLSClientWithVersion 创建带版本限制的 HTTPS 客户端。
|
||
//
|
||
// 参数:
|
||
// - certPath: CA 证书文件路径
|
||
// - minVersion: 最小 TLS 版本
|
||
// - maxVersion: 最大 TLS 版本
|
||
func CreateTLSClientWithVersion(certPath string, minVersion, maxVersion uint16) (*http.Client, error) {
|
||
caCert, err := os.ReadFile(certPath)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
caCertPool := x509.NewCertPool()
|
||
caCertPool.AppendCertsFromPEM(caCert)
|
||
|
||
return &http.Client{
|
||
Timeout: DefaultClientTimeout,
|
||
Transport: &http.Transport{
|
||
TLSClientConfig: &tls.Config{
|
||
RootCAs: caCertPool,
|
||
MinVersion: minVersion,
|
||
MaxVersion: maxVersion,
|
||
},
|
||
},
|
||
}, nil
|
||
}
|
||
|
||
// CreateInsecureTLSClient 创建跳过证书验证的 HTTPS 客户端。
|
||
//
|
||
// 用于测试自签名证书场景,不应在生产环境使用。
|
||
func CreateInsecureTLSClient() *http.Client {
|
||
return &http.Client{
|
||
Timeout: DefaultClientTimeout,
|
||
Transport: &http.Transport{
|
||
TLSClientConfig: &tls.Config{
|
||
InsecureSkipVerify: true,
|
||
},
|
||
},
|
||
}
|
||
}
|
||
|
||
// CreateDefaultHTTPClient 创建默认 HTTP 客户端。
|
||
//
|
||
// 用于非 SSL 测试场景。
|
||
func CreateDefaultHTTPClient() *http.Client {
|
||
return &http.Client{
|
||
Timeout: DefaultClientTimeout,
|
||
}
|
||
}
|
||
|
||
// CreateHTTPClientWithTimeout 创建带自定义超时的 HTTP 客户端。
|
||
func CreateHTTPClientWithTimeout(timeout time.Duration) *http.Client {
|
||
return &http.Client{
|
||
Timeout: timeout,
|
||
}
|
||
}
|