Skip to content

Commit 8ac01cd

Browse files
Move ip6tables provider tests to correct file
Move tests for the ip6tables provider into the ip6tables provider unit test file. Even if it's subclassed from iptables, it should be reasonable to expect running all tests in the ip6tables provider's tests file to include all tests for the ip6tables provider. Also update several test definitions that had fallen out of sync with the iptables provider's test framework so the test cases for ip6tables are also no longer sensitive to specific hash order and stringified 'true'.
1 parent 7a7db40 commit 8ac01cd

File tree

2 files changed

+100
-96
lines changed

2 files changed

+100
-96
lines changed

spec/unit/puppet/provider/ip6tables_spec.rb

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
require 'puppet/confine/exists'
66

77
provider_class = Puppet::Type.type(:firewall).provider(:ip6tables)
8-
describe 'ip6tables' do
8+
describe 'ip6tables' do # rubocop:disable RSpec/MultipleDescribes
99
let(:params) { { name: '000 test foo', action: 'accept' } }
1010
let(:provider) { provider_class }
1111
let(:resource) { Puppet::Type.type(:firewall) }
@@ -56,3 +56,102 @@ def stub_iptables
5656
it_behaves_like 'run'
5757
end
5858
end
59+
60+
describe 'ip6tables provider' do
61+
let(:provider6) { Puppet::Type.type(:firewall).provider(:ip6tables) }
62+
let(:resource) do
63+
Puppet::Type.type(:firewall).new(name: '000 test foo',
64+
action: 'accept',
65+
provider: 'ip6tables')
66+
end
67+
68+
before :each do
69+
allow(Puppet::Type::Firewall).to receive(:ip6tables).and_return provider6
70+
allow(provider6).to receive(:command).with(:ip6tables_save).and_return '/sbin/ip6tables-save'
71+
72+
# Stub iptables version
73+
allow(Facter.fact(:ip6tables_version)).to receive(:value).and_return '1.4.7'
74+
75+
allow(Puppet::Util::Execution).to receive(:execute).and_return ''
76+
allow(Puppet::Util).to receive(:which).with('ip6tables-save')
77+
.and_return '/sbin/ip6tables-save'
78+
end
79+
80+
it 'is expected to be able to get a list of existing rules' do
81+
provider6.instances.each do |rule|
82+
expect(rule).to be_instance_of(provider6)
83+
expect(rule.properties[:provider6].to_s).to eql provider6.name.to_s
84+
end
85+
end
86+
87+
it 'is expected to ignore lines with fatal errors' do
88+
allow(Puppet::Util::Execution).to receive(:execute).with(['/sbin/ip6tables-save'])
89+
.and_return('FATAL: Could not load /lib/modules/2.6.18-028stab095.1/modules.dep: No such file or directory')
90+
expect(provider6.instances.length).to eq 0
91+
end
92+
93+
# Load in ruby hash for test fixtures.
94+
load 'spec/fixtures/ip6tables/conversion_hash.rb'
95+
96+
describe 'when converting rules to resources' do
97+
ARGS_TO_HASH6.each do |test_name, data|
98+
describe "for test data '#{test_name}'" do
99+
let(:resource) { provider6.rule_to_hash(data[:line], data[:table], 0) }
100+
101+
# If this option is enabled, make sure the parameters exactly match
102+
if data[:compare_all]
103+
it 'the parameter hash keys should be the same as returned by rules_to_hash' do
104+
expect(resource.keys).to match_array(data[:params].keys)
105+
end
106+
end
107+
108+
# Iterate across each parameter, creating an example for comparison
109+
data[:params].each do |param_name, param_value|
110+
it "the parameter '#{param_name}' should match #{param_value.inspect}" do
111+
if param_value == true
112+
expect(resource[param_name]).to be_truthy
113+
else
114+
expect(resource[param_name]).to eq(data[:params][param_name])
115+
end
116+
end
117+
end
118+
end
119+
end
120+
end
121+
122+
describe 'when working out general_args' do
123+
HASH_TO_ARGS6.each do |test_name, data|
124+
describe "for test data '#{test_name}'" do
125+
let(:resource) { Puppet::Type.type(:firewall).new(data[:params]) }
126+
let(:provider6) { Puppet::Type.type(:firewall).provider(:ip6tables) }
127+
let(:instance) { provider6.new(resource) }
128+
129+
it 'general_args should be valid' do
130+
data[:args].unshift('--wait') if instance.general_args.flatten.include? '--wait'
131+
expect(instance.general_args.flatten).to eql data[:args]
132+
end
133+
end
134+
end
135+
end
136+
137+
describe 'when deleting ipv6 resources' do
138+
let(:sample_rule) do
139+
'-A INPUT -i lo -m comment --comment "001 accept all to lo interface v6" -j ACCEPT'
140+
end
141+
142+
let(:bare_sample_rule) do
143+
'-A INPUT -i lo -m comment --comment 001 accept all to lo interface v6 -j ACCEPT'
144+
end
145+
146+
let(:resource) { provider6.rule_to_hash(sample_rule, 'filter', 0) }
147+
let(:instance) { provider6.new(resource) }
148+
149+
it 'resource[:line] looks like the original rule' do
150+
resource[:line] == sample_rule
151+
end
152+
153+
it 'delete_args is an array' do
154+
expect(instance.delete_args.class).to eq(Array)
155+
end
156+
end
157+
end

spec/unit/puppet/provider/iptables_spec.rb

Lines changed: 0 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -353,98 +353,3 @@
353353
end
354354
end
355355
end
356-
357-
describe 'ip6tables provider' do
358-
let(:provider6) { Puppet::Type.type(:firewall).provider(:ip6tables) }
359-
let(:resource) do
360-
Puppet::Type.type(:firewall).new(name: '000 test foo',
361-
action: 'accept',
362-
provider: 'ip6tables')
363-
end
364-
365-
before :each do
366-
allow(Puppet::Type::Firewall).to receive(:ip6tables).and_return provider6
367-
allow(provider6).to receive(:command).with(:ip6tables_save).and_return '/sbin/ip6tables-save'
368-
369-
# Stub iptables version
370-
allow(Facter.fact(:ip6tables_version)).to receive(:value).and_return '1.4.7'
371-
372-
allow(Puppet::Util::Execution).to receive(:execute).and_return ''
373-
allow(Puppet::Util).to receive(:which).with('ip6tables-save')
374-
.and_return '/sbin/ip6tables-save'
375-
end
376-
377-
it 'is expected to be able to get a list of existing rules' do
378-
provider6.instances.each do |rule|
379-
expect(rule).to be_instance_of(provider6)
380-
expect(rule.properties[:provider6].to_s).to eql provider6.name.to_s
381-
end
382-
end
383-
384-
it 'is expected to ignore lines with fatal errors' do
385-
allow(Puppet::Util::Execution).to receive(:execute).with(['/sbin/ip6tables-save'])
386-
.and_return('FATAL: Could not load /lib/modules/2.6.18-028stab095.1/modules.dep: No such file or directory')
387-
expect(provider6.instances.length).to eq 0
388-
end
389-
390-
# Load in ruby hash for test fixtures.
391-
load 'spec/fixtures/ip6tables/conversion_hash.rb'
392-
393-
describe 'when converting rules to resources' do
394-
ARGS_TO_HASH6.each do |test_name, data|
395-
describe "for test data '#{test_name}'" do
396-
let(:resource) { provider6.rule_to_hash(data[:line], data[:table], 0) }
397-
398-
# If this option is enabled, make sure the parameters exactly match
399-
if data[:compare_all]
400-
it 'the parameter hash keys should be the same as returned by rules_to_hash' do
401-
expect(resource.keys).to match data[:params].keys
402-
end
403-
end
404-
405-
# Iterate across each parameter, creating an example for comparison
406-
data[:params].each do |param_name, param_value|
407-
it "the parameter '#{param_name}' should match #{param_value.inspect}" do
408-
expect(resource[param_name]).to eql data[:params][param_name]
409-
end
410-
end
411-
end
412-
end
413-
end
414-
415-
describe 'when working out general_args' do
416-
HASH_TO_ARGS6.each do |test_name, data|
417-
describe "for test data '#{test_name}'" do
418-
let(:resource) { Puppet::Type.type(:firewall).new(data[:params]) }
419-
let(:provider6) { Puppet::Type.type(:firewall).provider(:ip6tables) }
420-
let(:instance) { provider6.new(resource) }
421-
422-
it 'general_args should be valid' do
423-
data[:args].unshift('--wait') if instance.general_args.flatten.include? '--wait'
424-
expect(instance.general_args.flatten).to eql data[:args]
425-
end
426-
end
427-
end
428-
end
429-
430-
describe 'when deleting ipv6 resources' do
431-
let(:sample_rule) do
432-
'-A INPUT -i lo -m comment --comment "001 accept all to lo interface v6" -j ACCEPT'
433-
end
434-
435-
let(:bare_sample_rule) do
436-
'-A INPUT -i lo -m comment --comment 001 accept all to lo interface v6 -j ACCEPT'
437-
end
438-
439-
let(:resource) { provider6.rule_to_hash(sample_rule, 'filter', 0) }
440-
let(:instance) { provider6.new(resource) }
441-
442-
it 'resource[:line] looks like the original rule' do
443-
resource[:line] == sample_rule
444-
end
445-
446-
it 'delete_args is an array' do
447-
expect(instance.delete_args.class).to eq(Array)
448-
end
449-
end
450-
end

0 commit comments

Comments
 (0)