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 }