Skip to content

Commit 27b0c74

Browse files
authored
Merge pull request #12756 from spowelljr/fixNetworkIndex
fix podman network inspect index check
2 parents 91c9af3 + 016b3ac commit 27b0c74

File tree

2 files changed

+73
-11
lines changed

2 files changed

+73
-11
lines changed

pkg/drivers/kic/oci/network_create.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,14 @@ func dockerNetworkInspect(name string) (netInfo, error) {
212212
return info, nil
213213
}
214214

215+
var podmanInspectGetter = func(name string) (*RunResult, error) {
216+
cmd := exec.Command(Podman, "network", "inspect", name, "--format", `{{range .plugins}}{{if eq .type "bridge"}}{{(index (index .ipam.ranges 0) 0).subnet}},{{(index (index .ipam.ranges 0) 0).gateway}}{{end}}{{end}}`)
217+
return runCmd(cmd)
218+
}
219+
215220
func podmanNetworkInspect(name string) (netInfo, error) {
216221
var info = netInfo{name: name}
217-
cmd := exec.Command(Podman, "network", "inspect", name, "--format", `{{range .plugins}}{{if eq .type "bridge"}}{{(index (index .ipam.ranges 0) 0).subnet}},{{(index (index .ipam.ranges 0) 0).gateway}}{{end}}{{end}}`)
218-
rr, err := runCmd(cmd)
222+
rr, err := podmanInspectGetter(name)
219223
if err != nil {
220224
logDockerNetworkInspect(Podman, name)
221225
if strings.Contains(rr.Output(), "no such network") {
@@ -225,18 +229,15 @@ func podmanNetworkInspect(name string) (netInfo, error) {
225229
return info, err
226230
}
227231

228-
output := rr.Stdout.String()
232+
output := strings.TrimSpace(rr.Stdout.String())
229233
if output == "" {
230234
return info, fmt.Errorf("no bridge network found for %s", name)
231235
}
232236

233237
// results looks like 172.17.0.0/16,172.17.0.1,1500
234-
vals := strings.Split(strings.TrimSpace(output), ",")
235-
if len(vals) == 0 {
236-
return info, fmt.Errorf("empty list network inspect: %q", rr.Output())
237-
}
238+
vals := strings.Split(output, ",")
238239

239-
if len(vals) > 0 {
240+
if len(vals) >= 2 {
240241
info.gateway = net.ParseIP(vals[1])
241242
}
242243

pkg/drivers/kic/oci/network_create_test.go

+64-3
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,76 @@ func TestDockerInspect(t *testing.T) {
6969
}
7070

7171
if netInfo.mtu != tc.mtu {
72-
t.Errorf("Expected not to have MTU as %v but got %v", tc.mtu, netInfo.mtu)
72+
t.Errorf("Expected MTU to be %v but got %v", tc.mtu, netInfo.mtu)
7373
}
7474

7575
if !netInfo.gateway.Equal(net.ParseIP(tc.gateway)) {
76-
t.Errorf("Expected not to have gateway as %v but got %v", tc.gateway, netInfo.gateway)
76+
t.Errorf("Expected gateway to be %v but got %v", tc.gateway, netInfo.gateway)
7777
}
7878

7979
if !netInfo.subnet.IP.Equal(net.ParseIP(tc.subnetIP)) {
80-
t.Errorf("Expected not to have subnet as %v but got %v", tc.subnetIP, netInfo.gateway)
80+
t.Errorf("Expected subnet to be %v but got %v", tc.subnetIP, netInfo.subnet.IP)
81+
}
82+
})
83+
}
84+
}
85+
86+
var podmanResponse string
87+
var podmanInspectGetterMock = func(name string) (*RunResult, error) {
88+
var responseInBytes bytes.Buffer
89+
responseInBytes.WriteString(podmanResponse)
90+
response := &RunResult{Stdout: responseInBytes}
91+
92+
return response, nil
93+
}
94+
95+
func TestPodmanInspect(t *testing.T) {
96+
var emptyGateway net.IP
97+
gateway := net.ParseIP("172.17.0.1")
98+
_, subnetIP, err := net.ParseCIDR("172.17.0.0/16")
99+
if err != nil {
100+
t.Fatalf("failed to parse CIDR: %v", err)
101+
}
102+
103+
var tests = []struct {
104+
name string
105+
podmanInspectResponse string
106+
gateway net.IP
107+
subnetIP string
108+
}{
109+
{
110+
name: "WithGateway",
111+
podmanInspectResponse: "172.17.0.0/16,172.17.0.1",
112+
gateway: gateway,
113+
subnetIP: subnetIP.String(),
114+
},
115+
{
116+
name: "WithoutGateway",
117+
podmanInspectResponse: "172.17.0.0/16",
118+
gateway: emptyGateway,
119+
subnetIP: subnetIP.String(),
120+
},
121+
}
122+
123+
for _, tc := range tests {
124+
t.Run(tc.name, func(t *testing.T) {
125+
podmanInspectResponse := tc.podmanInspectResponse
126+
127+
// setting up mock funcs
128+
podmanResponse = podmanInspectResponse
129+
podmanInspectGetter = podmanInspectGetterMock
130+
131+
netInfo, err := podmanNetworkInspect("m2")
132+
if err != nil {
133+
t.Errorf("Expected not to have error but got %v", err)
134+
}
135+
136+
if !netInfo.gateway.Equal(tc.gateway) {
137+
t.Errorf("Expected gateway to be %v but got %v", tc.gateway, netInfo.gateway)
138+
}
139+
140+
if netInfo.subnet.String() != tc.subnetIP {
141+
t.Errorf("Expected subnet to be %v but got %v", tc.subnetIP, netInfo.subnet)
81142
}
82143
})
83144
}

0 commit comments

Comments
 (0)