github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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.MongoInfo{ 56 Info: mongo.Info{ 57 Addrs: []string{inst.Addr()}, 58 CACert: coretesting.CACert, 59 }, 60 } 61 session, err := mongo.DialWithInfo(mongoInfo, dialOpts) 62 c.Assert(err, jc.ErrorIsNil) 63 defer session.Close() 64 65 safe := session.Safe() 66 c.Assert(safe, gc.NotNil) 67 c.Assert(safe.WMode, gc.Equals, expectedWMode) 68 c.Assert(safe.J, jc.IsTrue) // always enabled 69 }