merge 1B wave: worktree-agent-a59d2fd8fdbcc99aa
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user