test(parsing): add 229 unit tests across 18 config/parsing packages
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.
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
package resolver
|
||||
|
||||
import (
|
||||
"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 TestParseResolver_Nil(t *testing.T) {
|
||||
r, err := ParseResolver(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r != nil {
|
||||
t.Fatal("expected nil for nil config")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_PluginHTTP(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "http-res",
|
||||
Plugin: &config.PluginConfig{
|
||||
Type: "http",
|
||||
Addr: "127.0.0.1:9000",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_PluginGRPC(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "grpc-res",
|
||||
Plugin: &config.PluginConfig{
|
||||
Type: "grpc",
|
||||
Addr: "127.0.0.1:9001",
|
||||
Token: "secret",
|
||||
TLS: &config.TLSConfig{
|
||||
Secure: true,
|
||||
ServerName: "resolver.local",
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_PluginDefaultType(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "default-res",
|
||||
Plugin: &config.PluginConfig{
|
||||
Addr: "127.0.0.1:9002",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_WithNameservers(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "ns-res",
|
||||
Nameservers: []*config.NameserverConfig{
|
||||
{Addr: "8.8.8.8", Prefer: "ipv4"},
|
||||
{Addr: "8.8.4.4", Prefer: "ipv4"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_EmptyNameservers(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "empty-ns",
|
||||
Nameservers: []*config.NameserverConfig{},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver even with empty nameservers")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_NameserverWithClientIP(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "clientip-res",
|
||||
Nameservers: []*config.NameserverConfig{
|
||||
{Addr: "8.8.8.8", ClientIP: "1.2.3.4"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolver_NameserverWithAllFields(t *testing.T) {
|
||||
r, err := ParseResolver(&config.ResolverConfig{
|
||||
Name: "full-res",
|
||||
Nameservers: []*config.NameserverConfig{
|
||||
{
|
||||
Addr: "8.8.8.8:53",
|
||||
Chain: "chain1",
|
||||
Prefer: "ipv4",
|
||||
ClientIP: "1.2.3.4",
|
||||
Hostname: "dns.example.com",
|
||||
TTL: 300,
|
||||
Timeout: 5,
|
||||
Async: true,
|
||||
Only: "A",
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil resolver")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user