3 RSpec.configure do |config|
4 config.mock_with :mocha
6 provider_class = Puppet::Type.type(:rabbitmq_user).provider(:rabbitmqctl)
7 describe provider_class do
9 @resource = Puppet::Type::Rabbitmq_user.new(
10 {:name => 'foo', :password => 'bar'}
12 @provider = provider_class.new(@resource)
14 it 'should match user names' do
15 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
18 @provider.exists?.should == 'foo'
20 it 'should match user names with 2.4.1 syntax' do
21 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
24 @provider.exists?.should == 'foo bar'
26 it 'should not match if no users on system' do
27 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
29 @provider.exists?.should be_nil
31 it 'should not match if no matching users on system' do
32 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
35 @provider.exists?.should be_nil
37 it 'should match user names from list' do
38 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
44 @provider.exists?.should == 'foo'
46 it 'should create user and set password' do
47 @resource[:password] = 'bar'
48 @provider.expects(:rabbitmqctl).with('add_user', 'foo', 'bar')
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
59 kitchen2 [abc, def, ghi]
61 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['administrator'])
64 it 'should call rabbitmqctl to delete' do
65 @provider.expects(:rabbitmqctl).with('delete_user', 'foo')
68 it 'should be able to retrieve admin value' do
69 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
72 @provider.admin.should == :true
73 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
77 @provider.admin.should == :false
79 it 'should fail if admin value is invalid' do
80 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
83 expect { @provider.admin }.to raise_error(Puppet::Error, /Could not match line/)
85 it 'should be able to set admin value' do
86 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
90 kitchen2 [abc, def, ghi]
92 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['administrator'])
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
100 kitchen2 [abc, def, ghi]
102 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['bar','baz', 'administrator'].sort)
103 @provider.admin=:true
105 it 'should be able to unset admin value' do
106 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
108 guest [administrator]
111 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', [])
112 @provider.admin=:false
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]
119 kitchen2 [abc, def, ghi]
121 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['bar','baz'].sort)
122 @provider.admin=:false
125 it 'should clear all tags on existing user' do
126 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
131 kitchen2 [abc, def, ghi]
133 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', [])
137 it 'should set multiple tags' do
138 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
143 kitchen2 [abc, def, ghi]
145 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ['tag1','tag2'])
146 @provider.tags=['tag1','tag2']
149 it 'should clear tags while keep admin tag' do
150 @resource[:admin] = true
151 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
153 foo [administrator, tag1, tag2]
156 kitchen2 [abc, def, ghi]
158 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator"])
162 it 'should change tags while keep admin tag' do
163 @resource[:admin] = true
164 @provider.expects(:rabbitmqctl).with('-q', 'list_users').returns <<-EOT
166 foo [administrator, tag1, tag2]
169 kitchen2 [abc, def, ghi]
171 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator","tag1","tag3","tag7"])
172 @provider.tags=['tag1','tag7','tag3']
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
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
192 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator"])
193 @provider.expects(:rabbitmqctl).with('set_user_tags', 'foo', ["administrator","tag1","tag2"])
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
203 @provider.tags.should == []
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
213 @provider.tags.should == ["administrator"]