github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/cmd/jujud-controller/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 mgotesting "github.com/juju/mgo/v3/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 := mgotesting.MgoInstance{ 32 EnableReplicaSet: true, 33 } 34 err := inst.Start(coretesting.Certs) 35 c.Assert(err, jc.ErrorIsNil) 36 defer inst.Destroy() 37 38 dialOpts := stateWorkerDialOpts 39 dialOpts.Timeout = coretesting.LongWait 40 if configureReplset { 41 info := inst.DialInfo() 42 info.Timeout = dialOpts.Timeout 43 args := peergrouper.InitiateMongoParams{ 44 DialInfo: info, 45 MemberHostPort: inst.Addr(), 46 } 47 err = peergrouper.InitiateMongoServer(args) 48 c.Assert(err, jc.ErrorIsNil) 49 } else { 50 dialOpts.Direct = true 51 } 52 53 mongoInfo := mongo.MongoInfo{ 54 Info: mongo.Info{ 55 Addrs: []string{inst.Addr()}, 56 CACert: coretesting.CACert, 57 }, 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, "majority") 66 c.Assert(safe.J, jc.IsTrue) // always enabled 67 }