github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/uniter/settings_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package uniter_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	"gopkg.in/juju/names.v2"
    10  
    11  	"github.com/juju/juju/api/uniter"
    12  	"github.com/juju/juju/apiserver/params"
    13  )
    14  
    15  type settingsSuite struct {
    16  	uniterSuite
    17  	commonRelationSuiteMixin
    18  }
    19  
    20  var _ = gc.Suite(&settingsSuite{})
    21  
    22  func (s *settingsSuite) SetUpTest(c *gc.C) {
    23  	s.uniterSuite.SetUpTest(c)
    24  	s.commonRelationSuiteMixin.SetUpTest(c, s.uniterSuite)
    25  }
    26  
    27  func (s *settingsSuite) TearDownTest(c *gc.C) {
    28  	s.uniterSuite.TearDownTest(c)
    29  }
    30  
    31  func (s *settingsSuite) TestNewSettingsAndMap(c *gc.C) {
    32  	// Make sure newSettings accepts nil settings.
    33  	settings := uniter.NewSettings(s.uniter, "blah", "foo", nil)
    34  	theMap := settings.Map()
    35  	c.Assert(theMap, gc.NotNil)
    36  	c.Assert(theMap, gc.HasLen, 0)
    37  
    38  	// And also accepts a populated map, and returns a converted map.
    39  	rawSettings := params.Settings{
    40  		"some":  "settings",
    41  		"other": "stuff",
    42  	}
    43  	settings = uniter.NewSettings(s.uniter, "blah", "foo", rawSettings)
    44  	theMap = settings.Map()
    45  	c.Assert(theMap, gc.DeepEquals, rawSettings)
    46  }
    47  
    48  func (s *settingsSuite) TestSet(c *gc.C) {
    49  	settings := uniter.NewSettings(s.uniter, "blah", "foo", nil)
    50  
    51  	settings.Set("foo", "bar")
    52  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    53  		"foo": "bar",
    54  	})
    55  	settings.Set("foo", "qaz")
    56  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    57  		"foo": "qaz",
    58  	})
    59  	settings.Set("bar", "Cheers")
    60  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    61  		"foo": "qaz",
    62  		"bar": "Cheers",
    63  	})
    64  }
    65  
    66  func (s *settingsSuite) TestDelete(c *gc.C) {
    67  	settings := uniter.NewSettings(s.uniter, "blah", "foo", nil)
    68  
    69  	settings.Set("foo", "qaz")
    70  	settings.Set("abc", "tink")
    71  	settings.Set("bar", "tonk")
    72  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    73  		"foo": "qaz",
    74  		"abc": "tink",
    75  		"bar": "tonk",
    76  	})
    77  	settings.Delete("abc")
    78  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    79  		"foo": "qaz",
    80  		"bar": "tonk",
    81  	})
    82  	settings.Delete("bar")
    83  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    84  		"foo": "qaz",
    85  	})
    86  	settings.Set("abc", "123")
    87  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    88  		"foo": "qaz",
    89  		"abc": "123",
    90  	})
    91  	settings.Delete("missing")
    92  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
    93  		"foo": "qaz",
    94  		"abc": "123",
    95  	})
    96  }
    97  
    98  func (s *settingsSuite) TestWrite(c *gc.C) {
    99  	wpRelUnit, err := s.stateRelation.Unit(s.wordpressUnit)
   100  	c.Assert(err, jc.ErrorIsNil)
   101  	rawSettings := map[string]interface{}{
   102  		"some":  "stuff",
   103  		"other": "things",
   104  	}
   105  	err = wpRelUnit.EnterScope(rawSettings)
   106  	c.Assert(err, jc.ErrorIsNil)
   107  	s.assertInScope(c, wpRelUnit, true)
   108  
   109  	apiUnit, err := s.uniter.Unit(s.wordpressUnit.Tag().(names.UnitTag))
   110  	c.Assert(err, jc.ErrorIsNil)
   111  	apiRelation, err := s.uniter.Relation(s.stateRelation.Tag().(names.RelationTag))
   112  	c.Assert(err, jc.ErrorIsNil)
   113  	apiRelUnit, err := apiRelation.Unit(apiUnit)
   114  	c.Assert(err, jc.ErrorIsNil)
   115  	settings, err := apiRelUnit.Settings()
   116  	c.Assert(err, jc.ErrorIsNil)
   117  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
   118  		"some":  "stuff",
   119  		"other": "things",
   120  	})
   121  
   122  	settings.Set("some", "bar")
   123  	settings.Delete("foo")
   124  	settings.Delete("some")
   125  	settings.Set("foo", "qaz")
   126  	settings.Set("other", "days")
   127  	err = settings.Write()
   128  	c.Assert(err, jc.ErrorIsNil)
   129  	settings, err = apiRelUnit.Settings()
   130  	c.Assert(err, jc.ErrorIsNil)
   131  	c.Assert(settings.Map(), gc.DeepEquals, params.Settings{
   132  		"foo":   "qaz",
   133  		"other": "days",
   134  	})
   135  }