123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- package netlink
- import (
- "testing"
- )
- func TestTbfAddDel(t *testing.T) {
- tearDown := setUpNetlinkTest(t)
- defer tearDown()
- if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); 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 := &Tbf{
- QdiscAttrs: QdiscAttrs{
- LinkIndex: link.Attrs().Index,
- Handle: MakeHandle(1, 0),
- Parent: HANDLE_ROOT,
- },
- Rate: 131072,
- Limit: 1220703,
- Buffer: 16793,
- }
- if err := QdiscAdd(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err := QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- tbf, ok := qdiscs[0].(*Tbf)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if tbf.Rate != qdisc.Rate {
- t.Fatal("Rate doesn't match")
- }
- if tbf.Limit != qdisc.Limit {
- t.Fatal("Limit doesn't match")
- }
- if tbf.Buffer != qdisc.Buffer {
- t.Fatal("Buffer doesn't match")
- }
- if err := QdiscDel(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 0 {
- t.Fatal("Failed to remove qdisc")
- }
- }
- func TestHtbAddDel(t *testing.T) {
- tearDown := setUpNetlinkTest(t)
- defer tearDown()
- if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
- t.Fatal(err)
- }
- link, err := LinkByName("foo")
- if err != nil {
- t.Fatal(err)
- }
- if err := LinkSetUp(link); err != nil {
- t.Fatal(err)
- }
- attrs := QdiscAttrs{
- LinkIndex: link.Attrs().Index,
- Handle: MakeHandle(1, 0),
- Parent: HANDLE_ROOT,
- }
- qdisc := NewHtb(attrs)
- qdisc.Rate2Quantum = 5
- if err := QdiscAdd(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err := QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- htb, ok := qdiscs[0].(*Htb)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if htb.Defcls != qdisc.Defcls {
- t.Fatal("Defcls doesn't match")
- }
- if htb.Rate2Quantum != qdisc.Rate2Quantum {
- t.Fatal("Rate2Quantum doesn't match")
- }
- if htb.Debug != qdisc.Debug {
- t.Fatal("Debug doesn't match")
- }
- if err := QdiscDel(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 0 {
- t.Fatal("Failed to remove qdisc")
- }
- }
- func TestPrioAddDel(t *testing.T) {
- tearDown := setUpNetlinkTest(t)
- defer tearDown()
- if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); 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 := NewPrio(QdiscAttrs{
- LinkIndex: link.Attrs().Index,
- Handle: MakeHandle(1, 0),
- Parent: HANDLE_ROOT,
- })
- if err := QdiscAdd(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err := QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- _, ok := qdiscs[0].(*Prio)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if err := QdiscDel(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 0 {
- t.Fatal("Failed to remove qdisc")
- }
- }
- func TestTbfAddHtbReplaceDel(t *testing.T) {
- tearDown := setUpNetlinkTest(t)
- defer tearDown()
- if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
- t.Fatal(err)
- }
- link, err := LinkByName("foo")
- if err != nil {
- t.Fatal(err)
- }
- if err := LinkSetUp(link); err != nil {
- t.Fatal(err)
- }
- // Add
- attrs := QdiscAttrs{
- LinkIndex: link.Attrs().Index,
- Handle: MakeHandle(1, 0),
- Parent: HANDLE_ROOT,
- }
- qdisc := &Tbf{
- QdiscAttrs: attrs,
- Rate: 131072,
- Limit: 1220703,
- Buffer: 16793,
- }
- if err := QdiscAdd(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err := QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- tbf, ok := qdiscs[0].(*Tbf)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if tbf.Rate != qdisc.Rate {
- t.Fatal("Rate doesn't match")
- }
- if tbf.Limit != qdisc.Limit {
- t.Fatal("Limit doesn't match")
- }
- if tbf.Buffer != qdisc.Buffer {
- t.Fatal("Buffer doesn't match")
- }
- // Replace
- // For replace to work, the handle MUST be different that the running one
- attrs.Handle = MakeHandle(2, 0)
- qdisc2 := NewHtb(attrs)
- qdisc2.Rate2Quantum = 5
- if err := QdiscReplace(qdisc2); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- htb, ok := qdiscs[0].(*Htb)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if htb.Defcls != qdisc2.Defcls {
- t.Fatal("Defcls doesn't match")
- }
- if htb.Rate2Quantum != qdisc2.Rate2Quantum {
- t.Fatal("Rate2Quantum doesn't match")
- }
- if htb.Debug != qdisc2.Debug {
- t.Fatal("Debug doesn't match")
- }
- if err := QdiscDel(qdisc2); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 0 {
- t.Fatal("Failed to remove qdisc")
- }
- }
- func TestTbfAddTbfChangeDel(t *testing.T) {
- tearDown := setUpNetlinkTest(t)
- defer tearDown()
- if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
- t.Fatal(err)
- }
- link, err := LinkByName("foo")
- if err != nil {
- t.Fatal(err)
- }
- if err := LinkSetUp(link); err != nil {
- t.Fatal(err)
- }
- // Add
- attrs := QdiscAttrs{
- LinkIndex: link.Attrs().Index,
- Handle: MakeHandle(1, 0),
- Parent: HANDLE_ROOT,
- }
- qdisc := &Tbf{
- QdiscAttrs: attrs,
- Rate: 131072,
- Limit: 1220703,
- Buffer: 16793,
- }
- if err := QdiscAdd(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err := QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- tbf, ok := qdiscs[0].(*Tbf)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if tbf.Rate != qdisc.Rate {
- t.Fatal("Rate doesn't match")
- }
- if tbf.Limit != qdisc.Limit {
- t.Fatal("Limit doesn't match")
- }
- if tbf.Buffer != qdisc.Buffer {
- t.Fatal("Buffer doesn't match")
- }
- // Change
- // For change to work, the handle MUST not change
- qdisc.Rate = 23456
- if err := QdiscChange(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 1 {
- t.Fatal("Failed to add qdisc")
- }
- tbf, ok = qdiscs[0].(*Tbf)
- if !ok {
- t.Fatal("Qdisc is the wrong type")
- }
- if tbf.Rate != qdisc.Rate {
- t.Fatal("Rate doesn't match")
- }
- if tbf.Limit != qdisc.Limit {
- t.Fatal("Limit doesn't match")
- }
- if tbf.Buffer != qdisc.Buffer {
- t.Fatal("Buffer doesn't match")
- }
- if err := QdiscDel(qdisc); err != nil {
- t.Fatal(err)
- }
- qdiscs, err = QdiscList(link)
- if err != nil {
- t.Fatal(err)
- }
- if len(qdiscs) != 0 {
- t.Fatal("Failed to remove qdisc")
- }
- }
|