2b1e4ca3a7
Covering nil-input safety, plugin backends (HTTP/gRPC/default), loaders (File/HTTP/Redis), selector strategies, edge cases (empty/invalid inputs), and hop-to-node metadata inheritance. All tests passing.
104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
package parsing
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/tls"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/go-gost/core/logger"
|
|
"github.com/go-gost/x/config"
|
|
xlogger "github.com/go-gost/x/logger"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
logger.SetDefault(xlogger.NewLogger(xlogger.OutputOption(io.Discard)))
|
|
m.Run()
|
|
}
|
|
|
|
func TestSetDefaultTLSConfig(t *testing.T) {
|
|
// Save and restore original
|
|
orig := DefaultTLSConfig()
|
|
defer SetDefaultTLSConfig(orig)
|
|
|
|
cfg := &tls.Config{ServerName: "test.local"}
|
|
SetDefaultTLSConfig(cfg)
|
|
|
|
got := DefaultTLSConfig()
|
|
if got == nil {
|
|
t.Fatal("expected non-nil default TLS config")
|
|
}
|
|
if got.ServerName != "test.local" {
|
|
t.Fatalf("ServerName = %q, want %q", got.ServerName, "test.local")
|
|
}
|
|
}
|
|
|
|
func TestDefaultTLSConfig_InitiallyNil(t *testing.T) {
|
|
orig := DefaultTLSConfig()
|
|
defer SetDefaultTLSConfig(orig)
|
|
|
|
// Store nil to reset
|
|
SetDefaultTLSConfig(nil)
|
|
|
|
got := DefaultTLSConfig()
|
|
if got != nil {
|
|
t.Fatal("expected nil after storing nil")
|
|
}
|
|
}
|
|
|
|
func TestBuildDefaultTLSConfig_Nil(t *testing.T) {
|
|
// BuildDefaultTLSConfig with nil should generate a self-signed cert
|
|
tlsCfg, err := BuildDefaultTLSConfig(nil)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if tlsCfg == nil {
|
|
t.Fatal("expected non-nil config")
|
|
}
|
|
if len(tlsCfg.Certificates) == 0 {
|
|
t.Fatal("expected at least one certificate")
|
|
}
|
|
}
|
|
|
|
func TestBuildDefaultTLSConfig_WithOptions(t *testing.T) {
|
|
cfg := &config.TLSConfig{
|
|
Validity: 0, // uses default
|
|
Organization: "TestOrg",
|
|
CommonName: "test.example.com",
|
|
}
|
|
tlsCfg, err := BuildDefaultTLSConfig(cfg)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if tlsCfg == nil {
|
|
t.Fatal("expected non-nil config")
|
|
}
|
|
if len(tlsCfg.Certificates) == 0 {
|
|
t.Fatal("expected at least one certificate")
|
|
}
|
|
}
|
|
|
|
func TestBuildDefaultTLSConfig_TwoCallsDifferentCerts(t *testing.T) {
|
|
cfg1, err := BuildDefaultTLSConfig(nil)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
cfg2, err := BuildDefaultTLSConfig(nil)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(cfg1.Certificates) == 0 || len(cfg2.Certificates) == 0 {
|
|
t.Fatal("expected certificates in both configs")
|
|
}
|
|
|
|
// Each call generates a random cert; they should have different raw bytes.
|
|
if len(cfg1.Certificates[0].Certificate) == 0 || len(cfg2.Certificates[0].Certificate) == 0 {
|
|
t.Fatal("expected non-empty certificate raw bytes")
|
|
}
|
|
c1 := cfg1.Certificates[0].Certificate[0]
|
|
c2 := cfg2.Certificates[0].Certificate[0]
|
|
if bytes.Equal(c1, c2) {
|
|
t.Fatal("expected different certificates from two calls")
|
|
}
|
|
}
|