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