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  }