merge 1B wave: worktree-agent-a59d2fd8fdbcc99aa

This commit is contained in:
2026-07-03 14:03:05 +07:00
2 changed files with 63 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
package registry
import (
"fmt"
"github.com/vasyakrg/dns-autoresolver/internal/provider"
)
// Registry resolves providers by name.
type Registry struct {
m map[string]provider.Provider
}
func New() *Registry {
return &Registry{m: make(map[string]provider.Provider)}
}
func (r *Registry) Register(p provider.Provider) {
r.m[p.Name()] = p
}
func (r *Registry) ByName(name string) (provider.Provider, error) {
p, ok := r.m[name]
if !ok {
return nil, fmt.Errorf("registry: unknown provider %q", name)
}
return p, nil
}
@@ -0,0 +1,35 @@
package registry
import (
"context"
"testing"
"github.com/vasyakrg/dns-autoresolver/internal/diff"
"github.com/vasyakrg/dns-autoresolver/internal/model"
"github.com/vasyakrg/dns-autoresolver/internal/provider"
)
type fakeProvider struct{ name string }
func (f fakeProvider) Name() string { return f.name }
func (fakeProvider) ListZones(context.Context, provider.Credentials) ([]provider.Zone, error) {
return nil, nil
}
func (fakeProvider) GetRecords(context.Context, provider.Credentials, string) ([]model.Record, error) {
return nil, nil
}
func (fakeProvider) ApplyChanges(context.Context, provider.Credentials, string, diff.Changeset) error {
return nil
}
func TestRegistryByName(t *testing.T) {
r := New()
r.Register(fakeProvider{name: "selectel"})
p, err := r.ByName("selectel")
if err != nil || p.Name() != "selectel" {
t.Fatalf("expected selectel, got %v err=%v", p, err)
}
if _, err := r.ByName("unknown"); err == nil {
t.Fatal("expected error for unknown provider")
}
}