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 }