github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/testing/environwatcher.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package testing 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/core/watcher" 11 "github.com/juju/juju/core/watcher/watchertest" 12 "github.com/juju/juju/environs/config" 13 "github.com/juju/juju/state" 14 ) 15 16 type ModelWatcherFacade interface { 17 WatchForModelConfigChanges() (watcher.NotifyWatcher, error) 18 ModelConfig() (*config.Config, error) 19 } 20 21 type ModelWatcherTests struct { 22 facade ModelWatcherFacade 23 state *state.State 24 model *state.Model 25 } 26 27 func NewModelWatcherTests( 28 facade ModelWatcherFacade, 29 st *state.State, 30 m *state.Model, 31 ) *ModelWatcherTests { 32 return &ModelWatcherTests{ 33 facade: facade, 34 state: st, 35 model: m, 36 } 37 } 38 39 func (s *ModelWatcherTests) TestModelConfig(c *gc.C) { 40 modelConfig, err := s.model.ModelConfig() 41 c.Assert(err, jc.ErrorIsNil) 42 43 conf, err := s.facade.ModelConfig() 44 c.Assert(err, jc.ErrorIsNil) 45 46 c.Assert(conf, jc.DeepEquals, modelConfig) 47 } 48 49 func (s *ModelWatcherTests) TestWatchForModelConfigChanges(c *gc.C) { 50 modelConfig, err := s.model.ModelConfig() 51 c.Assert(err, jc.ErrorIsNil) 52 53 w, err := s.facade.WatchForModelConfigChanges() 54 c.Assert(err, jc.ErrorIsNil) 55 wc := watchertest.NewNotifyWatcherC(c, w, s.state.StartSync) 56 defer wc.AssertStops() 57 58 // Initial event. 59 wc.AssertOneChange() 60 61 // Change the model configuration by updating an existing attribute, check it's detected. 62 newAttrs := map[string]interface{}{"logging-config": "juju=ERROR"} 63 err = s.model.UpdateModelConfig(newAttrs, nil) 64 c.Assert(err, jc.ErrorIsNil) 65 wc.AssertOneChange() 66 67 // Change the model configuration by adding a new attribute, check it's detected. 68 newAttrs = map[string]interface{}{"foo": "bar"} 69 err = s.model.UpdateModelConfig(newAttrs, nil) 70 c.Assert(err, jc.ErrorIsNil) 71 wc.AssertOneChange() 72 73 // Change the model configuration by removing an attribute, check it's detected. 74 err = s.model.UpdateModelConfig(map[string]interface{}{}, []string{"foo"}) 75 c.Assert(err, jc.ErrorIsNil) 76 wc.AssertOneChange() 77 78 // Change it back to the original config. 79 oldAttrs := map[string]interface{}{"logging-config": modelConfig.AllAttrs()["logging-config"]} 80 err = s.model.UpdateModelConfig(oldAttrs, nil) 81 c.Assert(err, jc.ErrorIsNil) 82 wc.AssertOneChange() 83 }