github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/libnetwork/drivers/ipvlan/ipvlan_setup_test.go (about)

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