Files
telemt-api/internal/config/config_test.go
T
Denozordec 04c257a84e
Publish telemt-api gateway Docker image / test (push) Successful in 25s
Publish telemt-api gateway Docker image / build-and-push (push) Successful in 1m19s
Add CORS support and response caching to aggregate endpoints
- Introduced CORS configuration options in config.example.yaml, allowing specification of allowed origins for cross-origin requests.
- Enhanced the aggregate handler to support response caching with a configurable TTL, improving performance for repeated requests.
- Updated the aggregate API to return a structured response indicating whether any upstream requests failed, enhancing error handling and response clarity.
- Modified documentation in AGGREGATE.md and README.md to reflect the new CORS and caching features.
- Added tests to validate the new functionality in the aggregate handler.
2026-03-30 10:02:16 +07:00

117 lines
2.3 KiB
Go

package config
import (
"os"
"path/filepath"
"testing"
)
func TestLoadExample(t *testing.T) {
dir := t.TempDir()
p := filepath.Join(dir, "cfg.yaml")
if err := os.WriteFile(p, []byte(`
listen: ":0"
allow_all: true
servers:
- alias: main_srv
base_url: http://127.0.0.1:9091
`), 0644); err != nil {
t.Fatal(err)
}
c, err := Load(p)
if err != nil {
t.Fatal(err)
}
if c.Listen != ":0" {
t.Fatalf("listen: %q", c.Listen)
}
_, err = c.Parse()
if err != nil {
t.Fatal(err)
}
}
func TestParseCIDRorIP(t *testing.T) {
for _, tc := range []struct {
in string
want string
}{
{"87.103.241.8", "87.103.241.8/32"},
{"87.103.241.8/32", "87.103.241.8/32"},
{"10.0.0.0/8", "10.0.0.0/8"},
{"2001:db8::1", "2001:db8::1/128"},
} {
p, err := parseCIDROrIP(tc.in)
if err != nil {
t.Fatalf("%q: %v", tc.in, err)
}
if p.String() != tc.want {
t.Fatalf("%q: got %s want %s", tc.in, p, tc.want)
}
}
}
func TestValidateDuplicateAlias(t *testing.T) {
c := &Config{
Servers: []Server{
{Alias: "a", BaseURL: "http://x:1"},
{Alias: "a", BaseURL: "http://y:2"},
},
}
if err := c.Validate(); err == nil {
t.Fatal("expected error")
}
}
func TestValidateReservedAggAlias(t *testing.T) {
c := &Config{
Servers: []Server{
{Alias: "agg", BaseURL: "http://x:1"},
},
}
if err := c.Validate(); err == nil {
t.Fatal("expected error for reserved alias agg")
}
}
func TestValidateAggregateIncludeAliases(t *testing.T) {
c := &Config{
Servers: []Server{
{Alias: "a", BaseURL: "http://x:1"},
},
Aggregate: &AggregateConfig{
IncludeAliases: []string{"a"},
},
}
if err := c.Validate(); err != nil {
t.Fatal(err)
}
c2 := &Config{
Servers: []Server{
{Alias: "a", BaseURL: "http://x:1"},
},
Aggregate: &AggregateConfig{
IncludeAliases: []string{"nope"},
},
}
if err := c2.Validate(); err == nil {
t.Fatal("expected error for unknown include alias")
}
}
func TestValidateAggregateCacheTTL(t *testing.T) {
c := &Config{
Servers: []Server{
{Alias: "a", BaseURL: "http://x:1"},
},
Aggregate: &AggregateConfig{CacheTTLMs: 60001},
}
if err := c.Validate(); err == nil {
t.Fatal("expected error for cache_ttl_ms > 60000")
}
c.Aggregate.CacheTTLMs = 1000
if err := c.Validate(); err != nil {
t.Fatal(err)
}
}