| //go:build linux | |
| // +build linux | |
| package iptables | |
| import ( | |
| "net" | |
| "strconv" | |
| "testing" | |
| ) | |
| func TestFirewalldInit(t *testing.T) { | |
| if !checkRunning() { | |
| t.Skip("firewalld is not running") | |
| } | |
| if err := FirewalldInit(); err != nil { | |
| t.Fatal(err) | |
| } | |
| } | |
| func TestReloaded(t *testing.T) { | |
| var err error | |
| var fwdChain *ChainInfo | |
| iptable := GetIptable(IPv4) | |
| fwdChain, err = iptable.NewChain("FWD", Filter, false) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| bridgeName := "lo" | |
| err = iptable.ProgramChain(fwdChain, bridgeName, false, true) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| defer fwdChain.Remove() | |
| // copy-pasted from iptables_test:TestLink | |
| ip1 := net.ParseIP("192.168.1.1") | |
| ip2 := net.ParseIP("192.168.1.2") | |
| port := 1234 | |
| proto := "tcp" | |
| err = fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName) | |
| if err != nil { | |
| t.Fatal(err) | |
| } else { | |
| // to be re-called again later | |
| OnReloaded(func() { fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName) }) | |
| } | |
| rule1 := []string{ | |
| "-i", bridgeName, | |
| "-o", bridgeName, | |
| "-p", proto, | |
| "-s", ip1.String(), | |
| "-d", ip2.String(), | |
| "--dport", strconv.Itoa(port), | |
| "-j", "ACCEPT"} | |
| if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) { | |
| t.Fatal("rule1 does not exist") | |
| } | |
| // flush all rules | |
| fwdChain.Remove() | |
| reloaded() | |
| // make sure the rules have been recreated | |
| if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) { | |
| t.Fatal("rule1 hasn't been recreated") | |
| } | |
| } | |
| func TestPassthrough(t *testing.T) { | |
| rule1 := []string{ | |
| "-i", "lo", | |
| "-p", "udp", | |
| "--dport", "123", | |
| "-j", "ACCEPT"} | |
| iptable := GetIptable(IPv4) | |
| if firewalldRunning { | |
| _, err := Passthrough(Iptables, append([]string{"-A"}, rule1...)...) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| if !iptable.Exists(Filter, "INPUT", rule1...) { | |
| t.Fatal("rule1 does not exist") | |
| } | |
| } | |
| } |