8
"github.com/containers/common/libnetwork/types"
9
"github.com/containers/podman/v5/pkg/specgen"
10
"github.com/stretchr/testify/assert"
11
"github.com/stretchr/testify/require"
17
portMappings = []types.PortMapping{{HostPort: 443, ContainerPort: 8080, Protocol: protoUDP}, {HostPort: 22, ContainerPort: 2222, Protocol: protoTCP}}
18
networks = map[string]types.PerNetworkOptions{"test": {
22
InterfaceName: "eth2",
26
func TestMapSpecCopyPodSpecToInfraContainerSpec(t *testing.T) {
27
infraCommand := []string{"top"}
28
addedHosts := []string{"otherhost"}
29
dnsServers := []net.IP{net.IPv4(10, 0, 0, 1), net.IPv4(8, 8, 8, 8)}
30
dnsOptions := []string{"dns option"}
31
dnsSearch := []string{"dns search"}
32
infraImage := "someimage"
33
conmonPidFile := "/var/run/conmon.pid"
34
podSpec := specgen.PodSpecGenerator{
35
PodBasicConfig: specgen.PodBasicConfig{InfraCommand: infraCommand, InfraImage: infraImage,
36
InfraConmonPidFile: conmonPidFile},
37
PodNetworkConfig: specgen.PodNetworkConfig{
38
PortMappings: portMappings, HostAdd: addedHosts, DNSServer: dnsServers, DNSOption: dnsOptions, DNSSearch: dnsSearch,
39
Networks: networks, NoManageResolvConf: true, NoManageHosts: true},
40
PodCgroupConfig: specgen.PodCgroupConfig{},
41
PodResourceConfig: specgen.PodResourceConfig{},
42
PodStorageConfig: specgen.PodStorageConfig{},
43
PodSecurityConfig: specgen.PodSecurityConfig{},
44
InfraContainerSpec: &specgen.SpecGenerator{},
45
ServiceContainerID: "",
48
mappedSpec, err := MapSpec(&podSpec)
50
assert.NoError(t, err)
52
assert.Equal(t, portMappings, mappedSpec.PortMappings)
53
assert.Equal(t, infraCommand, mappedSpec.Entrypoint)
54
assert.Equal(t, addedHosts, mappedSpec.HostAdd)
55
assert.Equal(t, dnsServers, mappedSpec.DNSServers)
56
assert.Equal(t, dnsOptions, mappedSpec.DNSOptions)
57
assert.Equal(t, dnsSearch, mappedSpec.DNSSearch)
58
require.NotNil(t, mappedSpec.UseImageResolvConf)
59
assert.True(t, *mappedSpec.UseImageResolvConf)
60
assert.Equal(t, networks, mappedSpec.Networks)
61
require.NotNil(t, mappedSpec.UseImageHosts)
62
assert.True(t, *mappedSpec.UseImageHosts)
63
assert.Equal(t, conmonPidFile, mappedSpec.ConmonPidFile)
64
assert.Equal(t, infraImage, mappedSpec.Image)
67
func createPodSpec(mode specgen.NamespaceMode) specgen.PodSpecGenerator {
68
return specgen.PodSpecGenerator{
69
InfraContainerSpec: &specgen.SpecGenerator{},
70
PodNetworkConfig: specgen.PodNetworkConfig{
71
NetNS: specgen.Namespace{NSMode: mode},
76
func createPodSpecWithNetworks(mode specgen.NamespaceMode) specgen.PodSpecGenerator {
77
spec := createPodSpec(mode)
78
spec.InfraContainerSpec.Networks = networks
82
func createPodSpecWithPortMapping(mode specgen.NamespaceMode) specgen.PodSpecGenerator {
83
spec := createPodSpec(mode)
84
spec.InfraContainerSpec.PortMappings = portMappings
88
func createPodSpecWithNetNsPath(path string) specgen.PodSpecGenerator {
89
spec := createPodSpec(specgen.Path)
90
spec.NetNS.Value = path
94
func TestMapSpecNetworkOptions(t *testing.T) {
97
podSpec specgen.PodSpecGenerator
98
expectedNSMode specgen.NamespaceMode
99
expectedNSValue string
100
expectedNetworkOptions map[string][]string
105
podSpec: createPodSpec(specgen.Default),
110
podSpec: createPodSpec(specgen.Bridge),
111
expectedNSMode: specgen.Bridge,
115
podSpec: createPodSpec(specgen.Private),
116
expectedNSMode: specgen.Private,
119
podSpec: createPodSpec(specgen.Host),
120
expectedNSMode: specgen.Host,
123
name: "Host but with port mappings",
124
podSpec: createPodSpecWithPortMapping(specgen.Host),
127
name: "Host but with networks",
128
podSpec: createPodSpecWithNetworks(specgen.Host),
133
podSpec: createPodSpec(specgen.Slirp),
134
expectedNSMode: specgen.Slirp,
137
name: "Slirp but if infra spec NS mode is Host",
138
podSpec: specgen.PodSpecGenerator{
139
InfraContainerSpec: &specgen.SpecGenerator{
140
ContainerNetworkConfig: specgen.ContainerNetworkConfig{NetNS: specgen.Namespace{NSMode: host}},
142
PodNetworkConfig: specgen.PodNetworkConfig{
143
NetNS: specgen.Namespace{NSMode: specgen.Slirp},
146
expectedNSMode: specgen.Host,
150
podSpec: createPodSpecWithNetNsPath("/var/run/netns/bla"),
151
expectedNSMode: specgen.Path,
152
expectedNSValue: "/var/run/netns/bla",
156
podSpec: createPodSpec(specgen.NoNetwork),
157
expectedNSMode: specgen.NoNetwork,
160
name: "NoNetwork but with networks",
161
podSpec: createPodSpecWithNetworks(specgen.NoNetwork),
165
name: "NoNetwork but with port mappings",
166
podSpec: createPodSpecWithPortMapping(specgen.NoNetwork),
170
name: "FromContainer",
171
podSpec: createPodSpec(specgen.FromContainer),
175
podSpec: createPodSpec(specgen.FromPod),
180
for _, tt := range tests {
181
t.Run(tt.name, func(t *testing.T) {
182
mappedSpec, err := MapSpec(&tt.podSpec)
187
assert.NoError(t, err, "error is not nil")
188
assert.Equal(t, tt.expectedNSMode, mappedSpec.NetNS.NSMode)
189
assert.Equal(t, tt.expectedNSValue, mappedSpec.NetNS.Value)
190
assert.Equal(t, tt.expectedNetworkOptions, mappedSpec.NetworkOptions)