diff --git a/class_test.go b/class_test.go index 1d0c27b..69de266 100644 --- a/class_test.go +++ b/class_test.go @@ -6,6 +6,23 @@ import ( "testing" ) +func SafeQdiscList(link Link) ([]Qdisc, error) { + qdiscs, err := QdiscList(link) + if err != nil { + return nil, err + } + result := []Qdisc{} + for _, qdisc := range qdiscs { + // filter out pfifo_fast qdiscs because + // older kernels don't return them + _, pfifo := qdisc.(*PfifoFast) + if !pfifo { + result = append(result, qdisc) + } + } + return result, nil +} + func TestClassAddDel(t *testing.T) { tearDown := setUpNetlinkTest(t) defer tearDown() @@ -31,7 +48,7 @@ func TestClassAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -103,7 +120,7 @@ func TestClassAddDel(t *testing.T) { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -153,7 +170,7 @@ func TestClassAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -194,7 +211,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -254,7 +271,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -306,7 +323,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) { } // Check that we still have the netem child qdisc - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -398,7 +415,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } diff --git a/filter_test.go b/filter_test.go index a6dccf3..14416e3 100644 --- a/filter_test.go +++ b/filter_test.go @@ -41,7 +41,7 @@ func TestFilterAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -93,7 +93,7 @@ func TestFilterAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -128,7 +128,7 @@ func TestAdvancedFilterAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -257,7 +257,7 @@ func TestAdvancedFilterAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -298,7 +298,7 @@ func TestFilterFwAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -412,7 +412,7 @@ func TestFilterFwAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -454,7 +454,7 @@ func TestFilterU32BpfAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -513,15 +513,21 @@ func TestFilterU32BpfAddDel(t *testing.T) { if u32.ClassId != classId { t.Fatalf("ClassId of the filter is the wrong value") } + // actions can be returned in reverse order bpfAction, ok := u32.Actions[0].(*BpfAction) if !ok { - t.Fatal("Action[0] is the wrong type") + bpfAction, ok = u32.Actions[1].(*BpfAction) + if !ok { + t.Fatal("Action is the wrong type") + } } if bpfAction.Fd != fd { t.Fatal("Action Fd does not match") } - if _, ok := u32.Actions[1].(*MirredAction); !ok { - t.Fatal("Action[1] is the wrong type") + if _, ok := u32.Actions[0].(*MirredAction); !ok { + if _, ok := u32.Actions[1].(*MirredAction); !ok { + t.Fatal("Action is the wrong type") + } } if err := FilterDel(filter); err != nil { @@ -538,7 +544,7 @@ func TestFilterU32BpfAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -573,12 +579,12 @@ func TestFilterClsActBpfAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Skipf("Failed adding clsact qdisc, unsupported kernel") } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } if len(qdiscs) != 1 { - t.Fatal("Failed to add qdisc") + t.Fatal("Failed to add qdisc", len(qdiscs)) } if q, ok := qdiscs[0].(*GenericQdisc); !ok || q.Type() != "clsact" { t.Fatal("qdisc is the wrong type") @@ -642,7 +648,7 @@ func TestFilterClsActBpfAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } diff --git a/qdisc_test.go b/qdisc_test.go index dff58f9..4cdd728 100644 --- a/qdisc_test.go +++ b/qdisc_test.go @@ -32,7 +32,7 @@ func TestTbfAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -55,7 +55,7 @@ func TestTbfAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -90,7 +90,7 @@ func TestHtbAddDel(t *testing.T) { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -113,7 +113,7 @@ func TestHtbAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -143,7 +143,7 @@ func TestPrioAddDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -157,7 +157,7 @@ func TestPrioAddDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -195,7 +195,7 @@ func TestTbfAddHtbReplaceDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -224,7 +224,7 @@ func TestTbfAddHtbReplaceDel(t *testing.T) { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -248,7 +248,7 @@ func TestTbfAddHtbReplaceDel(t *testing.T) { if err := QdiscDel(qdisc2); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -286,7 +286,7 @@ func TestTbfAddTbfChangeDel(t *testing.T) { if err := QdiscAdd(qdisc); err != nil { t.Fatal(err) } - qdiscs, err := QdiscList(link) + qdiscs, err := SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -313,7 +313,7 @@ func TestTbfAddTbfChangeDel(t *testing.T) { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) } @@ -337,7 +337,7 @@ func TestTbfAddTbfChangeDel(t *testing.T) { if err := QdiscDel(qdisc); err != nil { t.Fatal(err) } - qdiscs, err = QdiscList(link) + qdiscs, err = SafeQdiscList(link) if err != nil { t.Fatal(err) }