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  }