Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 184 additions & 0 deletions cni/network/invoker_cns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2115,3 +2115,187 @@
})
}
}

// Test to add multiple IB NICs to make sure CNI receives all correct IB info from CNS
func TestMultipleIBNICsToResult(t *testing.T) {
require := require.New(t) //nolint further usage of require without passing t

firstMacAddress := "bc:9a:78:56:34:12"
firstParsedMacAddress, _ := net.ParseMAC(firstMacAddress)

secondMacAddress := "bc:9a:78:56:34:13"
secondParsedMacAddress, _ := net.ParseMAC(secondMacAddress)

thirdMacAddress := "bc:9a:78:56:34:14"
thirdParsedMacAddress, _ := net.ParseMAC(thirdMacAddress)

macAddressList := []string{firstMacAddress, secondMacAddress, thirdMacAddress}

firstPnpID := "PCI\\VEN_15B3&DEV_101C&SUBSYS_000715B3&REV_00\\5&8c5acce&0&0"
firstNewPnpID := "PCI\\VEN_15B3&DEV_101C&SUBSYS_000715B3&REV_00\\5&8c5acce&0&1"
secondPnpID := "PCI\\VEN_15B3&DEV_101C&SUBSYS_000715B3&REV_00\\6&8c5acce&0&1"
secondNewPnpID := "PCI\\VEN_15B3&DEV_101C&SUBSYS_000715B3&REV_00\\6&8c5acce&0&2"
thirdPnpID := "PCI\\VEN_15B3&DEV_101C&SUBSYS_000715B3&REV_00\\7&8c5acce&0&2"
thirdNewPnpID := "PCI\\VEN_15B3&DEV_101C&SUBSYS_000715B3&REV_00\\7&8c5acce&0&3"

type fields struct {
podName string
podNamespace string
cnsClient cnsclient
}

type args struct {
nwCfg *cni.NetworkConfig
args *cniSkel.CmdArgs
hostSubnetPrefix *net.IPNet
options map[string]interface{}
podIPConfig *cns.IPSubnet

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.22.x, ubuntu-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.23.x, ubuntu-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.23.x, ubuntu-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.22.x, ubuntu-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.22.x, windows-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.23.x, windows-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.22.x, windows-latest)

field `podIPConfig` is unused (unused)

Check failure on line 2152 in cni/network/invoker_cns_test.go

View workflow job for this annotation

GitHub Actions / Lint (1.23.x, windows-latest)

field `podIPConfig` is unused (unused)
info []IPResultInfo
}

tests := []struct {
name string
fields fields
args args
wantSecondaryInterfacesInfo map[string]network.InterfaceInfo
}{
{
name: "add three backendNIC to cni Result",
fields: fields{
podName: testPodInfo.PodName,
podNamespace: testPodInfo.PodNamespace,
cnsClient: &MockCNSClient{
require: require,
requestIPs: requestIPsHandler{
ipconfigArgument: cns.IPConfigsRequest{
PodInterfaceID: "testcont-testifname1",
InfraContainerID: "testcontainerid1",
OrchestratorContext: marshallPodInfo(testPodInfo),
},
result: &cns.IPConfigsResponse{
PodIPInfo: []cns.PodIpInfo{
{
PodIPConfig: cns.IPSubnet{
IPAddress: "10.0.1.10",
PrefixLength: 24,
},
NetworkContainerPrimaryIPConfig: cns.IPConfiguration{
IPSubnet: cns.IPSubnet{
IPAddress: "10.0.1.0",
PrefixLength: 24,
},
DNSServers: nil,
GatewayIPAddress: "10.0.0.1",
},
HostPrimaryIPInfo: cns.HostIPInfo{
Gateway: "10.0.0.1",
PrimaryIP: "10.0.0.1",
Subnet: "10.0.0.0/24",
},
NICType: cns.InfraNIC,
},
{
MacAddress: firstMacAddress,
NICType: cns.BackendNIC,
PnPID: firstPnpID,
},
{
MacAddress: secondMacAddress,
NICType: cns.BackendNIC,
PnPID: secondPnpID,
},
{
MacAddress: thirdMacAddress,
NICType: cns.BackendNIC,
PnPID: thirdPnpID,
},
},
Response: cns.Response{
ReturnCode: 0,
Message: "",
},
},
err: nil,
},
},
},
args: args{
nwCfg: &cni.NetworkConfig{},
args: &cniSkel.CmdArgs{
ContainerID: "testcontainerid1",
Netns: "testnetns1",
IfName: "testifname1",
},
hostSubnetPrefix: getCIDRNotationForAddress("10.0.0.1/24"),
options: map[string]interface{}{},
info: []IPResultInfo{
{
pnpID: firstNewPnpID, // update pnp ID
macAddress: firstMacAddress,
nicType: cns.BackendNIC,
},
{
pnpID: secondNewPnpID, // update pnp ID
macAddress: secondMacAddress,
nicType: cns.BackendNIC,
},
{
pnpID: thirdNewPnpID, // update pnp ID
macAddress: thirdMacAddress,
nicType: cns.BackendNIC,
},
},
},
wantSecondaryInterfacesInfo: map[string]network.InterfaceInfo{
firstMacAddress: {
MacAddress: firstParsedMacAddress,
PnPID: firstNewPnpID,
NICType: cns.BackendNIC,
},
secondMacAddress: {
MacAddress: secondParsedMacAddress,
PnPID: secondNewPnpID,
NICType: cns.BackendNIC,
},
thirdMacAddress: {
MacAddress: thirdParsedMacAddress,
PnPID: thirdNewPnpID,
NICType: cns.BackendNIC,
},
},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
invoker := &CNSIPAMInvoker{
podName: tt.fields.podName,
podNamespace: tt.fields.podNamespace,
cnsClient: tt.fields.cnsClient,
}
ipamAddResult, err := invoker.Add(IPAMAddConfig{nwCfg: tt.args.nwCfg, args: tt.args.args, options: tt.args.options})
if err != nil {
t.Fatalf("Failed to create ipamAddResult due to error: %v", err)
}

// add three new backendNICs info to cni Result
err = addBackendNICToResult(&tt.args.info[0], &ipamAddResult, firstMacAddress)
if err != nil {
t.Fatalf("Failed to add first backend NIC to cni Result due to error %v", err)
}
err = addBackendNICToResult(&tt.args.info[1], &ipamAddResult, secondMacAddress)
if err != nil {
t.Fatalf("Failed to add second backend NIC to cni Result due to error %v", err)
}
err = addBackendNICToResult(&tt.args.info[2], &ipamAddResult, thirdMacAddress)
if err != nil {
t.Fatalf("Failed to add third backend NIC to cni Result due to error %v", err)
}

for _, macAddress := range macAddressList {
fmt.Printf("want:%+v\nrest:%+v\n", tt.wantSecondaryInterfacesInfo[macAddress], ipamAddResult.interfaceInfo[macAddress])
require.EqualValues(tt.wantSecondaryInterfacesInfo[macAddress], ipamAddResult.interfaceInfo[macAddress], "incorrect response for IB")
}
})
}
}
Loading