mirror of
https://github.com/containers/podman
synced 2024-10-22 10:13:33 +00:00
e7a72d72fd
enable the ipv6 flag in podman network to be able to create
dual-stack networks for containers.
This is required to be compatible with docker, where --ipv6
really means dual stack.
podman, unlike docker, support IPv6 only containers since
07e3f1bba9
.
Signed-off-by: Antonio Ojea <aojea@redhat.com>
109 lines
2.6 KiB
Go
109 lines
2.6 KiB
Go
package network
|
|
|
|
import (
|
|
"net"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestNewIPAMDefaultRoute(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
name string
|
|
isIPv6 bool
|
|
want IPAMRoute
|
|
}{
|
|
{
|
|
name: "IPv4 default route",
|
|
isIPv6: false,
|
|
want: IPAMRoute{defaultIPv4Route},
|
|
},
|
|
{
|
|
name: "IPv6 default route",
|
|
isIPv6: true,
|
|
want: IPAMRoute{defaultIPv6Route},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := NewIPAMDefaultRoute(tt.isIPv6)
|
|
if err != nil {
|
|
t.Errorf("no error expected: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("NewIPAMDefaultRoute() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNewIPAMLocalHostRange(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
subnet *net.IPNet
|
|
ipRange *net.IPNet
|
|
gw net.IP
|
|
want []IPAMLocalHostRangeConf
|
|
}{
|
|
{
|
|
name: "IPv4 subnet",
|
|
subnet: &net.IPNet{IP: net.IPv4(192, 168, 0, 0), Mask: net.IPv4Mask(255, 255, 255, 0)},
|
|
want: []IPAMLocalHostRangeConf{
|
|
{
|
|
Subnet: "192.168.0.0/24",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "IPv4 subnet, range and gateway",
|
|
subnet: &net.IPNet{IP: net.IPv4(192, 168, 0, 0), Mask: net.IPv4Mask(255, 255, 255, 0)},
|
|
ipRange: &net.IPNet{IP: net.IPv4(192, 168, 0, 128), Mask: net.IPv4Mask(255, 255, 255, 128)},
|
|
gw: net.ParseIP("192.168.0.10"),
|
|
want: []IPAMLocalHostRangeConf{
|
|
{
|
|
Subnet: "192.168.0.0/24",
|
|
RangeStart: "192.168.0.129",
|
|
RangeEnd: "192.168.0.255",
|
|
Gateway: "192.168.0.10",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "IPv6 subnet",
|
|
subnet: &net.IPNet{IP: net.ParseIP("2001:DB8::"), Mask: net.IPMask(net.ParseIP("ffff:ffff:ffff::"))},
|
|
want: []IPAMLocalHostRangeConf{
|
|
{
|
|
Subnet: "2001:db8::/48",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "IPv6 subnet, range and gateway",
|
|
subnet: &net.IPNet{IP: net.ParseIP("2001:DB8::"), Mask: net.IPMask(net.ParseIP("ffff:ffff:ffff::"))},
|
|
ipRange: &net.IPNet{IP: net.ParseIP("2001:DB8:1:1::"), Mask: net.IPMask(net.ParseIP("ffff:ffff:ffff:ffff::"))},
|
|
gw: net.ParseIP("2001:DB8::2"),
|
|
want: []IPAMLocalHostRangeConf{
|
|
{
|
|
Subnet: "2001:db8::/48",
|
|
RangeStart: "2001:db8:1:1::1",
|
|
RangeEnd: "2001:db8:1:1:ffff:ffff:ffff:ffff",
|
|
Gateway: "2001:db8::2",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := NewIPAMLocalHostRange(tt.subnet, tt.ipRange, tt.gw)
|
|
if err != nil {
|
|
t.Errorf("no error expected: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("NewIPAMLocalHostRange() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|