1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
10
"github.com/juju/juju/state"
11
statetesting "github.com/juju/juju/state/testing"
14
type statePoolSuite struct {
15
statetesting.StateSuite
16
State1, State2 *state.State
17
ModelUUID, ModelUUID1, ModelUUID2 string
20
var _ = gc.Suite(&statePoolSuite{})
22
func (s *statePoolSuite) SetUpTest(c *gc.C) {
23
s.StateSuite.SetUpTest(c)
24
s.ModelUUID = s.State.ModelUUID()
26
s.State1 = s.Factory.MakeModel(c, nil)
27
s.AddCleanup(func(*gc.C) { s.State1.Close() })
28
s.ModelUUID1 = s.State1.ModelUUID()
30
s.State2 = s.Factory.MakeModel(c, nil)
31
s.AddCleanup(func(*gc.C) { s.State2.Close() })
32
s.ModelUUID2 = s.State2.ModelUUID()
35
func (s *statePoolSuite) TestGet(c *gc.C) {
36
p := state.NewStatePool(s.State)
39
st1, err := p.Get(s.ModelUUID1)
40
c.Assert(err, jc.ErrorIsNil)
41
c.Assert(st1.ModelUUID(), gc.Equals, s.ModelUUID1)
43
st2, err := p.Get(s.ModelUUID2)
44
c.Assert(err, jc.ErrorIsNil)
45
c.Assert(st2.ModelUUID(), gc.Equals, s.ModelUUID2)
47
// Check that the same instances are returned
48
// when a State for the same env is re-requested.
49
st1_, err := p.Get(s.ModelUUID1)
50
c.Assert(err, jc.ErrorIsNil)
51
c.Assert(st1_, gc.Equals, st1)
53
st2_, err := p.Get(s.ModelUUID2)
54
c.Assert(err, jc.ErrorIsNil)
55
c.Assert(st2_, gc.Equals, st2)
58
func (s *statePoolSuite) TestGetWithControllerEnv(c *gc.C) {
59
p := state.NewStatePool(s.State)
62
// When a State for the controller env is requested, the same
63
// State that was original passed in should be returned.
64
st0, err := p.Get(s.ModelUUID)
65
c.Assert(err, jc.ErrorIsNil)
66
c.Assert(st0, gc.Equals, s.State)
69
func (s *statePoolSuite) TestSystemState(c *gc.C) {
70
p := state.NewStatePool(s.State)
73
st0 := p.SystemState()
74
c.Assert(st0, gc.Equals, s.State)
77
func (s *statePoolSuite) TestClose(c *gc.C) {
78
p := state.NewStatePool(s.State)
81
// Get some State instances.
82
st1, err := p.Get(s.ModelUUID1)
83
c.Assert(err, jc.ErrorIsNil)
85
st2, err := p.Get(s.ModelUUID1)
86
c.Assert(err, jc.ErrorIsNil)
90
c.Assert(err, jc.ErrorIsNil)
92
// Confirm that controller State isn't closed.
93
_, err = s.State.Model()
94
c.Assert(err, jc.ErrorIsNil)
96
// Ensure that new ones are returned if further States are
98
st1_, err := p.Get(s.ModelUUID1)
99
c.Assert(err, jc.ErrorIsNil)
100
c.Assert(st1_, gc.Not(gc.Equals), st1)
102
st2_, err := p.Get(s.ModelUUID2)
103
c.Assert(err, jc.ErrorIsNil)
104
c.Assert(st2_, gc.Not(gc.Equals), st2)