github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/environs/config_test.go (about)

     1  // Copyright 2011, 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package environs_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/environs"
    11  	"github.com/juju/juju/provider/dummy"
    12  	_ "github.com/juju/juju/provider/manual"
    13  	"github.com/juju/juju/testing"
    14  )
    15  
    16  type suite struct {
    17  	testing.FakeJujuXDGDataHomeSuite
    18  }
    19  
    20  var _ = gc.Suite(&suite{})
    21  
    22  func (s *suite) SetUpTest(c *gc.C) {
    23  	s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
    24  	s.AddCleanup(dummy.Reset)
    25  }
    26  
    27  // dummySampleConfig returns the dummy sample config without
    28  // the controller configured.
    29  // This function also exists in cloudconfig/userdata_test
    30  // Maybe place it in dummy and export it?
    31  func dummySampleConfig() testing.Attrs {
    32  	return dummy.SampleConfig().Merge(testing.Attrs{
    33  		"controller": false,
    34  	})
    35  }
    36  
    37  type dummyProvider struct {
    38  	environs.EnvironProvider
    39  }
    40  
    41  func (s *suite) TestRegisterProvider(c *gc.C) {
    42  	s.PatchValue(environs.Providers, make(map[string]environs.EnvironProvider))
    43  	s.PatchValue(environs.ProviderAliases, make(map[string]string))
    44  	type step struct {
    45  		name    string
    46  		aliases []string
    47  		err     string
    48  	}
    49  	type test []step
    50  
    51  	tests := []test{
    52  		[]step{{
    53  			name: "providerName",
    54  		}},
    55  		[]step{{
    56  			name:    "providerName",
    57  			aliases: []string{"providerName"},
    58  			err:     "juju: duplicate provider alias \"providerName\"",
    59  		}},
    60  		[]step{{
    61  			name:    "providerName",
    62  			aliases: []string{"providerAlias", "providerAlias"},
    63  			err:     "juju: duplicate provider alias \"providerAlias\"",
    64  		}},
    65  		[]step{{
    66  			name:    "providerName",
    67  			aliases: []string{"providerAlias1", "providerAlias2"},
    68  		}},
    69  		[]step{{
    70  			name: "providerName",
    71  		}, {
    72  			name: "providerName",
    73  			err:  "juju: duplicate provider name \"providerName\"",
    74  		}},
    75  		[]step{{
    76  			name: "providerName1",
    77  		}, {
    78  			name:    "providerName2",
    79  			aliases: []string{"providerName"},
    80  		}},
    81  		[]step{{
    82  			name: "providerName1",
    83  		}, {
    84  			name:    "providerName2",
    85  			aliases: []string{"providerName1"},
    86  			err:     "juju: duplicate provider alias \"providerName1\"",
    87  		}},
    88  	}
    89  
    90  	registerProvider := func(name string, aliases []string) (err error) {
    91  		defer func() { err, _ = recover().(error) }()
    92  		registered := &dummyProvider{}
    93  		environs.RegisterProvider(name, registered, aliases...)
    94  		p, err := environs.Provider(name)
    95  		c.Assert(err, jc.ErrorIsNil)
    96  		c.Assert(p, gc.Equals, registered)
    97  		for _, alias := range aliases {
    98  			p, err := environs.Provider(alias)
    99  			c.Assert(err, jc.ErrorIsNil)
   100  			c.Assert(p, gc.Equals, registered)
   101  			c.Assert(p, gc.Equals, registered)
   102  		}
   103  		return nil
   104  	}
   105  	for i, test := range tests {
   106  		c.Logf("test %d: %v", i, test)
   107  		for k := range *environs.Providers {
   108  			delete(*environs.Providers, k)
   109  		}
   110  		for k := range *environs.ProviderAliases {
   111  			delete(*environs.ProviderAliases, k)
   112  		}
   113  		for _, step := range test {
   114  			err := registerProvider(step.name, step.aliases)
   115  			if step.err == "" {
   116  				c.Assert(err, jc.ErrorIsNil)
   117  			} else {
   118  				c.Assert(err, gc.ErrorMatches, step.err)
   119  			}
   120  		}
   121  	}
   122  }