feat: provider interface + registry — factory pattern for multi-cloud
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type mockProvider struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (m *mockProvider) Name() string { return m.name }
|
||||
func (m *mockProvider) DisplayName() string { return "Mock" }
|
||||
func (m *mockProvider) ValidateAuth(ctx context.Context) error { return nil }
|
||||
func (m *mockProvider) Server() ServerService { return nil }
|
||||
func (m *mockProvider) Domain() DomainService { return nil }
|
||||
func (m *mockProvider) Storage() StorageService { return nil }
|
||||
func (m *mockProvider) CDN() CDNService { return nil }
|
||||
func (m *mockProvider) Billing() BillingService { return nil }
|
||||
|
||||
func TestRegistryRegisterAndNew(t *testing.T) {
|
||||
Register("mock", func(cfg ProviderConfig) (Provider, error) {
|
||||
return &mockProvider{name: "mock"}, nil
|
||||
})
|
||||
|
||||
p, err := New("mock", ProviderConfig{})
|
||||
if err != nil {
|
||||
t.Fatalf("New() error: %v", err)
|
||||
}
|
||||
if p.Name() != "mock" {
|
||||
t.Errorf("Name() = %q, want %q", p.Name(), "mock")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegistryUnknown(t *testing.T) {
|
||||
_, err := New("unknown", ProviderConfig{})
|
||||
if err == nil {
|
||||
t.Error("expected error for unknown provider")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegistryList(t *testing.T) {
|
||||
Register("list-test", func(cfg ProviderConfig) (Provider, error) {
|
||||
return &mockProvider{name: "list-test"}, nil
|
||||
})
|
||||
names := List()
|
||||
found := false
|
||||
for _, n := range names {
|
||||
if n == "list-test" {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("List() should contain 'list-test', got %v", names)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user