github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/uniter/service_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  	statetesting "launchpad.net/juju-core/state/testing"
    12  	jc "launchpad.net/juju-core/testing/checkers"
    13  )
    14  
    15  type serviceSuite struct {
    16  	uniterSuite
    17  
    18  	apiService *uniter.Service
    19  }
    20  
    21  var _ = gc.Suite(&serviceSuite{})
    22  
    23  func (s *serviceSuite) SetUpTest(c *gc.C) {
    24  	s.uniterSuite.SetUpTest(c)
    25  
    26  	var err error
    27  	s.apiService, err = s.uniter.Service(s.wordpressService.Tag())
    28  	c.Assert(err, gc.IsNil)
    29  }
    30  
    31  func (s *serviceSuite) TearDownTest(c *gc.C) {
    32  	s.uniterSuite.TearDownTest(c)
    33  }
    34  
    35  func (s *serviceSuite) TestNameAndString(c *gc.C) {
    36  	c.Assert(s.apiService.Name(), gc.Equals, s.wordpressService.Name())
    37  	c.Assert(s.apiService.String(), gc.Equals, s.wordpressService.String())
    38  }
    39  
    40  func (s *serviceSuite) TestWatch(c *gc.C) {
    41  	c.Assert(s.apiService.Life(), gc.Equals, params.Alive)
    42  
    43  	w, err := s.apiService.Watch()
    44  	c.Assert(err, gc.IsNil)
    45  	defer statetesting.AssertStop(c, w)
    46  	wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w)
    47  
    48  	// Initial event.
    49  	wc.AssertOneChange()
    50  
    51  	// Change something and check it's detected.
    52  	err = s.wordpressService.SetExposed()
    53  	c.Assert(err, gc.IsNil)
    54  	wc.AssertOneChange()
    55  
    56  	// Destroy the service and check it's detected.
    57  	err = s.wordpressService.Destroy()
    58  	c.Assert(err, gc.IsNil)
    59  	wc.AssertOneChange()
    60  
    61  	statetesting.AssertStop(c, w)
    62  	wc.AssertClosed()
    63  }
    64  
    65  func (s *serviceSuite) TestWatchRelations(c *gc.C) {
    66  	w, err := s.apiService.WatchRelations()
    67  	c.Assert(err, gc.IsNil)
    68  	defer statetesting.AssertStop(c, w)
    69  	wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
    70  
    71  	// Initial event.
    72  	wc.AssertChange()
    73  	wc.AssertNoChange()
    74  
    75  	// Change something other than the lifecycle and make sure it's
    76  	// not detected.
    77  	err = s.wordpressService.SetExposed()
    78  	c.Assert(err, gc.IsNil)
    79  	wc.AssertNoChange()
    80  
    81  	// Add another service and relate it to wordpress,
    82  	// check it's detected.
    83  	s.addMachineServiceCharmAndUnit(c, "mysql")
    84  	rel := s.addRelation(c, "wordpress", "mysql")
    85  	wc.AssertChange(rel.String())
    86  
    87  	// Destroy the relation and check it's detected.
    88  	err = rel.Destroy()
    89  	c.Assert(err, gc.IsNil)
    90  	wc.AssertChange(rel.String())
    91  	wc.AssertNoChange()
    92  
    93  	statetesting.AssertStop(c, w)
    94  	wc.AssertClosed()
    95  }
    96  
    97  func (s *serviceSuite) TestRefresh(c *gc.C) {
    98  	c.Assert(s.apiService.Life(), gc.Equals, params.Alive)
    99  
   100  	err := s.wordpressService.Destroy()
   101  	c.Assert(err, gc.IsNil)
   102  	c.Assert(s.apiService.Life(), gc.Equals, params.Alive)
   103  
   104  	err = s.apiService.Refresh()
   105  	c.Assert(err, gc.IsNil)
   106  	c.Assert(s.apiService.Life(), gc.Equals, params.Dying)
   107  }
   108  
   109  func (s *serviceSuite) TestCharmURL(c *gc.C) {
   110  	// Get the charm URL through state calls.
   111  	curl, force := s.wordpressService.CharmURL()
   112  	c.Assert(curl, gc.DeepEquals, s.wordpressCharm.URL())
   113  	c.Assert(force, jc.IsFalse)
   114  
   115  	// Now check the same through the API.
   116  	curl, force, err := s.apiService.CharmURL()
   117  	c.Assert(err, gc.IsNil)
   118  	c.Assert(curl, gc.DeepEquals, s.wordpressCharm.URL())
   119  	c.Assert(force, jc.IsFalse)
   120  }
   121  
   122  func (s *serviceSuite) TestGetOwnerTag(c *gc.C) {
   123  	tag, err := s.apiService.GetOwnerTag()
   124  	c.Assert(err, gc.IsNil)
   125  	c.Assert(tag, gc.Equals, "user-admin")
   126  }