github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/agent/fanconfigurer/fanconfigurer_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package fanconfigurer_test 5 6 import ( 7 "fmt" 8 9 "github.com/juju/cmd/cmdtesting" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/juju/names.v2" 13 14 "github.com/juju/juju/apiserver/common" 15 "github.com/juju/juju/apiserver/facades/agent/fanconfigurer" 16 "github.com/juju/juju/apiserver/params" 17 apiservertesting "github.com/juju/juju/apiserver/testing" 18 "github.com/juju/juju/cmd/modelcmd" 19 "github.com/juju/juju/environs/bootstrap" 20 "github.com/juju/juju/environs/config" 21 "github.com/juju/juju/jujuclient" 22 "github.com/juju/juju/provider/dummy" 23 "github.com/juju/juju/state" 24 "github.com/juju/juju/testing" 25 ) 26 27 type fanconfigurerSuite struct { 28 testing.BaseSuite 29 testingEnvConfig *config.Config 30 } 31 32 var _ = gc.Suite(&fanconfigurerSuite{}) 33 34 type fakeModelAccessor struct { 35 modelConfig *config.Config 36 modelConfigError error 37 } 38 39 func (*fakeModelAccessor) WatchForModelConfigChanges() state.NotifyWatcher { 40 return apiservertesting.NewFakeNotifyWatcher() 41 } 42 43 func (f *fakeModelAccessor) ModelConfig() (*config.Config, error) { 44 if f.modelConfigError != nil { 45 return nil, f.modelConfigError 46 } 47 return f.modelConfig, nil 48 } 49 50 func (s *fanconfigurerSuite) TearDownTest(c *gc.C) { 51 dummy.Reset(c) 52 s.BaseSuite.TearDownTest(c) 53 } 54 55 func (s *fanconfigurerSuite) TestWatchSuccess(c *gc.C) { 56 resources := common.NewResources() 57 authorizer := apiservertesting.FakeAuthorizer{ 58 Tag: names.NewMachineTag("0"), 59 } 60 s.AddCleanup(func(_ *gc.C) { resources.StopAll() }) 61 e, err := fanconfigurer.NewFanConfigurerAPIForModel( 62 &fakeModelAccessor{}, 63 resources, 64 authorizer, 65 ) 66 c.Assert(err, jc.ErrorIsNil) 67 result, err := e.WatchForFanConfigChanges() 68 c.Assert(err, jc.ErrorIsNil) 69 c.Assert(result, gc.DeepEquals, params.NotifyWatchResult{"1", nil}) 70 c.Assert(resources.Count(), gc.Equals, 1) 71 } 72 73 func (s *fanconfigurerSuite) TestWatchAuthFailed(c *gc.C) { 74 resources := common.NewResources() 75 authorizer := apiservertesting.FakeAuthorizer{ 76 Tag: names.NewUserTag("vito"), 77 } 78 s.AddCleanup(func(_ *gc.C) { resources.StopAll() }) 79 _, err := fanconfigurer.NewFanConfigurerAPIForModel( 80 &fakeModelAccessor{}, 81 resources, 82 authorizer, 83 ) 84 c.Assert(err, gc.ErrorMatches, "permission denied") 85 } 86 87 func (s *fanconfigurerSuite) TestFanConfigSuccess(c *gc.C) { 88 resources := common.NewResources() 89 authorizer := apiservertesting.FakeAuthorizer{ 90 Tag: names.NewMachineTag("0"), 91 Controller: true, 92 } 93 s.AddCleanup(func(_ *gc.C) { resources.StopAll() }) 94 testingEnvConfig := testingEnvConfig(c) 95 e, err := fanconfigurer.NewFanConfigurerAPIForModel( 96 &fakeModelAccessor{ 97 modelConfig: testingEnvConfig, 98 }, 99 resources, 100 authorizer, 101 ) 102 c.Assert(err, jc.ErrorIsNil) 103 result, err := e.FanConfig() 104 c.Assert(err, jc.ErrorIsNil) 105 c.Assert(result.Fans, gc.HasLen, 2) 106 c.Check(result.Fans[0].Underlay, gc.Equals, "10.100.0.0/16") 107 c.Check(result.Fans[0].Overlay, gc.Equals, "251.0.0.0/8") 108 c.Check(result.Fans[1].Underlay, gc.Equals, "192.168.0.0/16") 109 c.Check(result.Fans[1].Overlay, gc.Equals, "252.0.0.0/8") 110 } 111 112 func (s *fanconfigurerSuite) TestFanConfigFetchError(c *gc.C) { 113 resources := common.NewResources() 114 authorizer := apiservertesting.FakeAuthorizer{ 115 Tag: names.NewMachineTag("0"), 116 Controller: true, 117 } 118 s.AddCleanup(func(_ *gc.C) { resources.StopAll() }) 119 e, err := fanconfigurer.NewFanConfigurerAPIForModel( 120 &fakeModelAccessor{ 121 modelConfigError: fmt.Errorf("pow"), 122 }, 123 nil, 124 authorizer, 125 ) 126 c.Assert(err, jc.ErrorIsNil) 127 _, err = e.FanConfig() 128 c.Assert(err, gc.ErrorMatches, "pow") 129 } 130 131 func testingEnvConfig(c *gc.C) *config.Config { 132 env, err := bootstrap.PrepareController( 133 false, 134 modelcmd.BootstrapContext(cmdtesting.Context(c)), 135 jujuclient.NewMemStore(), 136 bootstrap.PrepareParams{ 137 ControllerConfig: testing.FakeControllerConfig(), 138 ControllerName: "dummycontroller", 139 ModelConfig: dummy.SampleConfig().Merge(testing.Attrs{"fan-config": "10.100.0.0/16=251.0.0.0/8 192.168.0.0/16=252.0.0.0/8"}), 140 Cloud: dummy.SampleCloudSpec(), 141 AdminSecret: "admin-secret", 142 }, 143 ) 144 c.Assert(err, jc.ErrorIsNil) 145 return env.Config() 146 }