Files
pawsql/internal/router/routes_test.go
Shaun Campbell 865f7c26c9
All checks were successful
Build and Push Image / docker-build-and-push (push) Successful in 2m28s
feat: add PawSQL docs examples and image CI
2026-09-15 18:49:26 -04:00

65 lines
2.1 KiB
Go

package router
import (
"context"
"errors"
"testing"
"github.com/barkstack/pawsql/internal/config"
)
func TestStaticResolverRoutesCaseInsensitiveHostnames(t *testing.T) {
resolver, err := NewStaticResolver([]config.DatabaseConfig{
{Name: "foo", Hostname: "foo.pawsql.barkstack.dev", Upstream: "postgres-foo:5432"},
{Name: "bar", Hostname: "bar.pawsql.barkstack.dev", Upstream: "postgres-bar:5432"},
})
if err != nil {
t.Fatalf("NewStaticResolver() error = %v", err)
}
for _, test := range []struct{ hostname, name, address string }{
{"FOO.pawsql.barkstack.dev", "foo", "postgres-foo:5432"},
{"bar.pawsql.barkstack.dev", "bar", "postgres-bar:5432"},
} {
backend, err := resolver.Resolve(context.Background(), test.hostname)
if err != nil {
t.Errorf("Resolve(%q) error = %v", test.hostname, err)
continue
}
if backend.DatabaseName != test.name || backend.Address != test.address {
t.Errorf("Resolve(%q) = %#v", test.hostname, backend)
}
}
}
func TestStaticResolverRejectsUnknownHostname(t *testing.T) {
resolver, err := NewStaticResolver([]config.DatabaseConfig{{Name: "foo", Hostname: "foo.pawsql.barkstack.dev", Upstream: "postgres-foo:5432"}})
if err != nil {
t.Fatal(err)
}
_, err = resolver.Resolve(context.Background(), "unknown.pawsql.barkstack.dev")
if !errors.Is(err, ErrUnknownHostname) {
t.Errorf("Resolve() error = %v, want ErrUnknownHostname", err)
}
}
func TestStaticResolverRoutesConfiguredDatabase(t *testing.T) {
resolver, err := NewStaticResolver([]config.DatabaseConfig{
{Name: "analytics", Upstream: "postgres-shared:5432"},
{Name: "app", Hostname: "app.pawsql.barkstack.dev", Upstream: "postgres-shared:5432"},
})
if err != nil {
t.Fatal(err)
}
backend, err := resolver.ResolveDatabase(context.Background(), "analytics")
if err != nil {
t.Fatal(err)
}
if backend.DatabaseName != "analytics" || backend.Address != "postgres-shared:5432" {
t.Errorf("ResolveDatabase() = %#v", backend)
}
_, err = resolver.ResolveDatabase(context.Background(), "unknown")
if !errors.Is(err, ErrUnknownDatabase) {
t.Errorf("ResolveDatabase() error = %v, want ErrUnknownDatabase", err)
}
}