github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/uniter/uniter_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 stdtesting "testing" 8 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/juju/testing" 12 "launchpad.net/juju-core/state" 13 "launchpad.net/juju-core/state/api" 14 commontesting "launchpad.net/juju-core/state/api/common/testing" 15 "launchpad.net/juju-core/state/api/uniter" 16 coretesting "launchpad.net/juju-core/testing" 17 "launchpad.net/juju-core/utils" 18 ) 19 20 // NOTE: This suite is intended for embedding into other suites, 21 // so common code can be reused. Do not add test cases to it, 22 // otherwise they'll be run by each other suite that embeds it. 23 type uniterSuite struct { 24 testing.JujuConnSuite 25 26 st *api.State 27 stateServerMachine *state.Machine 28 wordpressMachine *state.Machine 29 wordpressService *state.Service 30 wordpressCharm *state.Charm 31 wordpressUnit *state.Unit 32 33 uniter *uniter.State 34 } 35 36 var _ = gc.Suite(&uniterSuite{}) 37 38 func TestAll(t *stdtesting.T) { 39 coretesting.MgoTestPackage(t) 40 } 41 42 func (s *uniterSuite) SetUpTest(c *gc.C) { 43 s.setUpTest(c, true) 44 } 45 46 func (s *uniterSuite) setUpTest(c *gc.C, addStateServer bool) { 47 s.JujuConnSuite.SetUpTest(c) 48 49 if addStateServer { 50 s.stateServerMachine = testing.AddStateServerMachine(c, s.State) 51 } 52 53 // Create a machine, a service and add a unit so we can log in as 54 // its agent. 55 s.wordpressMachine, s.wordpressService, s.wordpressCharm, s.wordpressUnit = s.addMachineServiceCharmAndUnit(c, "wordpress") 56 password, err := utils.RandomPassword() 57 c.Assert(err, gc.IsNil) 58 err = s.wordpressUnit.SetPassword(password) 59 c.Assert(err, gc.IsNil) 60 s.st = s.OpenAPIAs(c, s.wordpressUnit.Tag(), password) 61 62 // Create the uniter API facade. 63 s.uniter = s.st.Uniter() 64 c.Assert(s.uniter, gc.NotNil) 65 } 66 67 func (s *uniterSuite) addMachineServiceCharmAndUnit(c *gc.C, serviceName string) (*state.Machine, *state.Service, *state.Charm, *state.Unit) { 68 machine, err := s.State.AddMachine("quantal", state.JobHostUnits) 69 c.Assert(err, gc.IsNil) 70 charm := s.AddTestingCharm(c, serviceName) 71 service := s.AddTestingService(c, serviceName, charm) 72 unit, err := service.AddUnit() 73 c.Assert(err, gc.IsNil) 74 err = unit.AssignToMachine(machine) 75 c.Assert(err, gc.IsNil) 76 return machine, service, charm, unit 77 } 78 79 func (s *uniterSuite) addRelation(c *gc.C, first, second string) *state.Relation { 80 eps, err := s.State.InferEndpoints([]string{first, second}) 81 c.Assert(err, gc.IsNil) 82 rel, err := s.State.AddRelation(eps...) 83 c.Assert(err, gc.IsNil) 84 return rel 85 } 86 87 func (s *uniterSuite) addRelatedService(c *gc.C, firstSvc, relatedSvc string, unit *state.Unit) (*state.Relation, *state.Service, *state.Unit) { 88 relatedService := s.AddTestingService(c, relatedSvc, s.AddTestingCharm(c, relatedSvc)) 89 rel := s.addRelation(c, firstSvc, relatedSvc) 90 relUnit, err := rel.Unit(unit) 91 c.Assert(err, gc.IsNil) 92 err = relUnit.EnterScope(nil) 93 c.Assert(err, gc.IsNil) 94 relatedUnit, err := relatedService.Unit(relatedSvc + "/0") 95 c.Assert(err, gc.IsNil) 96 return rel, relatedService, relatedUnit 97 } 98 99 func (s *uniterSuite) assertInScope(c *gc.C, relUnit *state.RelationUnit, inScope bool) { 100 ok, err := relUnit.InScope() 101 c.Assert(err, gc.IsNil) 102 c.Assert(ok, gc.Equals, inScope) 103 } 104 105 type uniterCommonSuite struct { 106 uniterSuite 107 108 *commontesting.EnvironWatcherTest 109 } 110 111 var _ = gc.Suite(&uniterCommonSuite{}) 112 113 func (s *uniterCommonSuite) SetUpTest(c *gc.C) { 114 s.uniterSuite.SetUpTest(c) 115 116 s.EnvironWatcherTest = commontesting.NewEnvironWatcherTest(s.uniter, s.State, s.BackingState, commontesting.NoSecrets) 117 }