File: mongodb_spec.rb

package info (click to toggle)
puppet-module-puppetlabs-mongodb 0.7.0-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 304 kB
  • sloc: ruby: 982; sh: 10; makefile: 4
file content (153 lines) | stat: -rw-r--r-- 4,226 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#
# Authors: Emilien Macchi <emilien.macchi@enovance.com>
#          Francois Charlier <francois.charlier@enovance.com>
#

require 'spec_helper'

describe Puppet::Type.type(:mongodb_replset).provider(:mongo) do

  valid_members = ['mongo1:27017', 'mongo2:27017', 'mongo3:27017']

  let(:resource) { Puppet::Type.type(:mongodb_replset).new(
    { :ensure        => :present,
      :name          => 'rs_test',
      :members       => valid_members,
      :provider      => :mongo
    }
  )}

  let(:provider) { resource.provider }

  describe 'create' do
    it 'should create a replicaset' do
      provider.stubs(:mongo_command).returns(
        { "info" => "Config now saved locally.  Should come online in about a minute.",
          "ok"   => 1 } )
      provider.create
    end
  end

  describe 'exists?' do
    describe 'when the replicaset is not created' do
      it 'returns false' do
        provider.stubs(:mongo).returns(<<EOT)
{
	"startupStatus" : 3,
	"info" : "run rs.initiate(...) if not yet done for the set",
	"ok" : 0,
	"errmsg" : "can't get local.system.replset config from self or any seed (EMPTYCONFIG)"
}
EOT
        provider.exists?.should be_false
      end
    end

    describe 'when the replicaset is created' do
      it 'returns true' do
        provider.stubs(:mongo).returns(<<EOT)
{
	"set" : "rs_test",
	"date" : ISODate("2014-01-10T18:39:54Z"),
	"myState" : 1,
	"members" : [ ],
	"ok" : 1
}
EOT
        provider.exists?.should be_true
      end
    end

    describe 'when at least one member is configured with another replicaset name' do
      it 'raises an error' do
        provider.stubs(:mongo).returns(<<EOT)
{
	"set" : "rs_another",
	"date" : ISODate("2014-01-10T18:39:54Z"),
	"myState" : 1,
	"members" : [ ],
	"ok" : 1
}
EOT
        expect { provider.exists? }.to raise_error(Puppet::Error, /is already part of another replicaset\.$/)
      end
    end

    describe 'when at least one member is not running with --replSet' do
      it 'raises an error' do
        provider.stubs(:mongo).returns('{ "ok" : 0, "errmsg" : "not running with --replSet" }')
        expect { provider.exists? }.to raise_error(Puppet::Error, /is not supposed to be part of a replicaset\.$/)
      end
    end

    describe 'when no member is available' do
      it 'raises an error' do
        provider.stubs(:mongo_command).raises(Puppet::ExecutionFailure, <<EOT)
Fri Jan 10 20:20:33.995 Error: couldn't connect to server localhost:9999 at src/mongo/shell/mongo.js:147
exception: connect failed
EOT
        expect { provider.exists? }.to raise_error(Puppet::Error, "Can't connect to any member of replicaset #{resource[:name]}.")
      end
    end
  end

  describe 'members' do
    it 'returns the members of a configured replicaset ' do
      provider.stubs(:mongo).returns(<<EOT)
{
	"setName" : "rs_test",
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"mongo1:27017",
		"mongo2:27017",
		"mongo3:27017"
	],
	"primary" : "mongo1:27017",
	"me" : "mongo1:27017",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"localTime" : ISODate("2014-01-10T19:31:51.281Z"),
	"ok" : 1
}
EOT
      provider.members.should =~ valid_members
    end

    it 'raises an error when the master host is not available' do
      provider.stubs(:master_host).returns(nil)
      expect { provider.members }.to raise_error(Puppet::Error, "Can't find master host for replicaset #{resource[:name]}.")
    end

  end

  describe 'members=' do
    it 'adds missing members to an existing replicaset' do
      provider.stubs(:mongo).returns(<<EOT)
{
	"setName" : "rs_test",
	"ismaster" : true,
	"secondary" : false,
	"hosts" : [
		"mongo1:27017"
	],
	"primary" : "mongo1:27017",
	"me" : "mongo1:27017",
	"maxBsonObjectSize" : 16777216,
	"maxMessageSizeBytes" : 48000000,
	"localTime" : ISODate("2014-01-10T19:31:51.281Z"),
	"ok" : 1
}
EOT
      provider.expects('rs_add').times(2)
      provider.members=(valid_members)
    end

    it 'raises an error when the master host is not available' do
      provider.stubs(:master_host).returns(nil)
      expect { provider.members=(valid_members) }.to raise_error(Puppet::Error, "Can't find master host for replicaset #{resource[:name]}.")
    end

  end

end