xfy 0790c5a9e4 test(e2e/testutil): 扩展测试工具包
添加配置生成、常量定义、测试设置、SSL 和 WebSocket 工具函数。
重构 container.go 支持函数式选项模式配置容器。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-23 14:51:11 +08:00

98 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//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,
}
}