]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/rabbitmq/spec/unit/puppet/provider/rabbitmq_user/rabbitmqctl_spec.rb
move to puppetlabs rabbitmq module
[dsa-puppet.git] / 3rdparty / modules / rabbitmq / spec / unit / puppet / provider / rabbitmq_user / rabbitmqctl_spec.rb
1 require 'puppet'
2 require 'mocha'
3 RSpec.configure do |config|
4   config.mock_with :mocha
5 end
6 provider_class = Puppet::Type.type(:rabbitmq_user).provider(:rabbitmqctl)
7 describe provider_class do
8   before :each do
9     @resource = Puppet::Type::Rabbitmq_user.new(
10       {:name => 'foo', :password => 'bar'}
11     )
12     @provider = provider_class.new(@resource)
13   end
14   it 'should match user names' do
15     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
16 foo
17 EOT
18     @provider.exists?.should == 'foo'
19   end
20   it 'should match user names with 2.4.1 syntax' do
21     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
22 foo bar
23 EOT
24     @provider.exists?.should == 'foo bar'
25   end
26   it 'should not match if no users on system' do
27     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
28 EOT
29     @provider.exists?.should be_nil
30   end
31   it 'should not match if no matching users on system' do
32     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
33 fooey
34 EOT
35     @provider.exists?.should be_nil
36   end
37   it 'should match user names from list' do
38     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
39 one
40 two three
41 foo
42 bar
43 EOT
44     @provider.exists?.should == 'foo'
45   end
46   it 'should create user and set password' do
47     @resource[:password] = 'bar'
48     @provider.expects(:rabbitmqctl).with('add_user', 'foo', 'bar')
49     @provider.create
50   end
51   it 'should create user, set password and set to admin' do
52     @resource[:password] = 'bar'
53     @resource[:admin] = 'true'
54     @provider.expects(:rabbitmqctl).with('add_user', 'foo', 'bar')
55     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
56 foo   []
57 icinga  [monitoring]
58 kitchen []
59 kitchen2        [abc, def, ghi]
60 EOT
61     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['administrator'])
62     @provider.create
63   end
64   it 'should call rabbitmqctl to delete' do
65     @provider.expects(:rabbitmqctl).with('delete_user', 'foo')
66     @provider.destroy
67   end
68   it 'should be able to retrieve admin value' do
69     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
70 foo [administrator]
71 EOT
72     @provider.admin.should == :true
73     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
74 one [administrator]
75 foo []
76 EOT
77     @provider.admin.should == :false
78   end
79   it 'should fail if admin value is invalid' do
80     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
81 foo fail
82 EOT
83     expect { @provider.admin }.to raise_error(Puppet::Error, /Could not match line/)
84   end
85   it 'should be able to set admin value' do
86     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
87 foo   []
88 icinga  [monitoring]
89 kitchen []
90 kitchen2        [abc, def, ghi]
91 EOT
92     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['administrator'])
93     @provider.admin=:true
94   end
95   it 'should not interfere with existing tags on the user when setting admin value' do
96     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
97 foo   [bar, baz]
98 icinga  [monitoring]
99 kitchen []
100 kitchen2        [abc, def, ghi]
101 EOT
102     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['bar','baz', 'administrator'].sort)
103     @provider.admin=:true
104   end
105   it 'should be able to unset admin value' do
106     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
107 foo     [administrator]
108 guest   [administrator]
109 icinga  []
110 EOT
111     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', [])
112     @provider.admin=:false
113   end
114   it 'should not interfere with existing tags on the user when unsetting admin value' do
115     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
116 foo   [administrator, bar, baz]
117 icinga  [monitoring]
118 kitchen []
119 kitchen2        [abc, def, ghi]
120 EOT
121     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['bar','baz'].sort)
122     @provider.admin=:false
123   end
124
125   it 'should clear all tags on existing user' do
126     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
127 one [administrator]
128 foo [tag1,tag2]
129 icinga  [monitoring]
130 kitchen []
131 kitchen2        [abc, def, ghi]
132 EOT
133     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', [])
134     @provider.tags=[]
135   end
136
137   it 'should set multiple tags' do
138     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
139 one [administrator]
140 foo []
141 icinga  [monitoring]
142 kitchen []
143 kitchen2        [abc, def, ghi]
144 EOT
145     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['tag1','tag2'])
146     @provider.tags=['tag1','tag2']
147   end
148
149   it 'should clear tags while keep admin tag' do
150     @resource[:admin]  = true
151     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
152 one [administrator]
153 foo [administrator, tag1, tag2]
154 icinga  [monitoring]
155 kitchen []
156 kitchen2        [abc, def, ghi]
157 EOT
158     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator"])
159     @provider.tags=[]
160   end
161
162   it 'should change tags while keep admin tag' do
163     @resource[:admin]  = true
164     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
165 one [administrator]
166 foo [administrator, tag1, tag2]
167 icinga  [monitoring]
168 kitchen []
169 kitchen2        [abc, def, ghi]
170 EOT
171     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator","tag1","tag3","tag7"])
172     @provider.tags=['tag1','tag7','tag3']
173   end
174
175   it 'should create user with tags and without admin' do
176     @resource[:tags] = [ "tag1", "tag2" ]
177     @provider.expects(:rabbitmqctl).with('add_user', 'foo', 'bar')
178     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["tag1","tag2"])
179     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
180 foo []
181 EOT
182     @provider.create
183   end
184
185   it 'should create user with tags and with admin' do
186     @resource[:tags] = [ "tag1", "tag2" ]
187     @resource[:admin]  = true
188     @provider.expects(:rabbitmqctl).with('add_user', 'foo', 'bar')
189     @provider.expects(:rabbitmqctl).with('-q', 'list_users').twice.returns <<-EOT
190 foo []
191 EOT
192     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator"])
193     @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator","tag1","tag2"])
194     @provider.create
195   end
196
197   it 'should not return the administrator tag in tags for admins' do
198     @resource[:tags] = []
199     @resource[:admin]  = true
200     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
201 foo [administrator]
202 EOT
203     @provider.tags.should == []
204   end
205
206   it 'should return the administrator tag for non-admins' do
207     # this should not happen though.
208     @resource[:tags] = []
209     @resource[:admin]  = :false
210     @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
211 foo [administrator]
212 EOT
213     @provider.tags.should == ["administrator"]
214   end
215 end