github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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 }