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  }