firewalld_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package iptables
  2. import (
  3. "net"
  4. "strconv"
  5. "testing"
  6. )
  7. func TestFirewalldInit(t *testing.T) {
  8. if !checkRunning() {
  9. t.Skip("firewalld is not running")
  10. }
  11. if err := FirewalldInit(); err != nil {
  12. t.Fatal(err)
  13. }
  14. }
  15. func TestReloaded(t *testing.T) {
  16. var err error
  17. var fwdChain *ChainInfo
  18. iptable := GetIptable(IPv4)
  19. fwdChain, err = iptable.NewChain("FWD", Filter, false)
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. bridgeName := "lo"
  24. err = iptable.ProgramChain(fwdChain, bridgeName, false, true)
  25. if err != nil {
  26. t.Fatal(err)
  27. }
  28. defer fwdChain.Remove()
  29. // copy-pasted from iptables_test:TestLink
  30. ip1 := net.ParseIP("192.168.1.1")
  31. ip2 := net.ParseIP("192.168.1.2")
  32. port := 1234
  33. proto := "tcp"
  34. err = fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName)
  35. if err != nil {
  36. t.Fatal(err)
  37. } else {
  38. // to be re-called again later
  39. OnReloaded(func() { fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName) })
  40. }
  41. rule1 := []string{
  42. "-i", bridgeName,
  43. "-o", bridgeName,
  44. "-p", proto,
  45. "-s", ip1.String(),
  46. "-d", ip2.String(),
  47. "--dport", strconv.Itoa(port),
  48. "-j", "ACCEPT"}
  49. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  50. t.Fatal("rule1 does not exist")
  51. }
  52. // flush all rules
  53. fwdChain.Remove()
  54. reloaded()
  55. // make sure the rules have been recreated
  56. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  57. t.Fatal("rule1 hasn't been recreated")
  58. }
  59. }
  60. func TestPassthrough(t *testing.T) {
  61. rule1 := []string{
  62. "-i", "lo",
  63. "-p", "udp",
  64. "--dport", "123",
  65. "-j", "ACCEPT"}
  66. iptable := GetIptable(IPv4)
  67. if firewalldRunning {
  68. _, err := Passthrough(Iptables, append([]string{"-A"}, rule1...)...)
  69. if err != nil {
  70. t.Fatal(err)
  71. }
  72. if !iptable.Exists(Filter, "INPUT", rule1...) {
  73. t.Fatal("rule1 does not exist")
  74. }
  75. }
  76. }