github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/libnetwork/drivers/ipvlan/ipvlan_setup_test.go (about)

     1  package ipvlan
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/vishvananda/netlink"
     7  )
     8  
     9  // TestValidateLink tests the parentExists function
    10  func TestValidateLink(t *testing.T) {
    11  	validIface := "lo"
    12  	invalidIface := "foo12345"
    13  
    14  	// test a valid parent interface validation
    15  	if ok := parentExists(validIface); !ok {
    16  		t.Fatalf("failed validating loopback %s", validIface)
    17  	}
    18  	// test an invalid parent interface validation
    19  	if ok := parentExists(invalidIface); ok {
    20  		t.Fatalf("failed to invalidate interface %s", invalidIface)
    21  	}
    22  }
    23  
    24  // TestValidateSubLink tests valid 802.1q naming convention
    25  func TestValidateSubLink(t *testing.T) {
    26  	validSubIface := "lo.10"
    27  	invalidSubIface1 := "lo"
    28  	invalidSubIface2 := "lo:10"
    29  	invalidSubIface3 := "foo123.456"
    30  
    31  	// test a valid parent_iface.vlan_id
    32  	_, _, err := parseVlan(validSubIface)
    33  	if err != nil {
    34  		t.Fatalf("failed subinterface validation: %v", err)
    35  	}
    36  	// test an invalid vid with a valid parent link
    37  	_, _, err = parseVlan(invalidSubIface1)
    38  	if err == nil {
    39  		t.Fatalf("failed subinterface validation test: %s", invalidSubIface1)
    40  	}
    41  	// test a valid vid with a valid parent link with an invalid delimiter
    42  	_, _, err = parseVlan(invalidSubIface2)
    43  	if err == nil {
    44  		t.Fatalf("failed subinterface validation test: %v", invalidSubIface2)
    45  	}
    46  	// test an invalid parent link with a valid vid
    47  	_, _, err = parseVlan(invalidSubIface3)
    48  	if err == nil {
    49  		t.Fatalf("failed subinterface validation test: %v", invalidSubIface3)
    50  	}
    51  }
    52  
    53  // TestSetIPVlanMode tests the ipvlan mode setter
    54  func TestSetIPVlanMode(t *testing.T) {
    55  	// test ipvlan l2 mode
    56  	mode, err := setIPVlanMode(modeL2)
    57  	if err != nil {
    58  		t.Fatalf("error parsing %v vlan mode: %v", mode, err)
    59  	}
    60  	if mode != netlink.IPVLAN_MODE_L2 {
    61  		t.Fatalf("expected %d got %d", netlink.IPVLAN_MODE_L2, mode)
    62  	}
    63  	// test ipvlan l3 mode
    64  	mode, err = setIPVlanMode(modeL3)
    65  	if err != nil {
    66  		t.Fatalf("error parsing %v vlan mode: %v", mode, err)
    67  	}
    68  	if mode != netlink.IPVLAN_MODE_L3 {
    69  		t.Fatalf("expected %d got %d", netlink.IPVLAN_MODE_L3, mode)
    70  	}
    71  	// test invalid mode
    72  	mode, err = setIPVlanMode("foo")
    73  	if err == nil {
    74  		t.Fatal("invalid ipvlan mode should have returned an error")
    75  	}
    76  	if mode != 0 {
    77  		t.Fatalf("expected 0 got %d", mode)
    78  	}
    79  	// test null mode
    80  	mode, err = setIPVlanMode("")
    81  	if err == nil {
    82  		t.Fatal("invalid ipvlan mode should have returned an error")
    83  	}
    84  	if mode != 0 {
    85  		t.Fatalf("expected 0 got %d", mode)
    86  	}
    87  }