github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/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 gc "launchpad.net/gocheck" 8 9 "launchpad.net/juju-core/state/api/params" 10 "launchpad.net/juju-core/state/api/uniter" 11 ) 12 13 type settingsSuite struct { 14 uniterSuite 15 commonRelationSuiteMixin 16 } 17 18 var _ = gc.Suite(&settingsSuite{}) 19 20 func (s *settingsSuite) SetUpTest(c *gc.C) { 21 s.uniterSuite.SetUpTest(c) 22 s.commonRelationSuiteMixin.SetUpTest(c, s.uniterSuite) 23 } 24 25 func (s *settingsSuite) TearDownTest(c *gc.C) { 26 s.uniterSuite.TearDownTest(c) 27 } 28 29 func (s *settingsSuite) TestNewSettingsAndMap(c *gc.C) { 30 // Make sure newSettings accepts nil settings. 31 settings := uniter.NewSettings(s.uniter, "blah", "foo", nil) 32 theMap := settings.Map() 33 c.Assert(theMap, gc.NotNil) 34 c.Assert(theMap, gc.HasLen, 0) 35 36 // And also accepts a populated map, and returns a converted map. 37 rawSettings := params.RelationSettings{ 38 "some": "settings", 39 "other": "stuff", 40 } 41 settings = uniter.NewSettings(s.uniter, "blah", "foo", rawSettings) 42 theMap = settings.Map() 43 c.Assert(theMap, gc.DeepEquals, rawSettings) 44 } 45 46 func (s *settingsSuite) TestSet(c *gc.C) { 47 settings := uniter.NewSettings(s.uniter, "blah", "foo", nil) 48 49 settings.Set("foo", "bar") 50 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 51 "foo": "bar", 52 }) 53 settings.Set("foo", "qaz") 54 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 55 "foo": "qaz", 56 }) 57 settings.Set("bar", "Cheers") 58 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 59 "foo": "qaz", 60 "bar": "Cheers", 61 }) 62 } 63 64 func (s *settingsSuite) TestDelete(c *gc.C) { 65 settings := uniter.NewSettings(s.uniter, "blah", "foo", nil) 66 67 settings.Set("foo", "qaz") 68 settings.Set("abc", "tink") 69 settings.Set("bar", "tonk") 70 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 71 "foo": "qaz", 72 "abc": "tink", 73 "bar": "tonk", 74 }) 75 settings.Delete("abc") 76 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 77 "foo": "qaz", 78 "bar": "tonk", 79 }) 80 settings.Delete("bar") 81 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 82 "foo": "qaz", 83 }) 84 settings.Set("abc", "123") 85 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 86 "foo": "qaz", 87 "abc": "123", 88 }) 89 settings.Delete("missing") 90 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 91 "foo": "qaz", 92 "abc": "123", 93 }) 94 } 95 96 func (s *settingsSuite) TestWrite(c *gc.C) { 97 wpRelUnit, err := s.stateRelation.Unit(s.wordpressUnit) 98 c.Assert(err, gc.IsNil) 99 rawSettings := map[string]interface{}{ 100 "some": "stuff", 101 "other": "things", 102 } 103 err = wpRelUnit.EnterScope(rawSettings) 104 c.Assert(err, gc.IsNil) 105 s.assertInScope(c, wpRelUnit, true) 106 107 apiUnit, err := s.uniter.Unit(s.wordpressUnit.Tag()) 108 c.Assert(err, gc.IsNil) 109 apiRelation, err := s.uniter.Relation(s.stateRelation.Tag()) 110 c.Assert(err, gc.IsNil) 111 apiRelUnit, err := apiRelation.Unit(apiUnit) 112 c.Assert(err, gc.IsNil) 113 settings, err := apiRelUnit.Settings() 114 c.Assert(err, gc.IsNil) 115 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 116 "some": "stuff", 117 "other": "things", 118 }) 119 120 settings.Set("some", "bar") 121 settings.Delete("foo") 122 settings.Delete("some") 123 settings.Set("foo", "qaz") 124 settings.Set("other", "days") 125 err = settings.Write() 126 c.Assert(err, gc.IsNil) 127 settings, err = apiRelUnit.Settings() 128 c.Assert(err, gc.IsNil) 129 c.Assert(settings.Map(), gc.DeepEquals, params.RelationSettings{ 130 "foo": "qaz", 131 "other": "days", 132 }) 133 }