Add global Authenticate() function.
Also finishes work started in last commit.
diff --git a/provider.go b/provider.go
index 08bdfbe..c741c4c 100644
--- a/provider.go
+++ b/provider.go
@@ -1,12 +1,17 @@
package gophercloud
+// Provider structures exist for each tangible provider of OpenStack service.
+// For example, Rackspace, Hewlett-Packard, and NASA might have their own instance of this structure.
+//
+// At a minimum, a provider must expose an authentication endpoint.
type Provider struct {
AuthEndpoint string
}
-var providerMap = make(map[string]*Provider)
-
-func (c *Context) RegisterProvider(name string, p *Provider) error {
+// RegisterProvider allows a unit test to register a mythical provider convenient for testing.
+// If the provider structure lacks adequate configuration, or the configuration given has some
+// detectable error, an ErrConfiguration error will result.
+func (c *Context) RegisterProvider(name string, p Provider) error {
if p.AuthEndpoint == "" {
return ErrConfiguration
}
@@ -15,11 +20,13 @@
return nil
}
-func (c *Context) ProviderByName(name string) (p *Provider, err error) {
+// ProviderByName will locate a provider amongst those previously registered, if it exists.
+// If the named provider has not been registered, an ErrProvider error will result.
+func (c *Context) ProviderByName(name string) (p Provider, err error) {
for provider, descriptor := range c.providerMap {
if name == provider {
return descriptor, nil
}
}
- return nil, ErrProvider
+ return Provider{}, ErrProvider
}