mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-10-22 12:29:49 +00:00
Refactor these functions so differernt types of endpoints can use a unified function to hotplug nics. Fixes #731 Signed-off-by: Ruidong Cao <caoruidong@huawei.com>
107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
// Copyright (c) 2018 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package virtcontainers
|
|
|
|
import (
|
|
"net"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestCreateVethNetworkEndpoint(t *testing.T) {
|
|
macAddr := net.HardwareAddr{0x02, 0x00, 0xCA, 0xFE, 0x00, 0x04}
|
|
|
|
expected := &VethEndpoint{
|
|
NetPair: NetworkInterfacePair{
|
|
TapInterface: TapInterface{
|
|
ID: "uniqueTestID-4",
|
|
Name: "br4_kata",
|
|
TAPIface: NetworkInterface{
|
|
Name: "tap4_kata",
|
|
},
|
|
},
|
|
VirtIface: NetworkInterface{
|
|
Name: "eth4",
|
|
HardAddr: macAddr.String(),
|
|
},
|
|
NetInterworkingModel: DefaultNetInterworkingModel,
|
|
},
|
|
EndpointType: VethEndpointType,
|
|
}
|
|
|
|
result, err := createVethNetworkEndpoint(4, "", DefaultNetInterworkingModel)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// the resulting ID will be random - so let's overwrite to test the rest of the flow
|
|
result.NetPair.ID = "uniqueTestID-4"
|
|
|
|
// the resulting mac address will be random - so lets overwrite it
|
|
result.NetPair.VirtIface.HardAddr = macAddr.String()
|
|
|
|
if reflect.DeepEqual(result, expected) == false {
|
|
t.Fatalf("\nGot: %+v, \n\nExpected: %+v", result, expected)
|
|
}
|
|
}
|
|
|
|
func TestCreateVethNetworkEndpointChooseIfaceName(t *testing.T) {
|
|
macAddr := net.HardwareAddr{0x02, 0x00, 0xCA, 0xFE, 0x00, 0x04}
|
|
|
|
expected := &VethEndpoint{
|
|
NetPair: NetworkInterfacePair{
|
|
TapInterface: TapInterface{
|
|
ID: "uniqueTestID-4",
|
|
Name: "br4_kata",
|
|
TAPIface: NetworkInterface{
|
|
Name: "tap4_kata",
|
|
},
|
|
},
|
|
VirtIface: NetworkInterface{
|
|
Name: "eth1",
|
|
HardAddr: macAddr.String(),
|
|
},
|
|
NetInterworkingModel: DefaultNetInterworkingModel,
|
|
},
|
|
EndpointType: VethEndpointType,
|
|
}
|
|
|
|
result, err := createVethNetworkEndpoint(4, "eth1", DefaultNetInterworkingModel)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// the resulting ID will be random - so let's overwrite to test the rest of the flow
|
|
result.NetPair.ID = "uniqueTestID-4"
|
|
|
|
// the resulting mac address will be random - so lets overwrite it
|
|
result.NetPair.VirtIface.HardAddr = macAddr.String()
|
|
|
|
if reflect.DeepEqual(result, expected) == false {
|
|
t.Fatalf("\nGot: %+v, \n\nExpected: %+v", result, expected)
|
|
}
|
|
}
|
|
|
|
func TestCreateVethNetworkEndpointInvalidArgs(t *testing.T) {
|
|
type endpointValues struct {
|
|
idx int
|
|
ifName string
|
|
}
|
|
|
|
// all elements are expected to result in failure
|
|
failingValues := []endpointValues{
|
|
{-1, "bar"},
|
|
{-1, ""},
|
|
}
|
|
|
|
for _, d := range failingValues {
|
|
result, err := createVethNetworkEndpoint(d.idx, d.ifName, DefaultNetInterworkingModel)
|
|
if err == nil {
|
|
t.Fatalf("expected invalid endpoint for %v, got %v", d, result)
|
|
}
|
|
}
|
|
}
|