Files
podman/libpod/networking_linux_test.go
Brent Baude 2cc3be7332 RUN-4539: Change podman module paths
The podman module paths are moving from github.com/containers/podman to
go.podman.io/podman.  This will help with future mobility.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2026-04-22 14:02:25 -05:00

215 lines
4.9 KiB
Go

//go:build !remote
package libpod
import (
"net"
"reflect"
"testing"
"go.podman.io/common/libnetwork/types"
"go.podman.io/podman/v6/libpod/define"
)
func Test_resultToBasicNetworkConfig(t *testing.T) {
testCases := []struct {
description string
inputResult types.StatusBlock
expectedNetworkConfig define.InspectBasicNetworkConfig
}{
{
description: "single secondary IPv4 address is shown as define.Address",
inputResult: types.StatusBlock{
Interfaces: map[string]types.NetInterface{
"eth1": {
Subnets: []types.NetAddress{
{
Gateway: net.ParseIP("172.26.0.1"),
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("172.26.0.2"),
Mask: net.CIDRMask(20, 32),
},
},
},
{
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("172.26.0.3"),
Mask: net.CIDRMask(10, 32),
},
},
},
},
},
},
},
expectedNetworkConfig: define.InspectBasicNetworkConfig{
IPAddress: "172.26.0.2",
IPPrefixLen: 20,
Gateway: "172.26.0.1",
SecondaryIPAddresses: []define.Address{
{
Addr: "172.26.0.3",
PrefixLength: 10,
},
},
},
},
{
description: "multiple secondary IPv4 addresses are shown as define.Address",
inputResult: types.StatusBlock{
Interfaces: map[string]types.NetInterface{
"eth1": {
Subnets: []types.NetAddress{
{
Gateway: net.ParseIP("172.26.0.1"),
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("172.26.0.2"),
Mask: net.CIDRMask(20, 32),
},
},
},
{
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("172.26.0.3"),
Mask: net.CIDRMask(10, 32),
},
},
},
{
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("172.26.0.4"),
Mask: net.CIDRMask(24, 32),
},
},
},
},
},
},
},
expectedNetworkConfig: define.InspectBasicNetworkConfig{
IPAddress: "172.26.0.2",
IPPrefixLen: 20,
Gateway: "172.26.0.1",
SecondaryIPAddresses: []define.Address{
{
Addr: "172.26.0.3",
PrefixLength: 10,
},
{
Addr: "172.26.0.4",
PrefixLength: 24,
},
},
},
},
{
description: "single secondary IPv6 address is shown as define.Address",
inputResult: types.StatusBlock{
Interfaces: map[string]types.NetInterface{
"eth1": {
Subnets: []types.NetAddress{
{
Gateway: net.ParseIP("ff02::fb"),
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("ff02::fc"),
Mask: net.CIDRMask(20, 128),
},
},
},
{
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("ff02::fd"),
Mask: net.CIDRMask(10, 128),
},
},
},
},
},
},
},
expectedNetworkConfig: define.InspectBasicNetworkConfig{
GlobalIPv6Address: "ff02::fc",
GlobalIPv6PrefixLen: 20,
IPv6Gateway: "ff02::fb",
SecondaryIPv6Addresses: []define.Address{
{
Addr: "ff02::fd",
PrefixLength: 10,
},
},
},
},
{
description: "multiple secondary IPv6 addresses are shown as define.Address",
inputResult: types.StatusBlock{
Interfaces: map[string]types.NetInterface{
"eth1": {
Subnets: []types.NetAddress{
{
Gateway: net.ParseIP("ff02::fb"),
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("ff02::fc"),
Mask: net.CIDRMask(20, 128),
},
},
},
{
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("ff02::fd"),
Mask: net.CIDRMask(10, 128),
},
},
},
{
IPNet: types.IPNet{
IPNet: net.IPNet{
IP: net.ParseIP("ff02::fe"),
Mask: net.CIDRMask(24, 128),
},
},
},
},
},
},
},
expectedNetworkConfig: define.InspectBasicNetworkConfig{
GlobalIPv6Address: "ff02::fc",
GlobalIPv6PrefixLen: 20,
IPv6Gateway: "ff02::fb",
SecondaryIPv6Addresses: []define.Address{
{
Addr: "ff02::fd",
PrefixLength: 10,
},
{
Addr: "ff02::fe",
PrefixLength: 24,
},
},
},
},
}
for _, tcl := range testCases {
tc := tcl
t.Run(tc.description, func(t *testing.T) {
t.Parallel()
actualNetworkConfig := resultToBasicNetworkConfig(tc.inputResult)
if !reflect.DeepEqual(tc.expectedNetworkConfig, actualNetworkConfig) {
t.Fatalf(
"Expected networkConfig %+v didn't match actual value %+v", tc.expectedNetworkConfig, actualNetworkConfig)
}
})
}
}