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,199 @@
|
||||
package recorder
|
||||
|
||||
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 TestParseRecorder_Nil(t *testing.T) {
|
||||
r := ParseRecorder(nil)
|
||||
if r != nil {
|
||||
t.Fatal("expected nil for nil config")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_PluginHTTP(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "http-rec",
|
||||
Plugin: &config.PluginConfig{
|
||||
Type: "http",
|
||||
Addr: "127.0.0.1:9000",
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_PluginGRPC(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "grpc-rec",
|
||||
Plugin: &config.PluginConfig{
|
||||
Type: "grpc",
|
||||
Addr: "127.0.0.1:9001",
|
||||
Token: "secret",
|
||||
TLS: &config.TLSConfig{
|
||||
Secure: true,
|
||||
ServerName: "recorder.local",
|
||||
},
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_PluginDefaultType(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "default-rec",
|
||||
Plugin: &config.PluginConfig{
|
||||
Addr: "127.0.0.1:9002",
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_TCP(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "tcp-rec",
|
||||
TCP: &config.TCPRecorder{
|
||||
Addr: "127.0.0.1:9999",
|
||||
Timeout: 0,
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for TCP")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_HTTP(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "http-rec",
|
||||
HTTP: &config.HTTPRecorder{
|
||||
URL: "http://localhost:8080/record",
|
||||
Timeout: 0,
|
||||
Header: map[string]string{"X-Test": "value"},
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for HTTP")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_File(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "file-rec",
|
||||
File: &config.FileRecorder{
|
||||
Path: "/tmp/recorder.log",
|
||||
Sep: "\n",
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for file")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_FileWithRotation(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "file-rot-rec",
|
||||
File: &config.FileRecorder{
|
||||
Path: "/tmp/recorder-rot.log",
|
||||
Rotation: &config.LogRotationConfig{
|
||||
MaxSize: 100,
|
||||
MaxAge: 30,
|
||||
MaxBackups: 10,
|
||||
LocalTime: true,
|
||||
Compress: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for file with rotation")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_RedisSet(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "redis-set-rec",
|
||||
Redis: &config.RedisRecorder{
|
||||
Addr: "127.0.0.1:6379",
|
||||
Key: "recorder-set",
|
||||
Type: "set",
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for redis set")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_RedisList(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "redis-list-rec",
|
||||
Redis: &config.RedisRecorder{
|
||||
Addr: "127.0.0.1:6379",
|
||||
Key: "recorder-list",
|
||||
Type: "list",
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for redis list")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_RedisSortedSet(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "redis-sset-rec",
|
||||
Redis: &config.RedisRecorder{
|
||||
Addr: "127.0.0.1:6379",
|
||||
Key: "recorder-sset",
|
||||
Type: "sset",
|
||||
},
|
||||
})
|
||||
if r == nil {
|
||||
t.Fatal("expected non-nil recorder for redis sorted set")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_EmptyFileReturnsNil(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "empty-rec",
|
||||
})
|
||||
if r != nil {
|
||||
t.Fatal("expected nil recorder when no sub-config is provided")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_FileWithEmptyPathReturnsNil(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "empty-path-rec",
|
||||
File: &config.FileRecorder{
|
||||
Path: "",
|
||||
},
|
||||
})
|
||||
if r != nil {
|
||||
t.Fatal("expected nil recorder when file path is empty")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseRecorder_TCPWithEmptyAddrReturnsNil(t *testing.T) {
|
||||
r := ParseRecorder(&config.RecorderConfig{
|
||||
Name: "empty-tcp-rec",
|
||||
TCP: &config.TCPRecorder{
|
||||
Addr: "",
|
||||
},
|
||||
})
|
||||
if r != nil {
|
||||
t.Fatal("expected nil recorder when TCP addr is empty")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user