PageRenderTime 27ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/spec/unit/puppet/type/firewallchain_spec.rb

https://bitbucket.org/schatt/puppetlabs-firewall
Ruby | 107 lines | 90 code | 16 blank | 1 comment | 15 complexity | 564e1b1f4266e1659bd8e6ed050646a1 MD5 | raw file
  1. #!/usr/bin/env rspec
  2. require 'spec_helper'
  3. firewallchain = Puppet::Type.type(:firewallchain)
  4. describe firewallchain do
  5. let(:klass) { firewallchain }
  6. let(:provider) {
  7. prov = stub 'provider'
  8. prov.stubs(:name).returns(:iptables_chain)
  9. prov
  10. }
  11. let(:resource) {
  12. Puppet::Type::Firewallchain.stubs(:defaultprovider).returns provider
  13. klass.new({:name => 'INPUT:filter:IPv4', :policy => :accept })
  14. }
  15. it 'should have :name be its namevar' do
  16. klass.key_attributes.should == [:name]
  17. end
  18. describe ':name' do
  19. {'nat' => ['PREROUTING', 'POSTROUTING', 'OUTPUT'],
  20. 'mangle' => [ 'PREROUTING', 'POSTROUTING', 'INPUT', 'FORWARD', 'OUTPUT' ],
  21. 'filter' => ['INPUT','OUTPUT','FORWARD'],
  22. 'raw' => [ 'PREROUTING', 'OUTPUT'],
  23. 'broute' => ['BROUTING']
  24. }.each_pair do |table, allowedinternalchains|
  25. ['IPv4', 'IPv6', 'ethernet'].each do |protocol|
  26. [ 'test', '$5()*&%\'"^$09):' ].each do |chainname|
  27. name = "#{chainname}:#{table}:#{protocol}"
  28. if table == 'nat' && protocol == 'IPv6'
  29. it "should fail #{name}" do
  30. expect { resource[:name] = name }.to raise_error(Puppet::Error)
  31. end
  32. elsif protocol != 'ethernet' && table == 'broute'
  33. it "should fail #{name}" do
  34. expect { resource[:name] = name }.to raise_error(Puppet::Error)
  35. end
  36. else
  37. it "should accept name #{name}" do
  38. resource[:name] = name
  39. resource[:name].should == name
  40. end
  41. end
  42. end # chainname
  43. end # protocol
  44. [ 'PREROUTING', 'POSTROUTING', 'BROUTING', 'INPUT', 'FORWARD', 'OUTPUT' ].each do |internalchain|
  45. name = internalchain + ':' + table + ':'
  46. if internalchain == 'BROUTING'
  47. name += 'ethernet'
  48. elsif table == 'nat'
  49. name += 'IPv4'
  50. else
  51. name += 'IPv4'
  52. end
  53. if allowedinternalchains.include? internalchain
  54. it "should allow #{name}" do
  55. resource[:name] = name
  56. resource[:name].should == name
  57. end
  58. else
  59. it "should fail #{name}" do
  60. expect { resource[:name] = name }.to raise_error(Puppet::Error)
  61. end
  62. end
  63. end # internalchain
  64. end # table, allowedinternalchainnames
  65. it 'should fail with invalid table names' do
  66. expect { resource[:name] = 'wrongtablename:test:IPv4' }.to raise_error(Puppet::Error)
  67. end
  68. it 'should fail with invalid protocols names' do
  69. expect { resource[:name] = 'test:filter:IPv5' }.to raise_error(Puppet::Error)
  70. end
  71. end
  72. describe ':policy' do
  73. [:accept, :drop, :queue, :return].each do |policy|
  74. it "should accept policy #{policy}" do
  75. resource[:policy] = policy
  76. resource[:policy].should == policy
  77. end
  78. end
  79. it 'should fail when value is not recognized' do
  80. expect { resource[:policy] = 'not valid' }.to raise_error(Puppet::Error)
  81. end
  82. [:accept, :drop, :queue, :return].each do |policy|
  83. it "non-inbuilt chains should not accept policy #{policy}" do
  84. expect { klass.new({:name => 'testchain:filter:IPv4', :policy => policy }) }.to raise_error(Puppet::Error)
  85. end
  86. it "non-inbuilt chains can accept policies on protocol = ethernet (policy #{policy})" do
  87. klass.new({:name => 'testchain:filter:ethernet', :policy => policy }).should be_instance_of(@provider)
  88. end
  89. end
  90. end
  91. end