iptables_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package firewall
  2. import (
  3. "strings"
  4. "testing"
  5. )
  6. func TestBuildNATRuleLines_InterfaceList(t *testing.T) {
  7. rule := NATRule{
  8. ID: "nat-test-1",
  9. Order: 1,
  10. Chain: "srcnat",
  11. Action: "masquerade",
  12. OutInterface: "wan0",
  13. Disabled: false,
  14. }
  15. resolved := resolveRoles([]byte(`{"interfaces":{"wan0":{"role":"WAN"},"lan0":{"role":"LAN"}}}`), "WAN")
  16. if len(resolved) != 1 || resolved[0] != "wan0" {
  17. t.Fatal(resolved)
  18. }
  19. lines := buildNATRuleLines(rule)
  20. if len(lines) == 0 {
  21. t.Fatalf("expected non-empty lines for WAN interface list, got 0")
  22. }
  23. for _, l := range lines {
  24. if !strings.Contains(l, "-j MASQUERADE") {
  25. t.Errorf("line missing -j MASQUERADE: %s", l)
  26. }
  27. if !strings.Contains(l, "-o ") {
  28. t.Errorf("expected -o flag in expanded NAT rule, got: %s", l)
  29. }
  30. }
  31. }
  32. func TestBuildRuleLines_SDWANGroup(t *testing.T) {
  33. oldResolver := SDWANResolver
  34. defer func() { SDWANResolver = oldResolver }()
  35. SDWANResolver = func(groupName string) []string {
  36. if groupName == "sdwan0" {
  37. return []string{"eth0", "eth1"}
  38. }
  39. return nil
  40. }
  41. rule := FilterRule{
  42. ID: "filter-sdwan-1",
  43. Order: 1,
  44. Chain: "forward",
  45. Action: "drop",
  46. OutInterface: "sdwan0",
  47. Protocol: "tcp",
  48. DstPort: "25",
  49. Disabled: false,
  50. }
  51. lines := buildFilterRuleLines(rule)
  52. if len(lines) != 2 {
  53. t.Fatalf("expected 2 lines for 2 SD-WAN member interfaces, got %d", len(lines))
  54. }
  55. if !strings.Contains(lines[0], "-o eth0") && !strings.Contains(lines[1], "-o eth0") {
  56. t.Errorf("expected eth0 in lines: %v", lines)
  57. }
  58. if !strings.Contains(lines[0], "-o eth1") && !strings.Contains(lines[1], "-o eth1") {
  59. t.Errorf("expected eth1 in lines: %v", lines)
  60. }
  61. }