ipvlan_setup_test.go 3.8 KB

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