~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/cmd/jujud/agent/mongo_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}