package router import ( "context" "errors" "testing" config "cloud.campbellwireless.net/git/barkstack/barkfile-parser" ) 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) } }