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  }