github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/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  	"github.com/juju/names"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/api/base"
    12  	"github.com/juju/juju/api/uniter"
    13  	"github.com/juju/juju/apiserver/params"
    14  	statetesting "github.com/juju/juju/state/testing"
    15  )
    16  
    17  type serviceSuite struct {
    18  	uniterSuite
    19  
    20  	apiService *uniter.Service
    21  }
    22  
    23  var _ = gc.Suite(&serviceSuite{})
    24  
    25  func (s *serviceSuite) SetUpTest(c *gc.C) {
    26  	s.uniterSuite.SetUpTest(c)
    27  
    28  	var err error
    29  	s.apiService, err = s.uniter.Service(s.wordpressService.Tag().(names.ServiceTag))
    30  	c.Assert(err, jc.ErrorIsNil)
    31  }
    32  
    33  func (s *serviceSuite) TestNameTagAndString(c *gc.C) {
    34  	c.Assert(s.apiService.Name(), gc.Equals, s.wordpressService.Name())
    35  	c.Assert(s.apiService.String(), gc.Equals, s.wordpressService.String())
    36  	c.Assert(s.apiService.Tag(), gc.Equals, s.wordpressService.Tag().(names.ServiceTag))
    37  }
    38  
    39  func (s *serviceSuite) TestWatch(c *gc.C) {
    40  	c.Assert(s.apiService.Life(), gc.Equals, params.Alive)
    41  
    42  	w, err := s.apiService.Watch()
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	defer statetesting.AssertStop(c, w)
    45  	wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w)
    46  
    47  	// Initial event.
    48  	wc.AssertOneChange()
    49  
    50  	// Change something and check it's detected.
    51  	err = s.wordpressService.SetExposed()
    52  	c.Assert(err, jc.ErrorIsNil)
    53  	wc.AssertOneChange()
    54  
    55  	// Destroy the service and check it's detected.
    56  	err = s.wordpressService.Destroy()
    57  	c.Assert(err, jc.ErrorIsNil)
    58  	wc.AssertOneChange()
    59  
    60  	statetesting.AssertStop(c, w)
    61  	wc.AssertClosed()
    62  }
    63  
    64  func (s *serviceSuite) TestWatchRelations(c *gc.C) {
    65  	w, err := s.apiService.WatchRelations()
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	defer statetesting.AssertStop(c, w)
    68  	wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
    69  
    70  	// Initial event.
    71  	wc.AssertChange()
    72  	wc.AssertNoChange()
    73  
    74  	// Change something other than the lifecycle and make sure it's
    75  	// not detected.
    76  	err = s.wordpressService.SetExposed()
    77  	c.Assert(err, jc.ErrorIsNil)
    78  	wc.AssertNoChange()
    79  
    80  	// Add another service and relate it to wordpress,
    81  	// check it's detected.
    82  	s.addMachineServiceCharmAndUnit(c, "mysql")
    83  	rel := s.addRelation(c, "wordpress", "mysql")
    84  	wc.AssertChange(rel.String())
    85  
    86  	// Destroy the relation and check it's detected.
    87  	err = rel.Destroy()
    88  	c.Assert(err, jc.ErrorIsNil)
    89  	wc.AssertChange(rel.String())
    90  	wc.AssertNoChange()
    91  
    92  	statetesting.AssertStop(c, w)
    93  	wc.AssertClosed()
    94  }
    95  
    96  func (s *serviceSuite) TestRefresh(c *gc.C) {
    97  	c.Assert(s.apiService.Life(), gc.Equals, params.Alive)
    98  
    99  	err := s.wordpressService.Destroy()
   100  	c.Assert(err, jc.ErrorIsNil)
   101  	c.Assert(s.apiService.Life(), gc.Equals, params.Alive)
   102  
   103  	err = s.apiService.Refresh()
   104  	c.Assert(err, jc.ErrorIsNil)
   105  	c.Assert(s.apiService.Life(), gc.Equals, params.Dying)
   106  }
   107  
   108  func (s *serviceSuite) TestCharmURL(c *gc.C) {
   109  	// Get the charm URL through state calls.
   110  	curl, force := s.wordpressService.CharmURL()
   111  	c.Assert(curl, gc.DeepEquals, s.wordpressCharm.URL())
   112  	c.Assert(force, jc.IsFalse)
   113  
   114  	// Now check the same through the API.
   115  	curl, force, err := s.apiService.CharmURL()
   116  	c.Assert(err, jc.ErrorIsNil)
   117  	c.Assert(curl, gc.DeepEquals, s.wordpressCharm.URL())
   118  	c.Assert(force, jc.IsFalse)
   119  }
   120  
   121  func (s *serviceSuite) TestOwnerTagV0(c *gc.C) {
   122  	s.patchNewState(c, uniter.NewStateV0)
   123  
   124  	tag, err := s.apiService.OwnerTag()
   125  	c.Assert(err, jc.ErrorIsNil)
   126  	c.Assert(tag, gc.Equals, s.AdminUserTag(c))
   127  }
   128  
   129  func (s *serviceSuite) TestOwnerTagV1(c *gc.C) {
   130  	s.patchNewState(c, uniter.NewStateV1)
   131  
   132  	tag, err := s.apiService.OwnerTag()
   133  	c.Assert(err, jc.ErrorIsNil)
   134  	c.Assert(tag, gc.Equals, s.AdminUserTag(c))
   135  }
   136  
   137  func (s *serviceSuite) patchNewState(
   138  	c *gc.C,
   139  	patchFunc func(_ base.APICaller, _ names.UnitTag) *uniter.State,
   140  ) {
   141  	s.uniterSuite.patchNewState(c, patchFunc)
   142  	var err error
   143  	s.apiService, err = s.uniter.Service(s.wordpressService.Tag().(names.ServiceTag))
   144  	c.Assert(err, jc.ErrorIsNil)
   145  }