mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-11 21:27:31 +00:00
util/linuxfw: move detection logic
Just a refactor to consolidate the firewall detection logic in a single package so that it can be reused in a later commit by containerboot. Updates #9310 Signed-off-by: Maisem Ali <maisem@tailscale.com>
This commit is contained in:
@@ -372,7 +372,7 @@ type fakeIPTablesRunner struct {
|
||||
//we always assume ipv6 and ipv6 nat are enabled when testing
|
||||
}
|
||||
|
||||
func newIPTablesRunner(t *testing.T) netfilterRunner {
|
||||
func newIPTablesRunner(t *testing.T) linuxfw.NetfilterRunner {
|
||||
return &fakeIPTablesRunner{
|
||||
t: t,
|
||||
ipt4: map[string][]string{
|
||||
@@ -603,7 +603,7 @@ type fakeOS struct {
|
||||
rules []string
|
||||
//This test tests on the router level, so we will not bother
|
||||
//with using iptables or nftables, chose the simpler one.
|
||||
nfr netfilterRunner
|
||||
nfr linuxfw.NetfilterRunner
|
||||
}
|
||||
|
||||
func NewFakeOS(t *testing.T) *fakeOS {
|
||||
@@ -1063,63 +1063,3 @@ func adjustFwmask(t *testing.T, s string) string {
|
||||
|
||||
return fwmaskAdjustRe.ReplaceAllString(s, "$1")
|
||||
}
|
||||
|
||||
type testFWDetector struct {
|
||||
iptRuleCount, nftRuleCount int
|
||||
iptErr, nftErr error
|
||||
}
|
||||
|
||||
func (t *testFWDetector) iptDetect() (int, error) {
|
||||
return t.iptRuleCount, t.iptErr
|
||||
}
|
||||
|
||||
func (t *testFWDetector) nftDetect() (int, error) {
|
||||
return t.nftRuleCount, t.nftErr
|
||||
}
|
||||
|
||||
func TestChooseFireWallMode(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
det *testFWDetector
|
||||
want linuxfw.FirewallMode
|
||||
}{
|
||||
{
|
||||
name: "using iptables legacy",
|
||||
det: &testFWDetector{iptRuleCount: 1},
|
||||
want: linuxfw.FirewallModeIPTables,
|
||||
},
|
||||
{
|
||||
name: "using nftables",
|
||||
det: &testFWDetector{nftRuleCount: 1},
|
||||
want: linuxfw.FirewallModeNfTables,
|
||||
},
|
||||
{
|
||||
name: "using both iptables and nftables",
|
||||
det: &testFWDetector{iptRuleCount: 2, nftRuleCount: 2},
|
||||
want: linuxfw.FirewallModeNfTables,
|
||||
},
|
||||
{
|
||||
name: "not using any firewall, both available",
|
||||
det: &testFWDetector{},
|
||||
want: linuxfw.FirewallModeNfTables,
|
||||
},
|
||||
{
|
||||
name: "not using any firewall, iptables available only",
|
||||
det: &testFWDetector{iptRuleCount: 1, nftErr: errors.New("nft error")},
|
||||
want: linuxfw.FirewallModeIPTables,
|
||||
},
|
||||
{
|
||||
name: "not using any firewall, nftables available only",
|
||||
det: &testFWDetector{iptErr: errors.New("iptables error"), nftRuleCount: 1},
|
||||
want: linuxfw.FirewallModeNfTables,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := chooseFireWallMode(t.Logf, tt.det)
|
||||
if got != tt.want {
|
||||
t.Errorf("chooseFireWallMode() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user