116 lines
3.1 KiB
Go
116 lines
3.1 KiB
Go
package httpconfig
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"gitea.maximumdirect.net/ejr/feedkit/config"
|
|
"gitea.maximumdirect.net/ejr/feedkit/transport"
|
|
)
|
|
|
|
func TestParseUsesRequiredValuesAndDefaults(t *testing.T) {
|
|
got, err := Parse("test_driver", config.SourceConfig{
|
|
Name: " test-source ",
|
|
Params: map[string]any{
|
|
"user_agent": "test-agent",
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("Parse() error = %v", err)
|
|
}
|
|
if got.Name != "test-source" {
|
|
t.Fatalf("Name = %q, want test-source", got.Name)
|
|
}
|
|
if got.UserAgent != "test-agent" {
|
|
t.Fatalf("UserAgent = %q, want test-agent", got.UserAgent)
|
|
}
|
|
if got.Timeout != transport.DefaultHTTPTimeout {
|
|
t.Fatalf("Timeout = %s, want %s", got.Timeout, transport.DefaultHTTPTimeout)
|
|
}
|
|
if got.BodyLimitBytes != transport.DefaultHTTPResponseBodyLimitBytes {
|
|
t.Fatalf("BodyLimitBytes = %d, want %d", got.BodyLimitBytes, transport.DefaultHTTPResponseBodyLimitBytes)
|
|
}
|
|
}
|
|
|
|
func TestParseUsesAliasesAndOverrides(t *testing.T) {
|
|
got, err := Parse("test_driver", config.SourceConfig{
|
|
Name: "test-source",
|
|
Params: map[string]any{
|
|
"userAgent": "test-agent",
|
|
"http_timeout": "2s",
|
|
"http_response_body_limit_bytes": 2048,
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("Parse() error = %v", err)
|
|
}
|
|
if got.UserAgent != "test-agent" {
|
|
t.Fatalf("UserAgent = %q, want test-agent", got.UserAgent)
|
|
}
|
|
if got.Timeout != 2*time.Second {
|
|
t.Fatalf("Timeout = %s, want 2s", got.Timeout)
|
|
}
|
|
if got.BodyLimitBytes != 2048 {
|
|
t.Fatalf("BodyLimitBytes = %d, want 2048", got.BodyLimitBytes)
|
|
}
|
|
}
|
|
|
|
func TestParseRejectsInvalidConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
cfg config.SourceConfig
|
|
wantErr string
|
|
}{
|
|
{
|
|
name: "missing name",
|
|
cfg: config.SourceConfig{Params: map[string]any{"user_agent": "test-agent"}},
|
|
wantErr: "test_driver: name is required",
|
|
},
|
|
{
|
|
name: "missing params",
|
|
cfg: config.SourceConfig{Name: "test-source"},
|
|
wantErr: `test_driver "test-source": params are required`,
|
|
},
|
|
{
|
|
name: "missing user agent",
|
|
cfg: config.SourceConfig{Name: "test-source", Params: map[string]any{}},
|
|
wantErr: `test_driver "test-source": params.user_agent is required`,
|
|
},
|
|
{
|
|
name: "invalid timeout",
|
|
cfg: config.SourceConfig{
|
|
Name: "test-source",
|
|
Params: map[string]any{
|
|
"user_agent": "test-agent",
|
|
"http_timeout": "0s",
|
|
},
|
|
},
|
|
wantErr: `source "test-source": params.http_timeout must be a positive duration`,
|
|
},
|
|
{
|
|
name: "invalid body limit",
|
|
cfg: config.SourceConfig{
|
|
Name: "test-source",
|
|
Params: map[string]any{
|
|
"user_agent": "test-agent",
|
|
"http_response_body_limit_bytes": 0,
|
|
},
|
|
},
|
|
wantErr: `source "test-source": params.http_response_body_limit_bytes must be a positive integer`,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
_, err := Parse("test_driver", tt.cfg)
|
|
if err == nil {
|
|
t.Fatalf("Parse() error = nil, want %q", tt.wantErr)
|
|
}
|
|
if !strings.Contains(err.Error(), tt.wantErr) {
|
|
t.Fatalf("Parse() error = %q, want %q", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|