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  }