github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/libnetwork/iptables/firewalld_test.go (about)

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