1
// Copyright 2012-2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
gitjujutesting "github.com/juju/testing"
8
jc "github.com/juju/testing/checkers"
11
"github.com/juju/juju/mongo"
12
coretesting "github.com/juju/juju/testing"
13
"github.com/juju/juju/worker/peergrouper"
16
type mongoSuite struct {
20
var _ = gc.Suite(&mongoSuite{})
22
func (s *mongoSuite) TestStateWorkerDialSetsWriteMajority(c *gc.C) {
23
s.testStateWorkerDialSetsWriteMajority(c, true)
26
func (s *mongoSuite) TestStateWorkerDialDoesNotSetWriteMajorityWithoutReplsetConfig(c *gc.C) {
27
s.testStateWorkerDialSetsWriteMajority(c, false)
30
func (s *mongoSuite) testStateWorkerDialSetsWriteMajority(c *gc.C, configureReplset bool) {
31
inst := gitjujutesting.MgoInstance{
32
Params: []string{"--replSet", "juju"},
34
err := inst.Start(coretesting.Certs)
35
c.Assert(err, jc.ErrorIsNil)
38
var expectedWMode string
39
dialOpts := stateWorkerDialOpts
40
dialOpts.Timeout = coretesting.LongWait
42
info := inst.DialInfo()
43
info.Timeout = dialOpts.Timeout
44
args := peergrouper.InitiateMongoParams{
46
MemberHostPort: inst.Addr(),
48
err = peergrouper.InitiateMongoServer(args)
49
c.Assert(err, jc.ErrorIsNil)
50
expectedWMode = "majority"
52
dialOpts.Direct = true
55
mongoInfo := mongo.Info{
56
Addrs: []string{inst.Addr()},
57
CACert: coretesting.CACert,
59
session, err := mongo.DialWithInfo(mongoInfo, dialOpts)
60
c.Assert(err, jc.ErrorIsNil)
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