ipvlan_setup_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. //go:build linux
  2. // +build linux
  3. package ipvlan
  4. import (
  5. "testing"
  6. "github.com/vishvananda/netlink"
  7. )
  8. // TestValidateLink tests the parentExists function
  9. func TestValidateLink(t *testing.T) {
  10. validIface := "lo"
  11. invalidIface := "foo12345"
  12. // test a valid parent interface validation
  13. if ok := parentExists(validIface); !ok {
  14. t.Fatalf("failed validating loopback %s", validIface)
  15. }
  16. // test an invalid parent interface validation
  17. if ok := parentExists(invalidIface); ok {
  18. t.Fatalf("failed to invalidate interface %s", invalidIface)
  19. }
  20. }
  21. // TestValidateSubLink tests valid 802.1q naming convention
  22. func TestValidateSubLink(t *testing.T) {
  23. validSubIface := "lo.10"
  24. invalidSubIface1 := "lo"
  25. invalidSubIface2 := "lo:10"
  26. invalidSubIface3 := "foo123.456"
  27. // test a valid parent_iface.vlan_id
  28. _, _, err := parseVlan(validSubIface)
  29. if err != nil {
  30. t.Fatalf("failed subinterface validation: %v", err)
  31. }
  32. // test an invalid vid with a valid parent link
  33. _, _, err = parseVlan(invalidSubIface1)
  34. if err == nil {
  35. t.Fatalf("failed subinterface validation test: %s", invalidSubIface1)
  36. }
  37. // test a valid vid with a valid parent link with an invalid delimiter
  38. _, _, err = parseVlan(invalidSubIface2)
  39. if err == nil {
  40. t.Fatalf("failed subinterface validation test: %v", invalidSubIface2)
  41. }
  42. // test an invalid parent link with a valid vid
  43. _, _, err = parseVlan(invalidSubIface3)
  44. if err == nil {
  45. t.Fatalf("failed subinterface validation test: %v", invalidSubIface3)
  46. }
  47. }
  48. // TestSetIPVlanMode tests the ipvlan mode setter
  49. func TestSetIPVlanMode(t *testing.T) {
  50. // test ipvlan l2 mode
  51. mode, err := setIPVlanMode(modeL2)
  52. if err != nil {
  53. t.Fatalf("error parsing %v vlan mode: %v", mode, err)
  54. }
  55. if mode != netlink.IPVLAN_MODE_L2 {
  56. t.Fatalf("expected %d got %d", netlink.IPVLAN_MODE_L2, mode)
  57. }
  58. // test ipvlan l3 mode
  59. mode, err = setIPVlanMode(modeL3)
  60. if err != nil {
  61. t.Fatalf("error parsing %v vlan mode: %v", mode, err)
  62. }
  63. if mode != netlink.IPVLAN_MODE_L3 {
  64. t.Fatalf("expected %d got %d", netlink.IPVLAN_MODE_L3, mode)
  65. }
  66. // test ipvlan l3s mode
  67. mode, err = setIPVlanMode(modeL3S)
  68. if err != nil {
  69. t.Fatalf("error parsing %v vlan mode: %v", mode, err)
  70. }
  71. if mode != netlink.IPVLAN_MODE_L3S {
  72. t.Fatalf("expected %d got %d", netlink.IPVLAN_MODE_L3S, mode)
  73. }
  74. // test invalid mode
  75. mode, err = setIPVlanMode("foo")
  76. if err == nil {
  77. t.Fatal("invalid ipvlan mode should have returned an error")
  78. }
  79. if mode != 0 {
  80. t.Fatalf("expected 0 got %d", mode)
  81. }
  82. // test null mode
  83. mode, err = setIPVlanMode("")
  84. if err == nil {
  85. t.Fatal("invalid ipvlan mode should have returned an error")
  86. }
  87. if mode != 0 {
  88. t.Fatalf("expected 0 got %d", mode)
  89. }
  90. }
  91. // TestSetIPVlanFlag tests the ipvlan flag setter
  92. func TestSetIPVlanFlag(t *testing.T) {
  93. // test ipvlan bridge flag
  94. flag, err := setIPVlanFlag(flagBridge)
  95. if err != nil {
  96. t.Fatalf("error parsing %v vlan flag: %v", flag, err)
  97. }
  98. if flag != netlink.IPVLAN_FLAG_BRIDGE {
  99. t.Fatalf("expected %d got %d", netlink.IPVLAN_FLAG_BRIDGE, flag)
  100. }
  101. // test ipvlan private flag
  102. flag, err = setIPVlanFlag(flagPrivate)
  103. if err != nil {
  104. t.Fatalf("error parsing %v vlan flag: %v", flag, err)
  105. }
  106. if flag != netlink.IPVLAN_FLAG_PRIVATE {
  107. t.Fatalf("expected %d got %d", netlink.IPVLAN_FLAG_PRIVATE, flag)
  108. }
  109. // test ipvlan vepa flag
  110. flag, err = setIPVlanFlag(flagVepa)
  111. if err != nil {
  112. t.Fatalf("error parsing %v vlan flag: %v", flag, err)
  113. }
  114. if flag != netlink.IPVLAN_FLAG_VEPA {
  115. t.Fatalf("expected %d got %d", netlink.IPVLAN_FLAG_VEPA, flag)
  116. }
  117. // test invalid flag
  118. flag, err = setIPVlanFlag("foo")
  119. if err == nil {
  120. t.Fatal("invalid ipvlan flag should have returned an error")
  121. }
  122. if flag != 0 {
  123. t.Fatalf("expected 0 got %d", flag)
  124. }
  125. // test null flag
  126. flag, err = setIPVlanFlag("")
  127. if err == nil {
  128. t.Fatal("invalid ipvlan flag should have returned an error")
  129. }
  130. if flag != 0 {
  131. t.Fatalf("expected 0 got %d", flag)
  132. }
  133. }