55module Puffy
66 module Formatters
77 RSpec . describe Pf ::Rule do
8+ subject ( :formatter ) { described_class . new }
9+
810 it 'formats simple rules' do
911 rule = Rule . new ( action : :pass , dir : :out , proto : :tcp )
10- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass out quick proto tcp' )
12+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass out quick proto tcp' )
1113
1214 rule = Rule . new ( action : :pass , dir : :in , proto : :tcp , to : { host : nil , port : 80 } )
13- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp to any port 80' )
15+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp to any port 80' )
1416
1517 rule = Rule . new ( action : :block , dir : :in , proto : :icmp )
16- expect ( subject . emit_rule ( rule ) ) . to eq ( 'block in quick proto icmp' )
18+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'block in quick proto icmp' )
1719
1820 rule = Rule . new ( action : :pass , dir : :in , proto : :udp , from : { port : 123 } , to : { port : 123 } )
19- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick proto udp from any port 123 to any port 123' )
21+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick proto udp from any port 123 to any port 123' )
2022
2123 rule = Rule . new ( action : :pass , dir : :in , proto : :tcp , from : { port : 67 ..68 } , to : { port : 67 ..68 } )
22- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp from any port 67:68 to any port 67:68' )
24+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp from any port 67:68 to any port 67:68' )
2325 end
2426
2527 it 'generates non-quick rules' do
2628 rule = Rule . new ( action : :block , dir : :in , no_quick : true )
27- expect ( subject . emit_rule ( rule ) ) . to eq ( 'block in all' )
29+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'block in all' )
2830 end
2931
3032 it 'returns packets when instructed so' do
3133 rule = Rule . new ( action : :block , return : true , dir : :in , proto : :icmp )
32- expect ( subject . emit_rule ( rule ) ) . to eq ( 'block return in quick proto icmp' )
34+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'block return in quick proto icmp' )
3335 end
3436
35- context 'redirect rules' do
37+ context 'when formatting redirect rules' do
3638 it 'formats redirect rules' do
3739 rule = Rule . new ( action : :pass , dir : :in , on : 'eth0' , proto : :tcp , to : { port : 80 } , rdr_to : { host : IPAddr . new ( '127.0.0.1/32' ) , port : 3128 } )
38- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick on eth0 proto tcp to any port 80 divert-to 127.0.0.1 port 3128' )
40+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick on eth0 proto tcp to any port 80 divert-to 127.0.0.1 port 3128' )
3941 end
4042
4143 it 'fails on ambiguous redirect rule' do
4244 rule = Rule . new ( action : :pass , dir : :in , on : 'eth0' , proto : :tcp , to : { port : 80 } , rdr_to : { port : 3128 } )
43- expect { subject . emit_rule ( rule ) } . to raise_exception ( 'Unspecified address family' )
45+ expect { formatter . emit_rule ( rule ) } . to raise_exception ( 'Unspecified address family' )
4446 end
4547
4648 it 'formats implicit IPv4 destination' do
4749 rule = Rule . new ( action : :pass , dir : :in , on : 'eth0' , af : :inet , proto : :tcp , to : { port : 80 } , rdr_to : { port : 3128 } )
48- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick on eth0 proto tcp to any port 80 divert-to 127.0.0.1 port 3128' )
50+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick on eth0 proto tcp to any port 80 divert-to 127.0.0.1 port 3128' )
4951 end
5052
5153 it 'formats implicit IPv6 destination' do
5254 rule = Rule . new ( action : :pass , dir : :in , on : 'eth0' , af : :inet6 , proto : :tcp , to : { port : 80 } , rdr_to : { port : 3128 } )
53- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick on eth0 proto tcp to any port 80 divert-to ::1 port 3128' )
55+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick on eth0 proto tcp to any port 80 divert-to ::1 port 3128' )
5456 end
5557 end
5658
57- context 'implicit address family' do
59+ context 'when using an implicit address family' do
5860 it 'skips redundant address family' do
5961 rule = Rule . new ( action : :pass , dir : :in , af : :inet , proto : :tcp , to : { host : IPAddr . new ( '127.0.0.1' ) } )
60- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp to 127.0.0.1' )
62+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp to 127.0.0.1' )
6163 rule = Rule . new ( action : :pass , dir : :in , af : :inet6 , proto : :tcp , to : { host : IPAddr . new ( '::1' ) } )
62- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp to ::1' )
64+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick proto tcp to ::1' )
6365 rule = Rule . new ( action : :pass , dir : :in , af : :inet , proto : :tcp , to : { port : 80 } )
64- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick inet proto tcp to any port 80' )
66+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick inet proto tcp to any port 80' )
6567 rule = Rule . new ( action : :pass , dir : :in , af : :inet6 , proto : :tcp , to : { port : 80 } )
66- expect ( subject . emit_rule ( rule ) ) . to eq ( 'pass in quick inet6 proto tcp to any port 80' )
68+ expect ( formatter . emit_rule ( rule ) ) . to eq ( 'pass in quick inet6 proto tcp to any port 80' )
6769 end
6870 end
6971 end
7072
7173 RSpec . describe Pf ::Ruleset do
72- context 'ruleset' do
74+ subject ( :formatter ) { described_class . new }
75+
76+ context 'with a ruleset' do
7377 let ( :parser ) do
7478 parser = Puffy ::Parser . new
7579 parser . parse ( File . read ( File . join ( 'spec' , 'fixtures' , 'simple_lan_network.puffy' ) ) )
@@ -84,9 +88,9 @@ module Formatters
8488 Timecop . return
8589 end
8690
87- it 'formats a simple lan network rules' do
91+ it 'generates the correct gw rules' do
8892 rules = parser . ruleset_for ( 'gw' )
89- expect ( subject . emit_ruleset ( rules , :block ) ) . to eq <<~PF
93+ expect ( formatter . emit_ruleset ( rules , :block ) ) . to eq <<~PF
9094 # Generated by puffy v#{ Puffy ::VERSION } on Sat Jan 1 00:00:00 2000
9195 match in all scrub (no-df)
9296 set skip on lo
@@ -99,9 +103,9 @@ module Formatters
99103 PF
100104 end
101105
102- it 'formats a simple lan network rules' do
106+ it 'generates tE correct www rules' do
103107 rules = parser . ruleset_for ( 'www' )
104- expect ( subject . emit_ruleset ( rules , :block ) ) . to eq <<~PF
108+ expect ( formatter . emit_ruleset ( rules , :block ) ) . to eq <<~PF
105109 # Generated by puffy v#{ Puffy ::VERSION } on Sat Jan 1 00:00:00 2000
106110 match in all scrub (no-df)
107111 set skip on lo
0 commit comments