github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/jujud/agent/mongo_test.go (about)

     1  // Copyright 2012-2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package agent
     5  
     6  import (
     7  	gitjujutesting "github.com/juju/testing"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/mongo"
    12  	coretesting "github.com/juju/juju/testing"
    13  	"github.com/juju/juju/worker/peergrouper"
    14  )
    15  
    16  type mongoSuite struct {
    17  	coretesting.BaseSuite
    18  }
    19  
    20  var _ = gc.Suite(&mongoSuite{})
    21  
    22  func (s *mongoSuite) TestStateWorkerDialSetsWriteMajority(c *gc.C) {
    23  	s.testStateWorkerDialSetsWriteMajority(c, true)
    24  }
    25  
    26  func (s *mongoSuite) TestStateWorkerDialDoesNotSetWriteMajorityWithoutReplsetConfig(c *gc.C) {
    27  	s.testStateWorkerDialSetsWriteMajority(c, false)
    28  }
    29  
    30  func (s *mongoSuite) testStateWorkerDialSetsWriteMajority(c *gc.C, configureReplset bool) {
    31  	inst := gitjujutesting.MgoInstance{
    32  		Params: []string{"--replSet", "juju"},
    33  	}
    34  	err := inst.Start(coretesting.Certs)
    35  	c.Assert(err, jc.ErrorIsNil)
    36  	defer inst.Destroy()
    37  
    38  	var expectedWMode string
    39  	dialOpts := stateWorkerDialOpts
    40  	dialOpts.Timeout = coretesting.LongWait
    41  	if configureReplset {
    42  		info := inst.DialInfo()
    43  		info.Timeout = dialOpts.Timeout
    44  		args := peergrouper.InitiateMongoParams{
    45  			DialInfo:       info,
    46  			MemberHostPort: inst.Addr(),
    47  		}
    48  		err = peergrouper.InitiateMongoServer(args)
    49  		c.Assert(err, jc.ErrorIsNil)
    50  		expectedWMode = "majority"
    51  	} else {
    52  		dialOpts.Direct = true
    53  	}
    54  
    55  	mongoInfo := mongo.Info{
    56  		Addrs:  []string{inst.Addr()},
    57  		CACert: coretesting.CACert,
    58  	}
    59  	session, err := mongo.DialWithInfo(mongoInfo, dialOpts)
    60  	c.Assert(err, jc.ErrorIsNil)
    61  	defer session.Close()
    62  
    63  	safe := session.Safe()
    64  	c.Assert(safe, gc.NotNil)
    65  	c.Assert(safe.WMode, gc.Equals, expectedWMode)
    66  	c.Assert(safe.J, jc.IsTrue) // always enabled
    67  }