Add TestGetMessageSize
This commit is contained in:
parent
4c1b4e9a74
commit
5af35a8742
|
@ -7396,3 +7396,77 @@ func TestSetElementComment(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetMessageSize(t *testing.T) {
|
||||
// Use generous socket buffer sizes
|
||||
writeBufSize := 1 * 1024 * 1024
|
||||
readBufSize := 1 * 1024 * 1024
|
||||
_, newNS := nftest.OpenSystemConn(t, *enableSysTests)
|
||||
conn, err := nftables.New(nftables.WithNetNSFd(int(newNS)), nftables.WithSockOptions(func(conn *netlink.Conn) error {
|
||||
if err := conn.SetWriteBuffer(writeBufSize); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := conn.SetReadBuffer(readBufSize); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}))
|
||||
if err != nil {
|
||||
t.Fatalf("nftables.New() failed: %v", err)
|
||||
}
|
||||
defer nftest.CleanupSystemConn(t, newNS)
|
||||
conn.FlushRuleset()
|
||||
defer conn.FlushRuleset()
|
||||
|
||||
want := uint32(20)
|
||||
size := conn.GetMessageSize()
|
||||
if size != want {
|
||||
t.Fatalf("got message size %d, want %d", size, want)
|
||||
}
|
||||
|
||||
table := conn.AddTable(&nftables.Table{
|
||||
Family: nftables.TableFamilyIPv4,
|
||||
Name: "test-table",
|
||||
})
|
||||
want += 44 // Table adds 44 bytes
|
||||
size = conn.GetMessageSize()
|
||||
if size != want {
|
||||
t.Fatalf("got message size %d, want %d", size, want)
|
||||
}
|
||||
|
||||
chain := conn.AddChain(&nftables.Chain{
|
||||
Name: "test-message",
|
||||
Table: table,
|
||||
})
|
||||
want += 56 // Chain adds 56 bytes
|
||||
size = conn.GetMessageSize()
|
||||
if size != want {
|
||||
t.Fatalf("got message size %d, want %d", size, want)
|
||||
}
|
||||
|
||||
for i := 0; i < 2048; i++ {
|
||||
conn.AddRule(&nftables.Rule{
|
||||
Table: table,
|
||||
Chain: chain,
|
||||
Exprs: []expr.Any{
|
||||
&expr.Verdict{
|
||||
Kind: expr.VerdictAccept,
|
||||
},
|
||||
},
|
||||
})
|
||||
want += 116 // Rule adds 116 bytes
|
||||
size = conn.GetMessageSize()
|
||||
if size != want {
|
||||
t.Fatalf("got message size %d, want %d", size, want)
|
||||
}
|
||||
|
||||
// Do not use over half of the buffer before flushing
|
||||
if size > 32768/2 {
|
||||
want = 0
|
||||
err := conn.Flush()
|
||||
if err != nil {
|
||||
t.Fatalf("failed to flush: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue