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