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 }