test: Improve test reliability with proper cleanup and isolation

Refactors test setup and teardown logic to use `t.Cleanup` instead
of `defer`. This ensures that cleanup functions are correctly scoped
to each subtest's lifecycle, improving test isolation and reliability.

The `setUpNetlinkTest` helper function is also improved to correctly
save and restore the original network namespace, ensuring that tests
do not leak state.

To support this, a `Close()` method that returns an error is added to
the `Handle` struct, allowing for proper cleanup of underlying netlink
sockets. The test helpers are updated to use this new method,
preventing resource leaks between tests.

Additionally, a bug in the `netns` tests is fixed where a large
namespace ID could overflow a 32-bit integer, causing spurious
failures on some systems.
This commit is contained in:
Vishvananda Abrams
2025-08-26 23:34:14 +00:00
committed by Vish (Ishaya) Abrams
parent 00c3a3def6
commit 1e35ba25dc
32 changed files with 392 additions and 513 deletions
+4 -8
View File
@@ -87,8 +87,7 @@ func DoTestAddr(t *testing.T, FunctionUndertest func(Link, *Addr) error) {
t.Run(tt.name, func(t *testing.T) {
tt.t = t
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
link, err := LinkByName("lo")
if err != nil {
@@ -171,8 +170,7 @@ func DoTestAddr(t *testing.T, FunctionUndertest func(Link, *Addr) error) {
}
func TestAddrAddReplace(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
for _, nilLink := range []bool{false, true} {
var address = &net.IPNet{IP: net.IPv4(127, 0, 0, 2), Mask: net.CIDRMask(24, 32)}
@@ -251,8 +249,7 @@ func expectAddrUpdate(ch <-chan AddrUpdate, add bool, dst net.IP) bool {
}
func TestAddrSubscribeWithOptions(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan AddrUpdate)
done := make(chan struct{})
@@ -289,8 +286,7 @@ func TestAddrSubscribeWithOptions(t *testing.T) {
}
func TestAddrSubscribeListExisting(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan AddrUpdate)
done := make(chan struct{})
+3 -6
View File
@@ -9,8 +9,7 @@ import (
func TestBridgeVlan(t *testing.T) {
minKernelRequired(t, 3, 10)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := remountSysfs(); err != nil {
t.Fatal(err)
}
@@ -81,8 +80,7 @@ func TestBridgeVlan(t *testing.T) {
func TestBridgeVlanTunnelInfo(t *testing.T) {
minKernelRequired(t, 4, 11)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := remountSysfs(); err != nil {
t.Fatal(err)
@@ -206,8 +204,7 @@ func TestBridgeVlanTunnelInfo(t *testing.T) {
func TestBridgeGroupFwdMask(t *testing.T) {
minKernelRequired(t, 4, 15) //minimal release for per-port group_fwd_mask
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := remountSysfs(); err != nil {
t.Fatal(err)
}
+1 -2
View File
@@ -8,8 +8,7 @@ import (
)
func TestChainAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
+3 -6
View File
@@ -54,8 +54,7 @@ func testClassStats(this, that *ClassStatistics, t *testing.T) {
}
func TestClassAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -235,8 +234,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
ClassChange when the parent/handle pair exists and that it will create a
new class if the handle is modified.
*/
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -474,8 +472,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
func TestClassHfsc(t *testing.T) {
// New network namespace for tests
tearDown := setUpNetlinkTestWithKModule(t, "sch_hfsc")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "sch_hfsc"))
// Set up testing link and check if succeeded
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
+14 -11
View File
@@ -225,10 +225,11 @@ type ProtoInfo interface {
type ProtoInfoTCP struct {
State uint8
}
// Protocol returns "tcp".
func (*ProtoInfoTCP) Protocol() string {return "tcp"}
func (*ProtoInfoTCP) Protocol() string { return "tcp" }
func (p *ProtoInfoTCP) toNlData() ([]*nl.RtAttr, error) {
ctProtoInfo := nl.NewRtAttr(unix.NLA_F_NESTED | nl.CTA_PROTOINFO, []byte{})
ctProtoInfo := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_PROTOINFO, []byte{})
ctProtoInfoTCP := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_PROTOINFO_TCP, []byte{})
ctProtoInfoTCPState := nl.NewRtAttr(nl.CTA_PROTOINFO_TCP_STATE, nl.Uint8Attr(p.State))
ctProtoInfoTCP.AddChild(ctProtoInfoTCPState)
@@ -238,14 +239,16 @@ func (p *ProtoInfoTCP) toNlData() ([]*nl.RtAttr, error) {
}
// ProtoInfoSCTP only supports the protocol name.
type ProtoInfoSCTP struct {}
type ProtoInfoSCTP struct{}
// Protocol returns "sctp".
func (*ProtoInfoSCTP) Protocol() string {return "sctp"}
func (*ProtoInfoSCTP) Protocol() string { return "sctp" }
// ProtoInfoDCCP only supports the protocol name.
type ProtoInfoDCCP struct {}
type ProtoInfoDCCP struct{}
// Protocol returns "dccp".
func (*ProtoInfoDCCP) Protocol() string {return "dccp"}
func (*ProtoInfoDCCP) Protocol() string { return "dccp" }
// The full conntrack flow structure is very complicated and can be found in the file:
// http://git.netfilter.org/libnetfilter_conntrack/tree/include/internal/object.h
@@ -287,7 +290,7 @@ func (t *IPTuple) toNlData(family uint8) ([]*nl.RtAttr, error) {
ctTupleProtoSrcPort := nl.NewRtAttr(nl.CTA_PROTO_SRC_PORT, nl.BEUint16Attr(t.SrcPort))
ctTupleProto.AddChild(ctTupleProtoSrcPort)
ctTupleProtoDstPort := nl.NewRtAttr(nl.CTA_PROTO_DST_PORT, nl.BEUint16Attr(t.DstPort))
ctTupleProto.AddChild(ctTupleProtoDstPort, )
ctTupleProto.AddChild(ctTupleProtoDstPort)
return []*nl.RtAttr{ctTupleIP, ctTupleProto}, nil
}
@@ -364,7 +367,7 @@ func (s *ConntrackFlow) toNlData() ([]*nl.RtAttr, error) {
// <len, CTA_TIMEOUT>
// <BEuint64>
// <len, NLA_F_NESTED|CTA_PROTOINFO>
// CTA_TUPLE_ORIG
ctTupleOrig := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_TUPLE_ORIG, nil)
forwardFlowAttrs, err := s.Forward.toNlData(s.FamilyType)
@@ -547,12 +550,12 @@ func parseTimeStamp(r *bytes.Reader, readSize uint16) (tstart, tstop uint64) {
func parseProtoInfoTCPState(r *bytes.Reader) (s uint8) {
binary.Read(r, binary.BigEndian, &s)
r.Seek(nl.SizeofNfattr - 1, seekCurrent)
r.Seek(nl.SizeofNfattr-1, seekCurrent)
return s
}
// parseProtoInfoTCP reads the entire nested protoinfo structure, but only parses the state attr.
func parseProtoInfoTCP(r *bytes.Reader, attrLen uint16) (*ProtoInfoTCP) {
func parseProtoInfoTCP(r *bytes.Reader, attrLen uint16) *ProtoInfoTCP {
p := new(ProtoInfoTCP)
bytesRead := 0
for bytesRead < int(attrLen) {
@@ -666,7 +669,7 @@ func parseRawData(data []byte) *ConntrackFlow {
switch t {
case nl.CTA_MARK:
s.Mark = parseConnectionMark(reader)
case nl.CTA_LABELS:
case nl.CTA_LABELS:
s.Labels = parseConnectionLabels(reader)
case nl.CTA_TIMEOUT:
s.TimeOut = parseTimeOut(reader)
+108 -108
View File
@@ -82,8 +82,8 @@ func applyFilter(flowList []ConntrackFlow, ipv4Filter *ConntrackFilter, ipv6Filt
// TestConntrackSocket test the opening of a NETFILTER family socket
func TestConntrackSocket(t *testing.T) {
skipUnlessRoot(t)
setUpNetlinkTestWithKModule(t, "nf_conntrack")
setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink")
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink"))
h, err := NewHandle(unix.NETLINK_NETFILTER)
CheckErrorFail(t, err)
@@ -107,11 +107,11 @@ func TestConntrackTableList(t *testing.T) {
// conntrack l3proto was unified since 4.19
// https://github.com/torvalds/linux/commit/a0ae2562c6c4b2721d9fddba63b7286c13517d9f
if k < 4 || k == 4 && m < 19 {
setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4")
setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv6")
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4"))
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv6"))
}
setUpNetlinkTestWithKModule(t, "nf_conntrack")
setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink")
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink"))
// Creates a new namespace and bring up the loopback interface
origns, ns, h := nsCreateAndEnter(t)
@@ -180,8 +180,8 @@ func TestConntrackTableFlush(t *testing.T) {
t.Skipf("Fails in CI: Flow creation fails")
}
skipUnlessRoot(t)
setUpNetlinkTestWithKModule(t, "nf_conntrack")
setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink")
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink"))
k, m, err := KernelVersion()
if err != nil {
t.Fatal(err)
@@ -189,9 +189,9 @@ func TestConntrackTableFlush(t *testing.T) {
// conntrack l3proto was unified since 4.19
// https://github.com/torvalds/linux/commit/a0ae2562c6c4b2721d9fddba63b7286c13517d9f
if k < 4 || k == 4 && m < 19 {
setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4")
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4"))
}
setUpNetlinkTestWithKModule(t, "nf_conntrack")
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
// Creates a new namespace and bring up the loopback interface
origns, ns, h := nsCreateAndEnter(t)
defer netns.Set(*origns)
@@ -265,7 +265,7 @@ func TestConntrackTableDelete(t *testing.T) {
requiredModules = append(requiredModules, "nf_conntrack_ipv4")
}
setUpNetlinkTestWithKModule(t, requiredModules...)
t.Cleanup(setUpNetlinkTestWithKModule(t, requiredModules...))
// Creates a new namespace and bring up the loopback interface
origns, ns, h := nsCreateAndEnter(t)
@@ -350,22 +350,22 @@ func TestConntrackTableDelete(t *testing.T) {
func TestConntrackFilter(t *testing.T) {
var flowList []ConntrackFlow
flowList = append(flowList, ConntrackFlow{
FamilyType: unix.AF_INET,
Forward: IPTuple{
SrcIP: net.ParseIP("10.0.0.1"),
DstIP: net.ParseIP("20.0.0.1"),
SrcPort: 1000,
DstPort: 2000,
Protocol: 17,
},
Reverse: IPTuple{
SrcIP: net.ParseIP("20.0.0.1"),
DstIP: net.ParseIP("192.168.1.1"),
SrcPort: 2000,
DstPort: 1000,
Protocol: 17,
},
FamilyType: unix.AF_INET,
Forward: IPTuple{
SrcIP: net.ParseIP("10.0.0.1"),
DstIP: net.ParseIP("20.0.0.1"),
SrcPort: 1000,
DstPort: 2000,
Protocol: 17,
},
Reverse: IPTuple{
SrcIP: net.ParseIP("20.0.0.1"),
DstIP: net.ParseIP("192.168.1.1"),
SrcPort: 2000,
DstPort: 1000,
Protocol: 17,
},
},
ConntrackFlow{
FamilyType: unix.AF_INET,
Forward: IPTuple{
@@ -1000,7 +1000,7 @@ func TestConntrackUpdateV4(t *testing.T) {
}
// Implicitly skips test if not root:
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
defer teardown()
t.Cleanup(teardown)
ns, err := netns.GetFromName(nsStr)
if err != nil {
@@ -1015,23 +1015,23 @@ func TestConntrackUpdateV4(t *testing.T) {
flow := ConntrackFlow{
FamilyType: FAMILY_V4,
Forward: IPTuple{
SrcIP: net.IP{234,234,234,234},
DstIP: net.IP{123,123,123,123},
SrcPort: 48385,
DstPort: 53,
SrcIP: net.IP{234, 234, 234, 234},
DstIP: net.IP{123, 123, 123, 123},
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Reverse: IPTuple{
SrcIP: net.IP{123,123,123,123},
DstIP: net.IP{234,234,234,234},
SrcPort: 53,
DstPort: 48385,
SrcIP: net.IP{123, 123, 123, 123},
DstIP: net.IP{234, 234, 234, 234},
SrcPort: 53,
DstPort: 48385,
Protocol: unix.IPPROTO_TCP,
},
// No point checking equivalence of timeout, but value must
// be reasonable to allow for a potentially slow subsequent read.
TimeOut: 100,
Mark: 12,
TimeOut: 100,
Mark: 12,
ProtoInfo: &ProtoInfoTCP{
State: nl.TCP_CONNTRACK_SYN_SENT2,
},
@@ -1054,8 +1054,8 @@ func TestConntrackUpdateV4(t *testing.T) {
filter := ConntrackFilter{
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
},
@@ -1063,7 +1063,7 @@ func TestConntrackUpdateV4(t *testing.T) {
ConntrackOrigSrcPort: flow.Forward.SrcPort,
ConntrackOrigDstPort: flow.Forward.DstPort,
},
protoFilter:unix.IPPROTO_TCP,
protoFilter: unix.IPPROTO_TCP,
}
var match *ConntrackFlow
@@ -1133,7 +1133,7 @@ func TestConntrackUpdateV6(t *testing.T) {
}
// Implicitly skips test if not root:
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
defer teardown()
t.Cleanup(teardown)
ns, err := netns.GetFromName(nsStr)
if err != nil {
@@ -1148,23 +1148,23 @@ func TestConntrackUpdateV6(t *testing.T) {
flow := ConntrackFlow{
FamilyType: FAMILY_V6,
Forward: IPTuple{
SrcIP: net.ParseIP("2001:db8::68"),
DstIP: net.ParseIP("2001:db9::32"),
SrcPort: 48385,
DstPort: 53,
SrcIP: net.ParseIP("2001:db8::68"),
DstIP: net.ParseIP("2001:db9::32"),
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Reverse: IPTuple{
SrcIP: net.ParseIP("2001:db9::32"),
DstIP: net.ParseIP("2001:db8::68"),
SrcPort: 53,
DstPort: 48385,
SrcIP: net.ParseIP("2001:db9::32"),
DstIP: net.ParseIP("2001:db8::68"),
SrcPort: 53,
DstPort: 48385,
Protocol: unix.IPPROTO_TCP,
},
// No point checking equivalence of timeout, but value must
// be reasonable to allow for a potentially slow subsequent read.
TimeOut: 100,
Mark: 12,
TimeOut: 100,
Mark: 12,
ProtoInfo: &ProtoInfoTCP{
State: nl.TCP_CONNTRACK_SYN_SENT2,
},
@@ -1187,8 +1187,8 @@ func TestConntrackUpdateV6(t *testing.T) {
filter := ConntrackFilter{
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
},
@@ -1196,7 +1196,7 @@ func TestConntrackUpdateV6(t *testing.T) {
ConntrackOrigSrcPort: flow.Forward.SrcPort,
ConntrackOrigDstPort: flow.Forward.DstPort,
},
protoFilter:unix.IPPROTO_TCP,
protoFilter: unix.IPPROTO_TCP,
}
var match *ConntrackFlow
@@ -1264,7 +1264,7 @@ func TestConntrackCreateV4(t *testing.T) {
}
// Implicitly skips test if not root:
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
defer teardown()
t.Cleanup(teardown)
ns, err := netns.GetFromName(nsStr)
if err != nil {
@@ -1279,23 +1279,23 @@ func TestConntrackCreateV4(t *testing.T) {
flow := ConntrackFlow{
FamilyType: FAMILY_V4,
Forward: IPTuple{
SrcIP: net.IP{234,234,234,234},
DstIP: net.IP{123,123,123,123},
SrcPort: 48385,
DstPort: 53,
SrcIP: net.IP{234, 234, 234, 234},
DstIP: net.IP{123, 123, 123, 123},
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Reverse: IPTuple{
SrcIP: net.IP{123,123,123,123},
DstIP: net.IP{234,234,234,234},
SrcPort: 53,
DstPort: 48385,
SrcIP: net.IP{123, 123, 123, 123},
DstIP: net.IP{234, 234, 234, 234},
SrcPort: 53,
DstPort: 48385,
Protocol: unix.IPPROTO_TCP,
},
// No point checking equivalence of timeout, but value must
// be reasonable to allow for a potentially slow subsequent read.
TimeOut: 100,
Mark: 12,
TimeOut: 100,
Mark: 12,
ProtoInfo: &ProtoInfoTCP{
State: nl.TCP_CONNTRACK_ESTABLISHED,
},
@@ -1313,8 +1313,8 @@ func TestConntrackCreateV4(t *testing.T) {
filter := ConntrackFilter{
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
},
@@ -1322,7 +1322,7 @@ func TestConntrackCreateV4(t *testing.T) {
ConntrackOrigSrcPort: flow.Forward.SrcPort,
ConntrackOrigDstPort: flow.Forward.DstPort,
},
protoFilter:unix.IPPROTO_TCP,
protoFilter: unix.IPPROTO_TCP,
}
var match *ConntrackFlow
@@ -1359,7 +1359,7 @@ func TestConntrackCreateV6(t *testing.T) {
}
// Implicitly skips test if not root:
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
defer teardown()
t.Cleanup(teardown)
ns, err := netns.GetFromName(nsStr)
if err != nil {
@@ -1374,23 +1374,23 @@ func TestConntrackCreateV6(t *testing.T) {
flow := ConntrackFlow{
FamilyType: FAMILY_V6,
Forward: IPTuple{
SrcIP: net.ParseIP("2001:db8::68"),
DstIP: net.ParseIP("2001:db9::32"),
SrcPort: 48385,
DstPort: 53,
SrcIP: net.ParseIP("2001:db8::68"),
DstIP: net.ParseIP("2001:db9::32"),
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Reverse: IPTuple{
SrcIP: net.ParseIP("2001:db9::32"),
DstIP: net.ParseIP("2001:db8::68"),
SrcPort: 53,
DstPort: 48385,
SrcIP: net.ParseIP("2001:db9::32"),
DstIP: net.ParseIP("2001:db8::68"),
SrcPort: 53,
DstPort: 48385,
Protocol: unix.IPPROTO_TCP,
},
// No point checking equivalence of timeout, but value must
// be reasonable to allow for a potentially slow subsequent read.
TimeOut: 100,
Mark: 12,
TimeOut: 100,
Mark: 12,
ProtoInfo: &ProtoInfoTCP{
State: nl.TCP_CONNTRACK_ESTABLISHED,
},
@@ -1408,8 +1408,8 @@ func TestConntrackCreateV6(t *testing.T) {
filter := ConntrackFilter{
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
},
@@ -1417,7 +1417,7 @@ func TestConntrackCreateV6(t *testing.T) {
ConntrackOrigSrcPort: flow.Forward.SrcPort,
ConntrackOrigDstPort: flow.Forward.DstPort,
},
protoFilter:unix.IPPROTO_TCP,
protoFilter: unix.IPPROTO_TCP,
}
var match *ConntrackFlow
@@ -1448,43 +1448,43 @@ func TestConntrackFlowToNlData(t *testing.T) {
flowV4 := ConntrackFlow{
FamilyType: FAMILY_V4,
Forward: IPTuple{
SrcIP: net.IP{234,234,234,234},
DstIP: net.IP{123,123,123,123},
SrcPort: 48385,
DstPort: 53,
SrcIP: net.IP{234, 234, 234, 234},
DstIP: net.IP{123, 123, 123, 123},
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Reverse: IPTuple{
SrcIP: net.IP{123,123,123,123},
DstIP: net.IP{234,234,234,234},
SrcPort: 53,
DstPort: 48385,
SrcIP: net.IP{123, 123, 123, 123},
DstIP: net.IP{234, 234, 234, 234},
SrcPort: 53,
DstPort: 48385,
Protocol: unix.IPPROTO_TCP,
},
Mark: 5,
TimeOut: 10,
Mark: 5,
TimeOut: 10,
ProtoInfo: &ProtoInfoTCP{
State: nl.TCP_CONNTRACK_ESTABLISHED,
},
}
flowV6 := ConntrackFlow {
flowV6 := ConntrackFlow{
FamilyType: FAMILY_V6,
Forward: IPTuple{
SrcIP: net.ParseIP("2001:db8::68"),
DstIP: net.ParseIP("2001:db9::32"),
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Reverse: IPTuple{
SrcIP: net.ParseIP("2001:db9::32"),
DstIP: net.ParseIP("2001:db8::68"),
SrcPort: 53,
DstPort: 48385,
SrcIP: net.ParseIP("2001:db8::68"),
DstIP: net.ParseIP("2001:db9::32"),
SrcPort: 48385,
DstPort: 53,
Protocol: unix.IPPROTO_TCP,
},
Mark: 5,
TimeOut: 10,
Reverse: IPTuple{
SrcIP: net.ParseIP("2001:db9::32"),
DstIP: net.ParseIP("2001:db8::68"),
SrcPort: 53,
DstPort: 48385,
Protocol: unix.IPPROTO_TCP,
},
Mark: 5,
TimeOut: 10,
ProtoInfo: &ProtoInfoTCP{
State: nl.TCP_CONNTRACK_ESTABLISHED,
},
@@ -1497,7 +1497,7 @@ func TestConntrackFlowToNlData(t *testing.T) {
t.Fatalf("Error converting ConntrackFlow to netlink messages: %s", err)
}
// Mock nfgenmsg header
bytesV4 = append(bytesV4, flowV4.FamilyType,0,0,0)
bytesV4 = append(bytesV4, flowV4.FamilyType, 0, 0, 0)
for _, a := range attrsV4 {
bytesV4 = append(bytesV4, a.Serialize()...)
}
@@ -1507,7 +1507,7 @@ func TestConntrackFlowToNlData(t *testing.T) {
t.Fatalf("Error converting ConntrackFlow to netlink messages: %s", err)
}
// Mock nfgenmsg header
bytesV6 = append(bytesV6, flowV6.FamilyType,0,0,0)
bytesV6 = append(bytesV6, flowV6.FamilyType, 0, 0, 0)
for _, a := range attrsV6 {
bytesV6 = append(bytesV6, a.Serialize()...)
}
+1
View File
@@ -1,3 +1,4 @@
//go:build !linux
// +build !linux
package netlink
+4 -5
View File
@@ -16,7 +16,7 @@ import (
func TestDevLinkGetDeviceList(t *testing.T) {
minKernelRequired(t, 4, 12)
setUpNetlinkTestWithKModule(t, "devlink")
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
_, err := DevLinkGetDeviceList()
if err != nil {
t.Fatal(err)
@@ -25,7 +25,7 @@ func TestDevLinkGetDeviceList(t *testing.T) {
func TestDevLinkGetDeviceByName(t *testing.T) {
minKernelRequired(t, 4, 12)
setUpNetlinkTestWithKModule(t, "devlink")
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
_, err := DevLinkGetDeviceByName("foo", "bar")
if err != nil {
t.Fatal(err)
@@ -34,7 +34,7 @@ func TestDevLinkGetDeviceByName(t *testing.T) {
func TestDevLinkSetEswitchMode(t *testing.T) {
minKernelRequired(t, 4, 12)
setUpNetlinkTestWithKModule(t, "devlink")
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
dev, err := DevLinkGetDeviceByName("foo", "bar")
if err != nil {
t.Fatal(err)
@@ -271,8 +271,7 @@ func areInfoStructsEqual(first *DevlinkDeviceInfo, second *DevlinkDeviceInfo) bo
func TestDevlinkGetDeviceResources(t *testing.T) {
minKernelRequired(t, 5, 11)
tearDown := setUpNetlinkTestWithKModule(t, "devlink")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
if bus == "" || device == "" {
//TODO: setup netdevsim device instead of getting device from flags
+19 -38
View File
@@ -14,8 +14,7 @@ import (
)
func TestFilterAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -108,8 +107,7 @@ func TestFilterAddDel(t *testing.T) {
}
func TestFilterReplace(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -169,8 +167,7 @@ func TestFilterReplace(t *testing.T) {
}
func TestAdvancedFilterAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "baz"}}); err != nil {
t.Fatal(err)
}
@@ -365,8 +362,7 @@ func TestAdvancedFilterAddDel(t *testing.T) {
}
func TestFilterFwAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -512,8 +508,7 @@ func TestFilterFwAddDel(t *testing.T) {
}
func TestFilterFwActAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -642,8 +637,7 @@ func TestFilterFwActAddDel(t *testing.T) {
func TestFilterU32BpfAddDel(t *testing.T) {
t.Skipf("Fd does not match in ci")
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -775,8 +769,7 @@ func TestFilterU32BpfAddDel(t *testing.T) {
}
func TestFilterU32ConnmarkAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -916,8 +909,7 @@ func TestFilterU32ConnmarkAddDel(t *testing.T) {
}
func TestFilterU32CsumAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatalf("add link foo error: %v", err)
}
@@ -1084,8 +1076,7 @@ func TestFilterClsActBpfAddDel(t *testing.T) {
// This feature was added in kernel 4.5
minKernelRequired(t, 4, 5)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
qdisc, link := setupLinkForTestWithQdisc(t, "foo")
filterattrs := FilterAttrs{
@@ -1159,8 +1150,7 @@ func TestFilterMatchAllAddDel(t *testing.T) {
// This classifier was added in kernel 4.7
minKernelRequired(t, 4, 7)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
_, link := setupLinkForTestWithQdisc(t, "foo")
_, link2 := setupLinkForTestWithQdisc(t, "bar")
filter := &MatchAll{
@@ -1227,8 +1217,7 @@ func TestFilterMatchAllAddDel(t *testing.T) {
}
func TestFilterU32TunnelKeyAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -1399,8 +1388,7 @@ func TestFilterU32TunnelKeyAddDel(t *testing.T) {
}
func TestFilterU32SkbEditAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -1576,8 +1564,7 @@ func TestFilterU32SkbEditAddDel(t *testing.T) {
}
func TestFilterU32LinkOption(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatalf("add link foo error: %v", err)
}
@@ -1718,8 +1705,7 @@ func TestFilterU32LinkOption(t *testing.T) {
}
func TestFilterFlowerAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -2118,8 +2104,7 @@ func TestFilterFlowerAddDel(t *testing.T) {
}
func TestFilterIPv6FlowerPedit(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -2278,8 +2263,7 @@ func TestFilterIPv6FlowerPedit(t *testing.T) {
}
func TestFilterU32PoliceAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -2457,8 +2441,7 @@ func TestFilterU32PoliceAddDel(t *testing.T) {
}
func TestFilterU32DirectPoliceAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -2559,8 +2542,7 @@ func TestFilterU32DirectPoliceAddDel(t *testing.T) {
}
func TestFilterChainAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -2658,8 +2640,7 @@ func TestFilterSampleAddDel(t *testing.T) {
t.Skip("psample genetlink family unavailable - is CONFIG_PSAMPLE enabled?")
}
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
+1 -2
View File
@@ -79,8 +79,7 @@ func TestFouAddDel(t *testing.T) {
minKernelRequired(t, 3, 18)
// the fou module is usually not compiled in the kernel so we'll load it
tearDown := setUpNetlinkTestWithKModule(t, "fou")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "fou"))
fou := Fou{
Port: 5555,
+1
View File
@@ -1,3 +1,4 @@
//go:build !linux
// +build !linux
package netlink
+3 -4
View File
@@ -1,3 +1,4 @@
//go:build linux
// +build linux
package netlink
@@ -8,8 +9,7 @@ import (
)
func TestPDPv0AddDel(t *testing.T) {
tearDown := setUpNetlinkTestWithKModule(t, "gtp")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "gtp"))
if err := LinkAdd(testGTPLink(t)); err != nil {
t.Fatal(err)
@@ -61,8 +61,7 @@ func TestPDPv0AddDel(t *testing.T) {
}
func TestPDPv1AddDel(t *testing.T) {
tearDown := setUpNetlinkTestWithKModule(t, "gtp")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "gtp"))
if err := LinkAdd(testGTPLink(t)); err != nil {
t.Fatal(err)
+8 -4
View File
@@ -165,12 +165,16 @@ func newHandle(newNs, curNs netns.NsHandle, nlFamilies ...int) (*Handle, error)
return h, nil
}
// Close releases the resources allocated to this handle
func (h *Handle) Close() {
// Close closes all netlink sockets held by this Handle.
func (h *Handle) Close() error {
var firstErr error
for _, sh := range h.sockets {
sh.Close()
if err := sh.Close(); err != nil && firstErr == nil {
firstErr = err
}
}
h.sockets = nil
return firstErr
}
// Delete releases the resources allocated to this handle
@@ -178,7 +182,7 @@ func (h *Handle) Close() {
// Deprecated: use Close instead which is in line with typical resource release
// patterns for files and other resources.
func (h *Handle) Delete() {
h.Close()
_ = h.Close()
}
func (h *Handle) newNetlinkRequest(proto, flags int) *nl.NetlinkRequest {
+1
View File
@@ -1,3 +1,4 @@
//go:build linux
// +build linux
package netlink
+5 -10
View File
@@ -88,8 +88,7 @@ func TestParseIpsetListResult(t *testing.T) {
}
func TestIpsetCreateListAddDelDestroy(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
timeout := uint32(3)
err := IpsetCreate("my-test-ipset-1", "hash:ip", IpsetCreateOptions{
Replace: true,
@@ -444,8 +443,7 @@ func TestIpsetCreateListAddDelDestroyWithTestCases(t *testing.T) {
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
err := IpsetCreate(tC.setname, tC.typename, tC.options)
if err != nil {
@@ -615,8 +613,7 @@ func TestIpsetBitmapCreateListWithTestCases(t *testing.T) {
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
err := IpsetCreate(tC.setname, tC.typename, tC.options)
if err != nil {
@@ -643,8 +640,7 @@ func TestIpsetBitmapCreateListWithTestCases(t *testing.T) {
}
func TestIpsetSwap(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ipset1 := "my-test-ipset-swap-1"
ipset2 := "my-test-ipset-swap-2"
@@ -723,8 +719,7 @@ func nextIP(ip net.IP) {
// TestIpsetMaxElements tests that we can create an ipset containing
// 128k elements, which is double the default size (64k elements).
func TestIpsetMaxElements(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ipsetName := "my-test-ipset-max"
maxElements := uint32(128 << 10)
+93 -179
View File
@@ -708,29 +708,25 @@ func compareBareUDP(t *testing.T, expected, actual *BareUDP) {
}
func TestLinkAddDelWithIndex(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Dummy{LinkAttrs{Index: 1000, Name: "foo"}})
}
func TestLinkAddDelDummy(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Dummy{LinkAttrs{Name: "foo"}})
}
func TestLinkAddDelDummyWithGroup(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Dummy{LinkAttrs{Name: "foo", Group: 42}})
}
func TestLinkModify(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
linkName := "foo"
originalMTU := 1500
@@ -760,22 +756,19 @@ func TestLinkModify(t *testing.T) {
}
func TestLinkAddDelIfb(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Ifb{LinkAttrs{Name: "foo"}})
}
func TestLinkAddDelBridge(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Bridge{LinkAttrs: LinkAttrs{Name: "foo", MTU: 1400}})
}
func TestLinkAddDelGeneve(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Geneve{
LinkAttrs: LinkAttrs{Name: "foo4", EncapType: "geneve"},
@@ -789,8 +782,7 @@ func TestLinkAddDelGeneve(t *testing.T) {
}
func TestLinkAddDelGeneveFlowBased(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Geneve{
LinkAttrs: LinkAttrs{Name: "foo"},
@@ -800,7 +792,7 @@ func TestLinkAddDelGeneveFlowBased(t *testing.T) {
func TestGeneveCompareToIP(t *testing.T) {
ns, tearDown := setUpNamedNetlinkTest(t)
defer tearDown()
t.Cleanup(tearDown)
expected := &Geneve{
ID: 0x764332, // 23 bits
@@ -838,8 +830,7 @@ func TestGeneveCompareToIP(t *testing.T) {
}
func TestLinkAddDelGretap(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Gretap{
LinkAttrs: LinkAttrs{Name: "foo4"},
@@ -858,8 +849,7 @@ func TestLinkAddDelGretap(t *testing.T) {
}
func TestLinkAddDelGretun(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Gretun{
LinkAttrs: LinkAttrs{Name: "foo4"},
@@ -873,8 +863,7 @@ func TestLinkAddDelGretun(t *testing.T) {
}
func TestLinkAddDelGretunPointToMultiPoint(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Gretun{
LinkAttrs: LinkAttrs{Name: "foo"},
@@ -892,8 +881,7 @@ func TestLinkAddDelGretunPointToMultiPoint(t *testing.T) {
func TestLinkAddDelGretunFlowBased(t *testing.T) {
minKernelRequired(t, 4, 3)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Gretun{
LinkAttrs: LinkAttrs{Name: "foo"},
@@ -903,8 +891,7 @@ func TestLinkAddDelGretunFlowBased(t *testing.T) {
func TestLinkAddDelGretapFlowBased(t *testing.T) {
minKernelRequired(t, 4, 3)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Gretap{
LinkAttrs: LinkAttrs{Name: "foo"},
@@ -912,8 +899,7 @@ func TestLinkAddDelGretapFlowBased(t *testing.T) {
}
func TestLinkAddDelVlan(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -935,8 +921,7 @@ func TestLinkAddDelVlan(t *testing.T) {
}
func TestLinkAddVlanWithQosMaps(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -984,8 +969,7 @@ func TestLinkAddVlanWithQosMaps(t *testing.T) {
}
func TestLinkAddVlanWithFlags(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -1034,8 +1018,7 @@ func TestLinkAddVlanWithFlags(t *testing.T) {
}
func TestLinkModifyVlanFlags(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -1093,8 +1076,7 @@ func TestLinkModifyVlanFlags(t *testing.T) {
}
func TestLinkAddDelMacvlan(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -1122,8 +1104,7 @@ func TestLinkAddDelMacvlan(t *testing.T) {
}
func TestLinkAddDelMacvtap(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -1159,8 +1140,7 @@ func TestLinkAddDelMacvtap(t *testing.T) {
func TestLinkMacvBCQueueLen(t *testing.T) {
minKernelRequired(t, 5, 11)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
@@ -1188,8 +1168,7 @@ func TestLinkMacvBCQueueLen(t *testing.T) {
func TestNetkitPeerNs(t *testing.T) {
minKernelRequired(t, 6, 7)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
basens, err := netns.Get()
if err != nil {
@@ -1261,8 +1240,7 @@ func TestNetkitPeerNs(t *testing.T) {
func TestLinkAddDelNetkit(t *testing.T) {
minKernelRequired(t, 6, 7)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
netkit := &Netkit{
LinkAttrs: LinkAttrs{
@@ -1284,8 +1262,7 @@ func TestLinkAddDelNetkit(t *testing.T) {
}
func TestLinkAddDelVeth(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
peerMAC, _ := net.ParseMAC("00:12:34:56:78:02")
@@ -1305,8 +1282,7 @@ func TestLinkAddDelVeth(t *testing.T) {
func TestLinkAddDelBond(t *testing.T) {
minKernelRequired(t, 3, 13)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
modes := []string{"802.3ad", "balance-tlb"}
for _, mode := range modes {
@@ -1328,8 +1304,7 @@ func TestLinkAddDelBond(t *testing.T) {
}
func TestLinkAddVethWithDefaultTxQLen(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
la := NewLinkAttrs()
la.Name = "foo"
@@ -1363,8 +1338,7 @@ func TestLinkAddVethWithDefaultTxQLen(t *testing.T) {
}
func TestLinkAddVethWithZeroTxQLen(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
la := NewLinkAttrs()
la.Name = "foo"
la.TxQLen = 0
@@ -1399,8 +1373,7 @@ func TestLinkAddVethWithZeroTxQLen(t *testing.T) {
}
func TestLinkAddVethWithPeerAttrs(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
la := NewLinkAttrs()
la.Name = "foo"
la.MTU = 1500
@@ -1460,8 +1433,7 @@ func TestLinkAddVethWithPeerAttrs(t *testing.T) {
}
func TestLinkAddVethWithoutPeerAttrs(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
la := NewLinkAttrs()
la.Name = "foo"
la.MTU = 1500
@@ -1522,8 +1494,7 @@ func TestLinkAddDelDummyWithGSO(t *testing.T) {
gsoMaxSize = 1 << 14
)
minKernelRequired(t, 4, 16)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
dummy := &Dummy{LinkAttrs: LinkAttrs{Name: "foo", GSOMaxSize: gsoMaxSize, GSOMaxSegs: gsoMaxSegs}}
if err := LinkAdd(dummy); err != nil {
@@ -1551,8 +1522,7 @@ func TestLinkAddDelDummyWithGRO(t *testing.T) {
groMaxSize = 1 << 14
)
minKernelRequired(t, 5, 19)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
dummy := &Dummy{LinkAttrs: LinkAttrs{Name: "foo", GROMaxSize: groMaxSize}}
if err := LinkAdd(dummy); err != nil {
@@ -1573,8 +1543,7 @@ func TestLinkAddDelDummyWithGRO(t *testing.T) {
}
func TestLinkAddDummyWithTxQLen(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
la := NewLinkAttrs()
la.Name = "foo"
la.TxQLen = 1500
@@ -1597,8 +1566,7 @@ func TestLinkAddDummyWithTxQLen(t *testing.T) {
}
func TestLinkAddDelBridgeMaster(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
if err := LinkAdd(master); err != nil {
@@ -1667,8 +1635,7 @@ func testLinkSetUnsetResetMaster(t *testing.T, master, newmaster Link) {
}
func TestLinkSetUnsetResetMaster(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
if err := LinkAdd(master); err != nil {
@@ -1692,8 +1659,7 @@ func TestLinkSetUnsetResetMaster(t *testing.T) {
}
func TestLinkSetUnsetResetMasterBond(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
master := NewLinkBond(LinkAttrs{Name: "foo"})
master.Mode = BOND_MODE_BALANCE_RR
@@ -1719,8 +1685,7 @@ func TestLinkSetUnsetResetMasterBond(t *testing.T) {
}
func TestLinkSetNs(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
basens, err := netns.Get()
if err != nil {
@@ -1783,15 +1748,13 @@ func TestLinkSetNs(t *testing.T) {
func TestLinkAddDelWireguard(t *testing.T) {
minKernelRequired(t, 5, 6)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Wireguard{LinkAttrs: LinkAttrs{Name: "wg0"}})
}
func TestVethPeerNs(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
basens, err := netns.Get()
if err != nil {
@@ -1837,8 +1800,7 @@ func TestVethPeerNs(t *testing.T) {
}
func TestVethPeerNs2(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
basens, err := netns.Get()
if err != nil {
@@ -1895,8 +1857,7 @@ func TestVethPeerNs2(t *testing.T) {
}
func TestLinkAddDelVxlan(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{
LinkAttrs{Name: "foo"},
@@ -1924,8 +1885,7 @@ func TestLinkAddDelVxlan(t *testing.T) {
func TestLinkAddDelVxlanUdpCSum6(t *testing.T) {
minKernelRequired(t, 3, 16)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{
LinkAttrs{Name: "foo"},
@@ -1956,8 +1916,7 @@ func TestLinkAddDelVxlanUdpCSum6(t *testing.T) {
func TestLinkAddDelVxlanGbp(t *testing.T) {
minKernelRequired(t, 4, 0)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{
LinkAttrs{Name: "foo"},
@@ -1989,8 +1948,7 @@ func TestLinkAddDelVxlanGbp(t *testing.T) {
func TestLinkAddDelVxlanFlowBased(t *testing.T) {
minKernelRequired(t, 4, 3)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
vxlan := Vxlan{
LinkAttrs: LinkAttrs{
@@ -2005,9 +1963,8 @@ func TestLinkAddDelVxlanFlowBased(t *testing.T) {
func TestLinkAddDelBareUDP(t *testing.T) {
minKernelRequired(t, 5, 1)
setUpNetlinkTestWithKModule(t, "bareudp")
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "bareudp"))
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &BareUDP{
LinkAttrs: LinkAttrs{Name: "foo99"},
@@ -2032,9 +1989,9 @@ func TestBareUDPCompareToIP(t *testing.T) {
}
// requires iproute2 >= 5.10
minKernelRequired(t, 5, 9)
setUpNetlinkTestWithKModule(t, "bareudp")
t.Cleanup(setUpNetlinkTestWithKModule(t, "bareudp"))
ns, tearDown := setUpNamedNetlinkTest(t)
defer tearDown()
t.Cleanup(tearDown)
expected := &BareUDP{
Port: uint16(6635),
@@ -2073,8 +2030,7 @@ func TestBareUDPCompareToIP(t *testing.T) {
func TestLinkAddDelIPVlanL2(t *testing.T) {
minKernelRequired(t, 4, 2)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
t.Fatal(err)
@@ -2093,8 +2049,7 @@ func TestLinkAddDelIPVlanL2(t *testing.T) {
func TestLinkAddDelIPVlanL3(t *testing.T) {
minKernelRequired(t, 4, 2)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
t.Fatal(err)
@@ -2113,8 +2068,7 @@ func TestLinkAddDelIPVlanL3(t *testing.T) {
func TestLinkAddDelIPVlanVepa(t *testing.T) {
minKernelRequired(t, 4, 15)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
parent := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(parent); err != nil {
t.Fatal(err)
@@ -2133,8 +2087,7 @@ func TestLinkAddDelIPVlanVepa(t *testing.T) {
}
func TestLinkAddDelIPVlanNoParent(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ipv := IPVlan{
LinkAttrs: LinkAttrs{
@@ -2152,8 +2105,7 @@ func TestLinkAddDelIPVlanNoParent(t *testing.T) {
}
func TestLinkByIndex(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
dummy := &Dummy{LinkAttrs{Name: "dummy"}}
if err := LinkAdd(dummy); err != nil {
@@ -2179,8 +2131,7 @@ func TestLinkByIndex(t *testing.T) {
}
func TestLinkSet(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Dummy{LinkAttrs{Name: "foo"}}
if err := LinkAdd(iface); err != nil {
@@ -2284,8 +2235,7 @@ func TestLinkSet(t *testing.T) {
}
func TestLinkAltName(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Dummy{LinkAttrs{Name: "bar"}}
if err := LinkAdd(iface); err != nil {
@@ -2350,8 +2300,7 @@ func TestLinkAltName(t *testing.T) {
}
func TestLinkSetARP(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "banana"}
if err := LinkAdd(iface); err != nil {
@@ -2407,8 +2356,7 @@ func expectLinkUpdate(ch <-chan LinkUpdate, ifaceName string, up bool) bool {
}
func TestLinkSubscribe(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan LinkUpdate)
done := make(chan struct{})
@@ -2444,8 +2392,7 @@ func TestLinkSubscribe(t *testing.T) {
}
func TestLinkSubscribeWithOptions(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan LinkUpdate)
done := make(chan struct{})
@@ -2578,7 +2525,7 @@ func TestLinkSubscribeListExisting(t *testing.T) {
}
func TestLinkStats(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
// Create a veth pair and verify the cross-stats once both
// ends are brought up and some ICMPv6 packets are exchanged
@@ -2657,8 +2604,7 @@ func TestLinkXdp(t *testing.T) {
func TestLinkAddDelIptun(t *testing.T) {
minKernelRequired(t, 4, 9)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Iptun{
LinkAttrs: LinkAttrs{Name: "iptunfoo"},
@@ -2669,8 +2615,7 @@ func TestLinkAddDelIptun(t *testing.T) {
func TestLinkAddDelIptunFlowBased(t *testing.T) {
minKernelRequired(t, 4, 9)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Iptun{
LinkAttrs: LinkAttrs{Name: "iptunflowfoo"},
@@ -2679,8 +2624,7 @@ func TestLinkAddDelIptunFlowBased(t *testing.T) {
}
func TestLinkAddDelIp6tnl(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Ip6tnl{
LinkAttrs: LinkAttrs{Name: "ip6tnltest"},
@@ -2690,8 +2634,7 @@ func TestLinkAddDelIp6tnl(t *testing.T) {
}
func TestLinkAddDelIp6tnlFlowbased(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Ip6tnl{
LinkAttrs: LinkAttrs{Name: "ip6tnltest"},
@@ -2700,8 +2643,7 @@ func TestLinkAddDelIp6tnlFlowbased(t *testing.T) {
}
func TestLinkAddDelSittun(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Sittun{
LinkAttrs: LinkAttrs{Name: "sittunfoo"},
@@ -2711,8 +2653,7 @@ func TestLinkAddDelSittun(t *testing.T) {
}
func TestLinkAddDelVti(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
testLinkAddDel(t, &Vti{
LinkAttrs: LinkAttrs{Name: "vtifoo"},
@@ -2731,8 +2672,7 @@ func TestLinkAddDelVti(t *testing.T) {
func TestLinkSetGSOMaxSize(t *testing.T) {
minKernelRequired(t, 5, 19)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -2761,8 +2701,7 @@ func TestLinkSetGSOMaxSize(t *testing.T) {
func TestLinkSetGSOMaxSegs(t *testing.T) {
minKernelRequired(t, 5, 19)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -2791,8 +2730,7 @@ func TestLinkSetGSOMaxSegs(t *testing.T) {
func TestLinkSetGROMaxSize(t *testing.T) {
minKernelRequired(t, 5, 19)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -2821,8 +2759,7 @@ func TestLinkSetGROMaxSize(t *testing.T) {
func TestLinkGetTSOMax(t *testing.T) {
minKernelRequired(t, 5, 19)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -2841,8 +2778,7 @@ func TestLinkGetTSOMax(t *testing.T) {
func TestLinkSetGSOIPv4MaxSize(t *testing.T) {
minKernelRequired(t, 6, 3)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -2871,8 +2807,7 @@ func TestLinkSetGSOIPv4MaxSize(t *testing.T) {
func TestLinkSetGROIPv4MaxSize(t *testing.T) {
minKernelRequired(t, 6, 3)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -2902,8 +2837,7 @@ func TestLinkSetGROIPv4MaxSize(t *testing.T) {
func TestBridgeCreationWithMulticastSnooping(t *testing.T) {
minKernelRequired(t, 4, 4)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeWithDefaultMcastSnoopName := "foo"
bridgeWithDefaultMcastSnoop := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeWithDefaultMcastSnoopName}}
@@ -2941,8 +2875,7 @@ func TestBridgeCreationWithMulticastSnooping(t *testing.T) {
func TestBridgeSetMcastSnoop(t *testing.T) {
minKernelRequired(t, 4, 4)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeName := "foo"
bridge := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeName}}
@@ -2980,8 +2913,7 @@ func expectMcastSnooping(t *testing.T, linkName string, expected bool) {
func TestBridgeSetVlanFiltering(t *testing.T) {
minKernelRequired(t, 4, 4)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeName := "foo"
bridge := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeName}}
@@ -3008,8 +2940,7 @@ func TestBridgeSetVlanFiltering(t *testing.T) {
func TestBridgeDefaultPVID(t *testing.T) {
minKernelRequired(t, 4, 4)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeName := "foo"
bridge := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeName}}
@@ -3058,8 +2989,7 @@ func expectVlanDefaultPVID(t *testing.T, linkName string, expected uint16) {
func TestBridgeCreationWithAgeingTime(t *testing.T) {
minKernelRequired(t, 3, 18)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeWithSpecifiedAgeingTimeName := "foo"
ageingTime := uint32(20000)
@@ -3104,8 +3034,7 @@ func TestBridgeCreationWithAgeingTime(t *testing.T) {
func TestBridgeCreationWithHelloTime(t *testing.T) {
minKernelRequired(t, 3, 18)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeWithSpecifiedHelloTimeName := "foo"
helloTime := uint32(300)
@@ -3150,8 +3079,7 @@ func TestBridgeCreationWithHelloTime(t *testing.T) {
func TestBridgeCreationWithVlanFiltering(t *testing.T) {
minKernelRequired(t, 3, 18)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
bridgeWithVlanFilteringEnabledName := "foo"
vlanFiltering := true
@@ -3194,8 +3122,7 @@ func TestBridgeCreationWithVlanFiltering(t *testing.T) {
}
func TestLinkSubscribeWithProtinfo(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
if err := LinkAdd(master); err != nil {
@@ -3272,15 +3199,14 @@ func testGTPLink(t *testing.T) *GTP {
}
func TestLinkAddDelGTP(t *testing.T) {
tearDown := setUpNetlinkTestWithKModule(t, "gtp")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "gtp"))
gtp := testGTPLink(t)
testLinkAddDel(t, gtp)
}
func TestLinkAddDelXfrmi(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
lo, _ := LinkByName("lo")
@@ -3291,7 +3217,7 @@ func TestLinkAddDelXfrmi(t *testing.T) {
func TestLinkAddDelXfrmiNoId(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
lo, _ := LinkByName("lo")
@@ -3328,8 +3254,7 @@ func TestLinkByAliasWhenLinkIsNotFound(t *testing.T) {
}
func TestLinkAddDelTuntap(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// Mount sysfs so that sysfs gets the namespace tag of the current network namespace
// This is necessary so that /sys shows the network interfaces of the current namespace.
@@ -3349,8 +3274,7 @@ func TestLinkAddDelTuntap(t *testing.T) {
}
func TestLinkAddDelTuntapMq(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := syscall.Mount("sysfs", "/sys", "sysfs", syscall.MS_RDONLY, ""); err != nil {
t.Fatal("Cannot mount sysfs")
@@ -3382,8 +3306,7 @@ func TestLinkAddDelTuntapMq(t *testing.T) {
}
func TestTuntapPartialQueues(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := syscall.Mount("sysfs", "/sys", "sysfs", syscall.MS_RDONLY, ""); err != nil {
t.Fatal("Cannot mount sysfs")
@@ -3440,8 +3363,7 @@ func TestTuntapPartialQueues(t *testing.T) {
}
func TestLinkAddDelTuntapOwnerGroup(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := syscall.Mount("sysfs", "/sys", "sysfs", syscall.MS_RDONLY, ""); err != nil {
t.Fatal("Cannot mount sysfs")
@@ -3462,8 +3384,7 @@ func TestLinkAddDelTuntapOwnerGroup(t *testing.T) {
}
func TestVethPeerIndex(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const (
vethPeer1 = "vethOne"
@@ -3515,8 +3436,7 @@ func TestVethPeerIndex(t *testing.T) {
func TestLinkSlaveBond(t *testing.T) {
minKernelRequired(t, 3, 13)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const (
bondName = "foo"
@@ -3558,8 +3478,7 @@ func TestLinkSlaveBond(t *testing.T) {
func TestLinkSetBondSlaveQueueId(t *testing.T) {
minKernelRequired(t, 3, 13)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const (
bondName = "foo"
@@ -3590,8 +3509,7 @@ func TestLinkSetBondSlaveQueueId(t *testing.T) {
func TestLinkSetBondSlave(t *testing.T) {
minKernelRequired(t, 3, 13)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const (
bondName = "foo"
@@ -3693,8 +3611,7 @@ func testFailover(t *testing.T, slaveName, bondName string) {
func TestLinkFailover(t *testing.T) {
minKernelRequired(t, 3, 13)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const (
bondName = "foo"
@@ -3766,8 +3683,7 @@ func TestLinkFailover(t *testing.T) {
}
func TestLinkSetAllmulticast(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo"}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -3816,8 +3732,7 @@ func TestLinkSetAllmulticast(t *testing.T) {
}
func TestLinkSetMulticast(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo"}, PeerName: "bar"}
if err := LinkAdd(iface); err != nil {
@@ -3866,8 +3781,7 @@ func TestLinkSetMulticast(t *testing.T) {
}
func TestLinkSetMacvlanMode(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const (
parentName = "foo"
+7 -14
View File
@@ -1,3 +1,4 @@
//go:build linux
// +build linux
package netlink
@@ -67,10 +68,7 @@ func dumpContainsProxy(dump []Neigh, p proxyEntry) bool {
}
func TestNeighAddDelLLIPAddr(t *testing.T) {
setUpNetlinkTestWithKModule(t, "ip_gre")
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "ip_gre"))
dummy := Gretun{
LinkAttrs: LinkAttrs{Name: "neigh0"},
@@ -116,8 +114,7 @@ func TestNeighAddDelLLIPAddr(t *testing.T) {
}
func TestNeighAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
dummy := Dummy{LinkAttrs{Name: "neigh0"}}
if err := LinkAdd(&dummy); err != nil {
@@ -192,8 +189,7 @@ func TestNeighAddDel(t *testing.T) {
}
func TestNeighAddDelProxy(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
dummy := Dummy{LinkAttrs{Name: "neigh0"}}
if err := LinkAdd(&dummy); err != nil {
@@ -293,8 +289,7 @@ func expectNeighUpdate(ch <-chan NeighUpdate, expected []NeighUpdate) bool {
}
func TestNeighSubscribe(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
dummy := &Dummy{LinkAttrs{Name: "neigh0"}}
if err := LinkAdd(dummy); err != nil {
@@ -344,8 +339,7 @@ func TestNeighSubscribe(t *testing.T) {
}
func TestNeighSubscribeWithOptions(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan NeighUpdate)
done := make(chan struct{})
@@ -556,8 +550,7 @@ func TestNeighSubscribeListExisting(t *testing.T) {
}
func TestNeighListExecuteStateFilter(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// Create dummy iface
dummy := Dummy{LinkAttrs{Name: "neigh0"}}
+42 -7
View File
@@ -66,18 +66,37 @@ func skipUnlessKModuleLoaded(t *testing.T, moduleNames ...string) {
func setUpNetlinkTest(t testing.TB) tearDownNetlinkTest {
skipUnlessRoot(t)
// new temporary namespace so we don't pollute the host
// lock thread since the namespace is thread local
// Lock the OS thread, then record original namespace
runtime.LockOSThread()
var err error
origNS, err := netns.Get()
if err != nil {
runtime.UnlockOSThread()
t.Fatal("Failed to get current namespace:", err)
}
// Create and enter a fresh namespace
ns, err := netns.New()
if err != nil {
t.Fatal("Failed to create newns", ns)
// attempt to restore before failing
_ = netns.Set(origNS)
runtime.UnlockOSThread()
t.Fatal("Failed to create new namespace:", err)
}
// Reinitialize the package-level handle in this namespace
if pkgHandle != nil {
// ensure all sockets from the previous Handle are closed
_ = pkgHandle.Close()
}
pkgHandle = &Handle{}
return func() {
// Close the new namespace handle
ns.Close()
// Restore the original namespace
if err := netns.Set(origNS); err != nil {
t.Fatalf("Failed to restore original namespace: %v", err)
}
_ = origNS.Close()
// Unlock the OS thread
runtime.UnlockOSThread()
}
}
@@ -123,11 +142,22 @@ func setUpNetlinkTestWithLoopback(t *testing.T) tearDownNetlinkTest {
skipUnlessRoot(t)
runtime.LockOSThread()
ns, err := netns.New()
// Save the current namespace
origNS, err := netns.Get()
if err != nil {
t.Fatal("Failed to create new netns", ns)
runtime.UnlockOSThread()
t.Fatal("Failed to get current namespace:", err)
}
// Create and enter a fresh namespace
ns, err := netns.New()
if err != nil {
runtime.UnlockOSThread()
t.Fatal("Failed to create new netns:", err)
}
// Bring up the loopback interface
link, err := LinkByName("lo")
if err != nil {
t.Fatalf("Failed to find \"lo\" in new netns: %v", err)
@@ -136,8 +166,13 @@ func setUpNetlinkTestWithLoopback(t *testing.T) tearDownNetlinkTest {
t.Fatalf("Failed to bring up \"lo\" in new netns: %v", err)
}
// Teardown: restore original namespace and thread state
return func() {
ns.Close()
if err := netns.Set(origNS); err != nil {
t.Fatalf("Failed to restore original namespace: %v", err)
}
_ = origNS.Close()
runtime.UnlockOSThread()
}
}
+3 -2
View File
@@ -1,3 +1,4 @@
//go:build linux
// +build linux
package netlink
@@ -25,7 +26,7 @@ func TestNetNsIdByFd(t *testing.T) {
// In an attempt to avoid namespace id collisions, set this to something
// insanely high. When the kernel assigns IDs, it does so starting from 0
// So, just use our pid shifted up 16 bits
wantID := os.Getpid() << 16
wantID := (os.Getpid() << 16) & 0x7FFFFFFF
h, err := NewHandle()
CheckErrorFail(t, err)
@@ -64,7 +65,7 @@ func TestNetNsIdByPid(t *testing.T) {
}()
// As above, we'll pick a crazy large netnsid to avoid collisions
wantID := syscall.Gettid() << 16
wantID := (syscall.Gettid() << 16) & 0x7FFFFFFF
h, err := NewHandle()
CheckErrorFail(t, err)
+1
View File
@@ -1,3 +1,4 @@
//go:build !linux
// +build !linux
package netlink
+5 -4
View File
@@ -829,8 +829,8 @@ func SubscribeAt(newNs, curNs netns.NsHandle, protocol int, groups ...uint) (*Ne
return Subscribe(protocol, groups...)
}
func (s *NetlinkSocket) Close() {
s.file.Close()
func (s *NetlinkSocket) Close() error {
return s.file.Close()
}
func (s *NetlinkSocket) GetFd() int {
@@ -1083,8 +1083,9 @@ type SocketHandle struct {
}
// Close closes the netlink socket
func (sh *SocketHandle) Close() {
func (sh *SocketHandle) Close() error {
if sh.Socket != nil {
sh.Socket.Close()
return sh.Socket.Close()
}
return nil
}
+1
View File
@@ -1,3 +1,4 @@
//go:build linux
// +build linux
package netlink
+1 -2
View File
@@ -8,8 +8,7 @@ import (
)
func TestProtinfo(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
if err := LinkAdd(master); err != nil {
t.Fatal(err)
+10 -20
View File
@@ -8,8 +8,7 @@ import (
)
func TestTbfAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -66,8 +65,7 @@ func TestTbfAddDel(t *testing.T) {
}
func TestHtbAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -129,8 +127,7 @@ func TestHtbAddDel(t *testing.T) {
}
func TestSfqAddDel(t *testing.T) {
tearDown := setUpNetlinkTestWithKModule(t, "sch_sfq")
defer tearDown()
t.Cleanup(setUpNetlinkTestWithKModule(t, "sch_sfq"))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -195,8 +192,7 @@ func TestSfqAddDel(t *testing.T) {
}
func TestPrioAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -239,8 +235,7 @@ func TestPrioAddDel(t *testing.T) {
}
func TestTbfAddHtbReplaceDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -330,8 +325,7 @@ func TestTbfAddHtbReplaceDel(t *testing.T) {
}
func TestTbfAddTbfChangeDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -421,8 +415,7 @@ func TestTbfAddTbfChangeDel(t *testing.T) {
func TestFqAddChangeDel(t *testing.T) {
minKernelRequired(t, 3, 11)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -478,8 +471,7 @@ func TestFqAddChangeDel(t *testing.T) {
func TestFqHorizon(t *testing.T) {
minKernelRequired(t, 5, 7)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -535,8 +527,7 @@ func TestFqHorizon(t *testing.T) {
func TestFqCodelAddChangeDel(t *testing.T) {
minKernelRequired(t, 3, 4)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
@@ -587,8 +578,7 @@ func TestFqCodelAddChangeDel(t *testing.T) {
}
func TestIngressAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
t.Fatal(err)
}
+1
View File
@@ -1,3 +1,4 @@
//go:build linux
// +build linux
package netlink
+28 -56
View File
@@ -17,8 +17,7 @@ import (
)
func TestRouteAddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -155,8 +154,7 @@ func TestRouteAddDel(t *testing.T) {
}
func TestRoute6AddDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// create dummy interface
// IPv6 route added to loopback interface will be unreachable
@@ -332,8 +330,7 @@ func TestRoute6AddDel(t *testing.T) {
}
func TestRouteChange(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -398,8 +395,7 @@ func TestRouteChange(t *testing.T) {
}
func TestRouteReplace(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -459,8 +455,7 @@ func TestRouteReplace(t *testing.T) {
}
func TestRouteAppend(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -523,8 +518,7 @@ func TestRouteAppend(t *testing.T) {
}
func TestRouteAddIncomplete(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -562,8 +556,7 @@ func expectRouteUpdate(ch <-chan RouteUpdate, t, f uint16, dst net.IP) bool {
}
func TestRouteSubscribe(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan RouteUpdate)
done := make(chan struct{})
@@ -607,8 +600,7 @@ func TestRouteSubscribe(t *testing.T) {
}
func TestRouteSubscribeWithOptions(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan RouteUpdate)
done := make(chan struct{})
@@ -796,8 +788,7 @@ func TestRouteSubscribeListExisting(t *testing.T) {
}
func TestRouteFilterAllTables(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -877,8 +868,7 @@ func TestRouteFilterAllTables(t *testing.T) {
}
func TestRouteFilterByFamily(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
const table int = 999
@@ -950,8 +940,7 @@ func TestRouteFilterByFamily(t *testing.T) {
}
func TestRouteFilterIterCanStop(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -1016,8 +1005,7 @@ func TestRouteFilterIterCanStop(t *testing.T) {
}
func BenchmarkRouteListFilteredNew(b *testing.B) {
tearDown := setUpNetlinkTest(b)
defer tearDown()
b.Cleanup(setUpNetlinkTest(b))
link, err := setUpRoutesBench(b)
@@ -1039,8 +1027,7 @@ func BenchmarkRouteListFilteredNew(b *testing.B) {
}
func BenchmarkRouteListIter(b *testing.B) {
tearDown := setUpNetlinkTest(b)
defer tearDown()
b.Cleanup(setUpNetlinkTest(b))
link, err := setUpRoutesBench(b)
@@ -1104,8 +1091,7 @@ func tableIDIn(ids []int, id int) bool {
}
func TestRouteExtraFields(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -1180,8 +1166,7 @@ func TestRouteExtraFields(t *testing.T) {
}
func TestRouteMultiPath(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -1357,8 +1342,7 @@ func TestRouteIifOption(t *testing.T) {
}
func TestRouteOifOption(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// setup two interfaces: eth0, eth1
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
@@ -1467,8 +1451,7 @@ func TestRouteOifOption(t *testing.T) {
}
func TestFilterDefaultRoute(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -1549,8 +1532,7 @@ func TestFilterDefaultRoute(t *testing.T) {
}
func TestMPLSRouteAddDel(t *testing.T) {
tearDown := setUpMPLSNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpMPLSNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -1601,8 +1583,7 @@ func TestIP6tnlRouteAddDel(t *testing.T) {
t.Fatal(err)
}
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -2021,8 +2002,7 @@ func TestSEG6RouteAddDel(t *testing.T) {
}
// add/del routes with LWTUNNEL_SEG6 to/from loopback interface.
// Test both seg6 modes: encap (IPv4) & inline (IPv6).
tearDown := setUpSEG6NetlinkTest(t)
defer tearDown()
t.Cleanup(setUpSEG6NetlinkTest(t))
// get loopback interface and bring it up
link, err := LinkByName("lo")
@@ -2107,8 +2087,7 @@ func TestSEG6RouteAddDel(t *testing.T) {
// add/del routes with LWTUNNEL_ENCAP_SEG6_LOCAL to/from dummy interface.
func TestSEG6LocalRoute6AddDel(t *testing.T) {
minKernelRequired(t, 4, 14)
tearDown := setUpSEG6NetlinkTest(t)
defer tearDown()
t.Cleanup(setUpSEG6NetlinkTest(t))
// create dummy interface
// IPv6 route added to loopback interface will be unreachable
@@ -2238,8 +2217,7 @@ func TestMTURouteAddDel(t *testing.T) {
t.Fatal(err)
}
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -2292,8 +2270,7 @@ func TestMTULockRouteAddDel(t *testing.T) {
t.Fatal(err)
}
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -2350,8 +2327,7 @@ func TestRtoMinLockRouteAddDel(t *testing.T) {
t.Fatal(err)
}
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// get loopback interface
link, err := LinkByName("lo")
@@ -2404,8 +2380,7 @@ func TestRtoMinLockRouteAddDel(t *testing.T) {
func TestRouteViaAddDel(t *testing.T) {
minKernelRequired(t, 5, 4)
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
_, err := RouteList(nil, FAMILY_V4)
if err != nil {
@@ -2469,8 +2444,7 @@ func TestRouteViaAddDel(t *testing.T) {
}
func TestRouteUIDOption(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// setup eth0 so that network is reachable
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
@@ -2565,8 +2539,7 @@ func TestRouteUIDOption(t *testing.T) {
}
func TestRouteFWMarkOption(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
// setup eth0 so that network is reachable
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
@@ -2710,8 +2683,7 @@ func TestRouteFWMarkOption(t *testing.T) {
}
func TestRouteGetFIBMatchOption(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
if err != nil {
+1
View File
@@ -1,3 +1,4 @@
//go:build !linux
// +build !linux
package netlink
+2 -2
View File
@@ -13,7 +13,7 @@ import (
func TestRuleAddDel(t *testing.T) {
skipUnlessRoot(t)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
srcNet := &net.IPNet{IP: net.IPv4(172, 16, 0, 1), Mask: net.CIDRMask(16, 32)}
dstNet := &net.IPNet{IP: net.IPv4(172, 16, 1, 1), Mask: net.CIDRMask(24, 32)}
@@ -584,7 +584,7 @@ func runRuleListFiltered(t *testing.T, family int, srcNet, dstNet *net.IPNet) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
rule := tt.preRun()
wantRules, wantErr := tt.setupWant(rule)
+2 -2
View File
@@ -12,7 +12,7 @@ import (
)
func TestSocketGet(t *testing.T) {
defer setUpNetlinkTestWithLoopback(t)()
t.Cleanup(setUpNetlinkTestWithLoopback(t))
type Addr struct {
IP net.IP
@@ -102,7 +102,7 @@ func TestSocketGet(t *testing.T) {
}
func TestSocketDestroy(t *testing.T) {
defer setUpNetlinkTestWithLoopback(t)()
t.Cleanup(setUpNetlinkTestWithLoopback(t))
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
if err != nil {
+1 -1
View File
@@ -11,7 +11,7 @@ func TestXfrmMonitorExpire(t *testing.T) {
if os.Getenv("CI") == "true" {
t.Skipf("Flaky in CI: Intermittently causes 10 minute timeout")
}
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
ch := make(chan XfrmMsg)
done := make(chan struct{})
+5 -6
View File
@@ -9,8 +9,7 @@ import (
const zeroCIDR = "0.0.0.0/0"
func TestXfrmPolicyAddUpdateDel(t *testing.T) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
policy := getPolicy()
if err := XfrmPolicyAdd(policy); err != nil {
@@ -102,7 +101,7 @@ func TestXfrmPolicyAddUpdateDel(t *testing.T) {
}
func TestXfrmPolicyFlush(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
p1 := getPolicy()
if err := XfrmPolicyAdd(p1); err != nil {
@@ -140,7 +139,7 @@ func TestXfrmPolicyFlush(t *testing.T) {
}
func TestXfrmPolicyBlockWithIfindex(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
pBlock := getPolicy()
pBlock.Action = XFRM_POLICY_BLOCK
@@ -165,7 +164,7 @@ func TestXfrmPolicyBlockWithIfindex(t *testing.T) {
func TestXfrmPolicyWithIfid(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
pol := getPolicy()
pol.Ifid = 54321
@@ -190,7 +189,7 @@ func TestXfrmPolicyWithIfid(t *testing.T) {
func TestXfrmPolicyWithOptional(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
pol := getPolicy()
pol.Dir = XFRM_DIR_IN
+13 -14
View File
@@ -21,8 +21,7 @@ func TestXfrmStateAddGetDel(t *testing.T) {
}
func testXfrmStateAddGetDel(t *testing.T, state *XfrmState) {
tearDown := setUpNetlinkTest(t)
defer tearDown()
t.Cleanup(setUpNetlinkTest(t))
if err := XfrmStateAdd(state); err != nil {
t.Fatal(err)
}
@@ -66,7 +65,7 @@ func testXfrmStateAddGetDel(t *testing.T, state *XfrmState) {
}
func TestXfrmStateAllocSpi(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
state.Spi = 0
@@ -87,7 +86,7 @@ func TestXfrmStateAllocSpi(t *testing.T) {
}
func TestXfrmStateFlush(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state1 := getBaseState()
state2 := getBaseState()
@@ -138,7 +137,7 @@ func TestXfrmStateFlush(t *testing.T) {
}
func TestXfrmStateUpdateLimits(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
// Program state with limits
state := getBaseState()
@@ -186,7 +185,7 @@ func TestXfrmStateUpdateLimits(t *testing.T) {
}
func TestXfrmStateStats(t *testing.T) {
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
// Program state and record time
state := getBaseState()
@@ -207,7 +206,7 @@ func TestXfrmStateStats(t *testing.T) {
func TestXfrmStateWithIfid(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
state.Ifid = 54321
@@ -228,7 +227,7 @@ func TestXfrmStateWithIfid(t *testing.T) {
func TestXfrmStateWithSADir(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
state.SADir = XFRM_SA_DIR_IN
@@ -260,18 +259,18 @@ func TestXfrmStateWithPcpunumWithoutSADir(t *testing.T) {
t.Skipf("Host Kernel (%d.%d) does not meet test's minimum required version: (%d.%d)",
k, m, minKernel, minMajor)
}
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
pcpuNum := uint32(1)
state.Pcpunum = &pcpuNum
err = XfrmStateAdd(state)
if err != nil {
if k > maxKernel || k == maxKernel && m >= maxMajor {
// On and After maxKernel.maxMajor, SA_PCPU is only supported with SA_DIR
t.Logf("Host Kernel(%d.%d) does not allows SA_PCPU without SA_DIR", k, m)
if ! strings.Contains(err.Error(), unsupportedMsg) {
if !strings.Contains(err.Error(), unsupportedMsg) {
t.Fatal("Unexpected error from XfrmStateAdd", "error: ", err)
}
return
@@ -292,7 +291,7 @@ func TestXfrmStateWithPcpunumWithoutSADir(t *testing.T) {
func TestXfrmStateWithPcpunumWithSADir(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
state.SADir = XFRM_SA_DIR_IN
@@ -315,7 +314,7 @@ func TestXfrmStateWithPcpunumWithSADir(t *testing.T) {
func TestXfrmStateWithOutputMark(t *testing.T) {
minKernelRequired(t, 4, 14)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
state.OutputMark = &XfrmMark{
@@ -338,7 +337,7 @@ func TestXfrmStateWithOutputMark(t *testing.T) {
func TestXfrmStateWithOutputMarkAndMask(t *testing.T) {
minKernelRequired(t, 4, 19)
defer setUpNetlinkTest(t)()
t.Cleanup(setUpNetlinkTest(t))
state := getBaseState()
state.OutputMark = &XfrmMark{