3 provider_class = Puppet::Type.type(:rabbitmq_user).provider(:rabbitmqctl)
4 describe provider_class do
6 Puppet::Type.type(:rabbitmq_user).new(
10 provider: described_class.name
13 let(:provider) { provider_class.new(resource) }
14 let(:instance) { provider.class.instances.first }
17 provider.class.stubs(:rabbitmqctl).with('-q', 'list_users').returns(
18 "rmq_x [disk, storage]\nrmq_y [network, cpu, administrator]\nrmq_z []\n"
22 describe '#self.instances' do
23 it { expect(provider.class.instances.size).to eq(3) }
24 it 'returns an array of users' do
25 users = provider.class.instances.map(&:name)
26 expect(users).to match_array(%w[rmq_x rmq_y rmq_z])
28 it 'returns the expected tags' do
29 tags = provider.class.instances.first.get(:tags)
30 expect(tags).to match_array(%w[disk storage])
34 describe '#exists?' do
35 it { expect(instance.exists?).to be true }
40 provider.expects(:rabbitmqctl).with('add_user', 'rmq_x', 'secret')
43 context 'no password supplied' do
45 Puppet::Type.type(:rabbitmq_user).new(
51 it 'raises an error' do
54 end.to raise_error(Puppet::Error, 'Password is a required parameter for rabbitmq_user (user: rmq_x)')
59 describe '#destroy' do
60 it 'removes a user' do
61 provider.expects(:rabbitmqctl).with('delete_user', 'rmq_x')
66 describe '#check_password' do
67 context 'correct password' do
69 provider.class.stubs(:rabbitmqctl).with(
71 'rabbit_access_control:check_user_pass_login(list_to_binary("rmq_x"), list_to_binary("secret")).'
73 {ok,{user,<<"rmq_x">>,[],rabbit_auth_backend_internal,
74 {internal_user,<<"rmq_x">>,
75 <<193,81,62,182,129,135,196,89,148,87,227,48,86,2,154,
82 provider.check_password('secret')
86 context 'incorrect password' do
88 provider.class.stubs(:rabbitmqctl).with(
90 'rabbit_access_control:check_user_pass_login(list_to_binary("rmq_x"), list_to_binary("nottherightone")).'
92 {refused,"user '~s' - invalid credentials",[<<"rmq_x">>]}
98 provider.check_password('nottherightone')
104 it 'clears all tags on existing user' do
105 provider.set(tags: %w[tag1 tag2 tag3])
106 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', [])
111 it 'sets multiple tags' do
112 provider.set(tags: [])
113 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', %w[tag1 tag2])
114 provider.tags = %w[tag1 tag2]
118 it 'clears tags while keeping admin tag' do
119 provider.set(tags: %w[administrator tag1 tag2])
120 resource[:admin] = true
121 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', ['administrator'])
126 it 'changes tags while keeping admin tag' do
127 provider.set(tags: %w[administrator tag1 tag2])
128 resource[:admin] = true
129 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', %w[tag1 tag7 tag3 administrator])
130 provider.tags = %w[tag1 tag7 tag3]
135 describe '#admin=' do
136 it 'gets admin value properly' do
137 provider.set(tags: %w[administrator tag1 tag2])
138 expect(provider.admin).to be :true
141 it 'gets false admin value' do
142 provider.set(tags: %w[tag1 tag2])
143 expect(provider.admin).to be :false
146 it 'sets admin value' do
147 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', ['administrator'])
148 resource[:admin] = true
149 provider.admin = resource[:admin]
153 it 'adds admin value to existing tags of the user' do
154 resource[:tags] = %w[tag1 tag2]
155 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', %w[tag1 tag2 administrator])
156 resource[:admin] = true
157 provider.admin = resource[:admin]
161 it 'unsets admin value' do
162 provider.set(tags: ['administrator'])
163 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', [])
164 provider.admin = :false
168 it 'does not interfere with existing tags on the user when unsetting admin value' do
169 provider.set(tags: %w[administrator tag1 tag2])
170 resource[:tags] = %w[tag1 tag2]
171 provider.expects(:rabbitmqctl).with('set_user_tags', 'rmq_x', %w[tag1 tag2])
172 provider.admin = :false