github.com/vishvananda/netlink@v1.3.0/chain_test.go (about) 1 //go:build linux 2 // +build linux 3 4 package netlink 5 6 import ( 7 "testing" 8 ) 9 10 func TestChainAddDel(t *testing.T) { 11 tearDown := setUpNetlinkTest(t) 12 defer tearDown() 13 if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil { 14 t.Fatal(err) 15 } 16 if err := LinkAdd(&Ifb{LinkAttrs{Name: "bar"}}); err != nil { 17 t.Fatal(err) 18 } 19 link, err := LinkByName("foo") 20 if err != nil { 21 t.Fatal(err) 22 } 23 if err := LinkSetUp(link); err != nil { 24 t.Fatal(err) 25 } 26 qdisc := &Ingress{ 27 QdiscAttrs: QdiscAttrs{ 28 LinkIndex: link.Attrs().Index, 29 Handle: MakeHandle(0xffff, 0), 30 Parent: HANDLE_INGRESS, 31 }, 32 } 33 if err := QdiscAdd(qdisc); err != nil { 34 t.Fatal(err) 35 } 36 qdiscs, err := SafeQdiscList(link) 37 if err != nil { 38 t.Fatal(err) 39 } 40 if len(qdiscs) != 1 { 41 t.Fatal("Failed to add qdisc") 42 } 43 _, ok := qdiscs[0].(*Ingress) 44 if !ok { 45 t.Fatal("Qdisc is the wrong type") 46 } 47 chainVal := new(uint32) 48 *chainVal = 20 49 chain := NewChain(HANDLE_INGRESS, *chainVal) 50 err = ChainAdd(link, chain) 51 if err != nil { 52 t.Fatal(err) 53 } 54 chains, err := ChainList(link, HANDLE_INGRESS) 55 if err != nil { 56 t.Fatal(err) 57 } 58 if len(chains) != 1 { 59 t.Fatal("Failed to add chain") 60 } 61 if chains[0].Chain != *chainVal { 62 t.Fatal("Incorrect chain added") 63 } 64 if chains[0].Parent != HANDLE_INGRESS { 65 t.Fatal("Incorrect chain parent") 66 } 67 if err := ChainDel(link, chain); err != nil { 68 t.Fatal(err) 69 } 70 chains, err = ChainList(link, HANDLE_INGRESS) 71 if err != nil { 72 t.Fatal(err) 73 } 74 if len(chains) != 0 { 75 t.Fatal("Failed to remove chain") 76 } 77 }