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 }