mirror of https://github.com/vishvananda/netlink
78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package netlink
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestChainAddDel(t *testing.T) {
|
|
tearDown := setUpNetlinkTest(t)
|
|
defer tearDown()
|
|
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := LinkAdd(&Ifb{LinkAttrs{Name: "bar"}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
link, err := LinkByName("foo")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := LinkSetUp(link); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
qdisc := &Ingress{
|
|
QdiscAttrs: QdiscAttrs{
|
|
LinkIndex: link.Attrs().Index,
|
|
Handle: MakeHandle(0xffff, 0),
|
|
Parent: HANDLE_INGRESS,
|
|
},
|
|
}
|
|
if err := QdiscAdd(qdisc); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
qdiscs, err := SafeQdiscList(link)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(qdiscs) != 1 {
|
|
t.Fatal("Failed to add qdisc")
|
|
}
|
|
_, ok := qdiscs[0].(*Ingress)
|
|
if !ok {
|
|
t.Fatal("Qdisc is the wrong type")
|
|
}
|
|
chainVal := new(uint32)
|
|
*chainVal = 20
|
|
chain := NewChain(HANDLE_INGRESS, *chainVal)
|
|
err = ChainAdd(link, chain)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
chains, err := ChainList(link, HANDLE_INGRESS)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(chains) != 1 {
|
|
t.Fatal("Failed to add chain")
|
|
}
|
|
if chains[0].Chain != *chainVal {
|
|
t.Fatal("Incorrect chain added")
|
|
}
|
|
if chains[0].Parent != HANDLE_INGRESS {
|
|
t.Fatal("Incorrect chain parent")
|
|
}
|
|
if err := ChainDel(link, chain); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
chains, err = ChainList(link, HANDLE_INGRESS)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(chains) != 0 {
|
|
t.Fatal("Failed to remove chain")
|
|
}
|
|
}
|