Update rabbitmq module
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / spec / unit / puppet / provider / rabbitmq_user_permissions / rabbitmqctl_spec.rb
1 require 'spec_helper'
2
3 describe 'Puppet::Type.type(:rabbitmq_user_permissions).provider(:rabbitmqctl)' do
4   let(:resource) do
5     Puppet::Type::Rabbitmq_user_permissions.new(
6       name: 'foo@bar'
7     )
8   end
9   let(:provider_class) { Puppet::Type.type(:rabbitmq_user_permissions).provider(:rabbitmqctl) }
10   let(:provider) { provider_class.new(resource) }
11
12   after do
13     provider_class.instance_variable_set(:@users, nil)
14   end
15   it 'matches user permissions from list' do
16     provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
17 bar 1 2 3
18 EOT
19     expect(provider.exists?).to eq(configure: '1', write: '2', read: '3')
20   end
21   it 'matches user permissions with empty columns' do
22     provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
23 bar                     3
24 EOT
25     expect(provider.exists?).to eq(configure: '', write: '', read: '3')
26   end
27   it 'does not match user permissions with more than 3 columns' do
28     provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
29 bar 1 2 3 4
30 EOT
31     expect { provider.exists? }.to raise_error(Puppet::Error, %r{cannot parse line from list_user_permissions})
32   end
33   it 'does not match an empty list' do
34     provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
35 EOT
36     expect(provider.exists?).to eq(nil)
37   end
38   it 'creates default permissions' do
39     provider.instance_variable_set(:@should_vhost, 'bar')
40     provider.instance_variable_set(:@should_user, 'foo')
41     provider.expects(:rabbitmqctl).with('set_permissions', '-p', 'bar', 'foo', "''", "''", "''")
42     provider.create
43   end
44   it 'destroys permissions' do
45     provider.instance_variable_set(:@should_vhost, 'bar')
46     provider.instance_variable_set(:@should_user, 'foo')
47     provider.expects(:rabbitmqctl).with('clear_permissions', '-p', 'bar', 'foo')
48     provider.destroy
49   end
50   { configure_permission: '1', write_permission: '2', read_permission: '3' }.each do |k, v|
51     it "should be able to retrieve #{k}" do
52       provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
53 bar 1 2 3
54 EOT
55       expect(provider.send(k)).to eq(v)
56     end
57   end
58   { configure_permission: '1', write_permission: '2', read_permission: '3' }.each do |k, v|
59     it "should be able to retrieve #{k} after exists has been called" do
60       provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
61 bar 1 2 3
62 EOT
63       provider.exists?
64       expect(provider.send(k)).to eq(v)
65     end
66   end
67   { configure_permission: %w[foo 2 3],
68     read_permission: %w[1 2 foo],
69     write_permission: %w[1 foo 3] }.each do |perm, columns|
70     it "should be able to sync #{perm}" do
71       provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
72 bar 1 2 3
73 EOT
74       provider.resource[perm] = 'foo'
75       provider.expects(:rabbitmqctl).with('set_permissions', '-p', 'bar', 'foo', *columns)
76       provider.send("#{perm}=".to_sym, 'foo')
77     end
78   end
79   it 'onlies call set_permissions once' do
80     provider.class.expects(:rabbitmqctl).with('-q', 'list_user_permissions', 'foo').returns <<-EOT
81 bar 1 2 3
82 EOT
83     provider.resource[:configure_permission] = 'foo'
84     provider.resource[:read_permission] = 'foo'
85     provider.expects(:rabbitmqctl).with('set_permissions', '-p', 'bar', 'foo', 'foo', '2', 'foo').once
86     provider.configure_permission = 'foo'
87     provider.read_permission = 'foo'
88   end
89 end