2015-08-18 10:16:54 +00:00
|
|
|
package netlink
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2015-08-20 01:22:02 +00:00
|
|
|
func TestTbfAddDel(t *testing.T) {
|
2015-08-18 21:07:01 +00:00
|
|
|
tearDown := setUpNetlinkTest(t)
|
|
|
|
defer tearDown()
|
|
|
|
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
link, err := LinkByName("foo")
|
2015-08-18 10:16:54 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2015-08-18 21:07:01 +00:00
|
|
|
if err := LinkSetUp(link); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2015-08-19 23:02:04 +00:00
|
|
|
qdisc := &Tbf{
|
2015-08-18 21:07:01 +00:00
|
|
|
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")
|
|
|
|
}
|
2015-08-19 23:02:04 +00:00
|
|
|
tbf, ok := qdiscs[0].(*Tbf)
|
2015-08-18 21:07:01 +00:00
|
|
|
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)
|
|
|
|
}
|
2015-08-19 23:02:04 +00:00
|
|
|
qdiscs, err = QdiscList(link)
|
2015-08-18 21:07:01 +00:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if len(qdiscs) != 0 {
|
|
|
|
t.Fatal("Failed to remove qdisc")
|
2015-08-18 10:16:54 +00:00
|
|
|
}
|
|
|
|
}
|
2015-08-20 01:22:02 +00:00
|
|
|
|
2015-09-05 07:13:17 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2015-09-10 23:20:18 +00:00
|
|
|
/*
|
|
|
|
cmd := exec.Command("tc", "qdisc")
|
|
|
|
out, err := cmd.CombinedOutput()
|
|
|
|
if err == nil {
|
|
|
|
fmt.Printf("%s\n", out)
|
|
|
|
}
|
|
|
|
*/
|
2015-09-05 07:13:17 +00:00
|
|
|
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")
|
|
|
|
}
|
|
|
|
}
|
2015-08-20 01:22:02 +00:00
|
|
|
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")
|
|
|
|
}
|
|
|
|
}
|