]> review.fuel-infra Code Review - puppet-modules/puppetlabs-firewall.git/commitdiff
(#13201) Tests and docstring for chain autorequire
authorDan Carley <dan.carley@gmail.com>
Sun, 18 Mar 2012 13:16:38 +0000 (13:16 +0000)
committerDan Carley <dan.carley@gmail.com>
Mon, 19 Mar 2012 08:27:54 +0000 (08:27 +0000)
Test for autorequire behaviour on :chain, :jump, and :chain + :jump params.
With both specified and default/undef :table and :provider params.

Document autorequire behaviour in docstring.

lib/puppet/type/firewall.rb
spec/unit/puppet/type/firewall_spec.rb

index df26ad936ccbc036ee4702a1e66467bdac7312a9..680f7763f5542ca26a3f8ed20a4a94708cdc1ad6 100644 (file)
@@ -15,6 +15,10 @@ Puppet::Type.newtype(:firewall) do
   @doc = <<-EOS
     This type provides the capability to manage firewall rules within
     puppet.
+
+    **Autorequires:** If Puppet is managing the iptables or ip6tables chains
+    specified in the `chain` or `jump` parameters, the firewall resource
+    will autorequire those firewallchain resources.
   EOS
 
   feature :rate_limiting, "Rate limiting features."
index 4d1eca8e4737326accb0cbb2fbbb58a5dc57b870..4fb814a09dfa1be09948f3be5f72b5f5094cfaae 100755 (executable)
@@ -305,4 +305,85 @@ describe firewall do
       @resource[:set_mark].should == '0x3e8'
     end
   end
+
+  [:chain, :jump].each do |param|
+    describe param do
+      it 'should autorequire fwchain when table and provider are undefined' do
+        @resource[param] = 'FOO'
+        @resource[:table].should == :filter
+        @resource[:provider].should == :iptables
+
+        chain = Puppet::Type.type(:firewallchain).new(:name => 'FOO:filter:IPv4')
+        catalog = Puppet::Resource::Catalog.new
+        catalog.add_resource @resource
+        catalog.add_resource chain
+        rel = @resource.autorequire[0]
+        rel.source.ref.should == chain.ref
+        rel.target.ref.should == @resource.ref
+      end
+
+      it 'should autorequire fwchain when table is undefined and provider is ip6tables' do
+        @resource[param] = 'FOO'
+        @resource[:table].should == :filter
+        @resource[:provider] = :ip6tables
+
+        chain = Puppet::Type.type(:firewallchain).new(:name => 'FOO:filter:IPv6')
+        catalog = Puppet::Resource::Catalog.new
+        catalog.add_resource @resource
+        catalog.add_resource chain
+        rel = @resource.autorequire[0]
+        rel.source.ref.should == chain.ref
+        rel.target.ref.should == @resource.ref
+      end
+
+      it 'should autorequire fwchain when table is raw and provider is undefined' do
+        @resource[param] = 'FOO'
+        @resource[:table] = :raw
+        @resource[:provider].should == :iptables
+
+        chain = Puppet::Type.type(:firewallchain).new(:name => 'FOO:raw:IPv4')
+        catalog = Puppet::Resource::Catalog.new
+        catalog.add_resource @resource
+        catalog.add_resource chain
+        rel = @resource.autorequire[0]
+        rel.source.ref.should == chain.ref
+        rel.target.ref.should == @resource.ref
+      end
+
+      it 'should autorequire fwchain when table is raw and provider is ip6tables' do
+        @resource[param] = 'FOO'
+        @resource[:table] = :raw
+        @resource[:provider] = :ip6tables
+
+        chain = Puppet::Type.type(:firewallchain).new(:name => 'FOO:raw:IPv6')
+        catalog = Puppet::Resource::Catalog.new
+        catalog.add_resource @resource
+        catalog.add_resource chain
+        rel = @resource.autorequire[0]
+        rel.source.ref.should == chain.ref
+        rel.target.ref.should == @resource.ref
+      end
+    end
+  end
+
+  describe ":chain and :jump" do
+    it 'should autorequire independent fwchains' do
+      @resource[:chain] = 'FOO'
+      @resource[:jump] = 'BAR'
+      @resource[:table].should == :filter
+      @resource[:provider].should == :iptables
+
+      chain_foo = Puppet::Type.type(:firewallchain).new(:name => 'FOO:filter:IPv4')
+      chain_bar = Puppet::Type.type(:firewallchain).new(:name => 'BAR:filter:IPv4')
+      catalog = Puppet::Resource::Catalog.new
+      catalog.add_resource @resource
+      catalog.add_resource chain_foo
+      catalog.add_resource chain_bar
+      rel = @resource.autorequire
+      rel[0].source.ref.should == chain_foo.ref
+      rel[0].target.ref.should == @resource.ref
+      rel[1].source.ref.should == chain_bar.ref
+      rel[1].target.ref.should == @resource.ref
+    end
+  end
 end