protinfo_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package netlink
  2. import "testing"
  3. func TestProtinfo(t *testing.T) {
  4. tearDown := setUpNetlinkTest(t)
  5. defer tearDown()
  6. master := &Bridge{LinkAttrs{Name: "foo"}}
  7. if err := LinkAdd(master); err != nil {
  8. t.Fatal(err)
  9. }
  10. iface1 := &Dummy{LinkAttrs{Name: "bar1", MasterIndex: master.Index}}
  11. iface2 := &Dummy{LinkAttrs{Name: "bar2", MasterIndex: master.Index}}
  12. iface3 := &Dummy{LinkAttrs{Name: "bar3"}}
  13. if err := LinkAdd(iface1); err != nil {
  14. t.Fatal(err)
  15. }
  16. if err := LinkAdd(iface2); err != nil {
  17. t.Fatal(err)
  18. }
  19. if err := LinkAdd(iface3); err != nil {
  20. t.Fatal(err)
  21. }
  22. oldpi1, err := LinkGetProtinfo(iface1)
  23. if err != nil {
  24. t.Fatal(err)
  25. }
  26. oldpi2, err := LinkGetProtinfo(iface2)
  27. if err != nil {
  28. t.Fatal(err)
  29. }
  30. if err := LinkSetHairpin(iface1, true); err != nil {
  31. t.Fatal(err)
  32. }
  33. if err := LinkSetRootBlock(iface1, true); err != nil {
  34. t.Fatal(err)
  35. }
  36. pi1, err := LinkGetProtinfo(iface1)
  37. if err != nil {
  38. t.Fatal(err)
  39. }
  40. if !pi1.Hairpin {
  41. t.Fatalf("Hairpin mode is not enabled for %s, but should", iface1.Name)
  42. }
  43. if !pi1.RootBlock {
  44. t.Fatalf("RootBlock is not enabled for %s, but should", iface1.Name)
  45. }
  46. if pi1.Guard != oldpi1.Guard {
  47. t.Fatalf("Guard field was changed for %s but shouldn't", iface1.Name)
  48. }
  49. if pi1.FastLeave != oldpi1.FastLeave {
  50. t.Fatalf("FastLeave field was changed for %s but shouldn't", iface1.Name)
  51. }
  52. if pi1.Learning != oldpi1.Learning {
  53. t.Fatalf("Learning field was changed for %s but shouldn't", iface1.Name)
  54. }
  55. if pi1.Flood != oldpi1.Flood {
  56. t.Fatalf("Flood field was changed for %s but shouldn't", iface1.Name)
  57. }
  58. if err := LinkSetGuard(iface2, true); err != nil {
  59. t.Fatal(err)
  60. }
  61. if err := LinkSetLearning(iface2, false); err != nil {
  62. t.Fatal(err)
  63. }
  64. pi2, err := LinkGetProtinfo(iface2)
  65. if err != nil {
  66. t.Fatal(err)
  67. }
  68. if pi2.Hairpin {
  69. t.Fatalf("Hairpin mode is enabled for %s, but shouldn't", iface2.Name)
  70. }
  71. if !pi2.Guard {
  72. t.Fatalf("Guard is not enabled for %s, but should", iface2.Name)
  73. }
  74. if pi2.Learning {
  75. t.Fatalf("Learning is enabled for %s, but shouldn't", iface2.Name)
  76. }
  77. if pi2.RootBlock != oldpi2.RootBlock {
  78. t.Fatalf("RootBlock field was changed for %s but shouldn't", iface2.Name)
  79. }
  80. if pi2.FastLeave != oldpi2.FastLeave {
  81. t.Fatalf("FastLeave field was changed for %s but shouldn't", iface2.Name)
  82. }
  83. if pi2.Flood != oldpi2.Flood {
  84. t.Fatalf("Flood field was changed for %s but shouldn't", iface2.Name)
  85. }
  86. if err := LinkSetHairpin(iface3, true); err == nil || err.Error() != "operation not supported" {
  87. t.Fatalf("Set protinfo attrs for link without master is not supported, but err: %s", err)
  88. }
  89. }