3 describe Puppet::Type.type(:rabbitmq_policy).provider(:rabbitmqctl) do
5 Puppet::Type.type(:rabbitmq_policy).new(
13 let(:provider) { described_class.new(resource) }
16 described_class.instance_variable_set(:@policies, nil)
19 context 'has "@" in policy name' do
21 Puppet::Type.type(:rabbitmq_policy).new(
27 provider: described_class.name
30 let(:provider) { described_class.new(resource) }
33 expect(provider.should_policy).to eq('ha@home')
37 expect(provider.should_vhost).to eq('/')
41 it 'fails with invalid output from list' do
42 provider.class.expects(:rabbitmqctl).with('-q', 'status').returns '{rabbit,"RabbitMQ","3.1.5"}'
43 provider.class.expects(:rabbitmqctl).with('list_policies', '-q', '-p', '/').returns 'foobar'
44 expect { provider.exists? }.to raise_error(Puppet::Error, %r{cannot parse line from list_policies})
47 context 'with RabbitMQ version >=3.7.0' do
48 it 'matches policies from list' do
49 provider.class.expects(:rabbitmq_version).returns '3.7.0'
50 provider.class.expects(:rabbitmqctl).with('list_policies', '-q', '-p', '/').returns <<-EOT
51 / ha-all .* all {"ha-mode":"all","ha-sync-mode":"automatic"} 0
52 / test .* exchanges {"ha-mode":"all"} 0
54 expect(provider.exists?).to eq(applyto: 'all',
59 'ha-sync-mode' => 'automatic'
64 context 'with RabbitMQ version >=3.2.0 and < 3.7.0' do
65 it 'matches policies from list' do
66 provider.class.expects(:rabbitmq_version).returns '3.6.9'
67 provider.class.expects(:rabbitmqctl).with('list_policies', '-q', '-p', '/').returns <<-EOT
68 / ha-all all .* {"ha-mode":"all","ha-sync-mode":"automatic"} 0
69 / test exchanges .* {"ha-mode":"all"} 0
71 expect(provider.exists?).to eq(applyto: 'all',
76 'ha-sync-mode' => 'automatic'
81 context 'with RabbitMQ version <3.2.0' do
82 it 'matches policies from list (<3.2.0)' do
83 provider.class.expects(:rabbitmq_version).returns '3.1.5'
84 provider.class.expects(:rabbitmqctl).with('list_policies', '-q', '-p', '/').returns <<-EOT
85 / ha-all .* {"ha-mode":"all","ha-sync-mode":"automatic"} 0
86 / test .* {"ha-mode":"all"} 0
88 expect(provider.exists?).to eq(applyto: 'all',
93 'ha-sync-mode' => 'automatic'
98 it 'does not match an empty list' do
99 provider.class.expects(:rabbitmqctl).with('-q', 'status').returns '{rabbit,"RabbitMQ","3.1.5"}'
100 provider.class.expects(:rabbitmqctl).with('list_policies', '-q', '-p', '/').returns ''
101 expect(provider.exists?).to eq(nil)
104 it 'destroys policy' do
105 provider.expects(:rabbitmqctl).with('clear_policy', '-p', '/', 'ha-all')
109 it 'onlies call set_policy once (<3.2.0)' do
110 provider.class.expects(:rabbitmq_version).returns '3.1.0'
111 provider.resource[:priority] = '10'
112 provider.resource[:applyto] = 'exchanges'
113 provider.expects(:rabbitmqctl).with('set_policy',
119 provider.priority = '10'
120 provider.applyto = 'exchanges'
123 it 'onlies call set_policy once (>=3.2.0)' do
124 provider.class.expects(:rabbitmq_version).returns '3.2.0'
125 provider.resource[:priority] = '10'
126 provider.resource[:applyto] = 'exchanges'
127 provider.expects(:rabbitmqctl).with('set_policy',
130 '--apply-to', 'exchanges',
133 '{"ha-mode":"all"}').once
134 provider.priority = '10'
135 provider.applyto = 'exchanges'