Skip to content

Commit 3c0176b

Browse files
committed
pkg/machine/e2e: fix broken cleanup
Currently all podman machine rm errors in AfterEach were ignored. This means some leaked and caused issues later on, see #22844. To fix it first rework the logic to only remove machines when needed at the place were they are created using DeferCleanup(), however DeferCleanup() does not work well together with AfterEach() as it always run AfterEach() before DeferCleanup(). As AfterEach() deletes the dir the podman machine rm call can not be done afterwards. As such migrate all cleanup to use DeferCleanup() and while I have to touch this fix the code to remove the per file duplciation and define the setup/cleanup once in the global scope. Signed-off-by: Paul Holzinger <[email protected]>
1 parent f84f4a9 commit 3c0176b

16 files changed

+36
-163
lines changed

Diff for: pkg/machine/e2e/basic_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,6 @@ import (
1818
)
1919

2020
var _ = Describe("run basic podman commands", func() {
21-
var (
22-
mb *machineTestBuilder
23-
testDir string
24-
)
25-
26-
BeforeEach(func() {
27-
testDir, mb = setup()
28-
})
29-
AfterEach(func() {
30-
teardown(originalHomeDir, testDir, mb)
31-
})
3221

3322
It("Basic ops", func() {
3423
// golangci-lint has trouble with actually skipping tests marked Skip

Diff for: pkg/machine/e2e/config_init_test.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ package e2e_test
22

33
import (
44
"strconv"
5+
"strings"
6+
7+
. "github.com/onsi/ginkgo/v2"
8+
. "github.com/onsi/gomega"
9+
. "github.com/onsi/gomega/gexec"
510
)
611

712
type initMachine struct {
@@ -71,7 +76,24 @@ func (i *initMachine) buildCmd(m *machineTestBuilder) []string {
7176
if i.userModeNetworking {
7277
cmd = append(cmd, "--user-mode-networking")
7378
}
74-
cmd = append(cmd, m.name)
79+
name := m.name
80+
cmd = append(cmd, name)
81+
82+
// when we create a new VM remove it again as cleanup
83+
DeferCleanup(func() {
84+
r := new(rmMachine)
85+
session, err := m.setName(name).setCmd(r.withForce()).run()
86+
Expect(err).ToNot(HaveOccurred(), "error occurred rm'ing machine")
87+
// Some test create a invalid VM so the VM does not exists in this case we have to ignore the error.
88+
// It would be much better if rm -f would behave like other commands and ignore not exists errors.
89+
if session.ExitCode() == 125 {
90+
if strings.Contains(session.errorToString(), "VM does not exist") {
91+
return
92+
}
93+
}
94+
Expect(session).To(Exit(0))
95+
})
96+
7597
i.cmd = cmd
7698
return cmd
7799
}

Diff for: pkg/machine/e2e/info_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,6 @@ import (
1111
)
1212

1313
var _ = Describe("podman machine info", func() {
14-
var (
15-
mb *machineTestBuilder
16-
testDir string
17-
)
18-
19-
BeforeEach(func() {
20-
testDir, mb = setup()
21-
})
22-
AfterEach(func() {
23-
teardown(originalHomeDir, testDir, mb)
24-
})
2514

2615
It("machine info", func() {
2716
info := new(infoMachine)

Diff for: pkg/machine/e2e/init_test.go

-12
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,6 @@ import (
2020
)
2121

2222
var _ = Describe("podman machine init", func() {
23-
var (
24-
mb *machineTestBuilder
25-
testDir string
26-
)
27-
28-
BeforeEach(func() {
29-
testDir, mb = setup()
30-
})
31-
AfterEach(func() {
32-
teardown(originalHomeDir, testDir, mb)
33-
})
34-
3523
cpus := runtime.NumCPU() / 2
3624
if cpus == 0 {
3725
cpus = 1

Diff for: pkg/machine/e2e/init_windows_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,6 @@ import (
1515
)
1616

1717
var _ = Describe("podman machine init - windows only", func() {
18-
var (
19-
mb *machineTestBuilder
20-
testDir string
21-
)
22-
23-
BeforeEach(func() {
24-
testDir, mb = setup()
25-
})
26-
AfterEach(func() {
27-
teardown(originalHomeDir, testDir, mb)
28-
})
2918

3019
It("init with user mode networking", func() {
3120
if testProvider.VMType() != define.WSLVirt {

Diff for: pkg/machine/e2e/inspect_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,6 @@ import (
1111
)
1212

1313
var _ = Describe("podman inspect stop", func() {
14-
var (
15-
mb *machineTestBuilder
16-
testDir string
17-
)
18-
19-
BeforeEach(func() {
20-
testDir, mb = setup()
21-
})
22-
AfterEach(func() {
23-
teardown(originalHomeDir, testDir, mb)
24-
})
2514

2615
It("inspect bad name", func() {
2716
i := inspectMachine{}

Diff for: pkg/machine/e2e/list_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,6 @@ import (
1414
)
1515

1616
var _ = Describe("podman machine list", func() {
17-
var (
18-
mb *machineTestBuilder
19-
testDir string
20-
)
21-
22-
BeforeEach(func() {
23-
testDir, mb = setup()
24-
})
25-
AfterEach(func() {
26-
teardown(originalHomeDir, testDir, mb)
27-
})
2817

2918
It("list machine", func() {
3019
list := new(listMachine)

Diff for: pkg/machine/e2e/machine_test.go

+13-8
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,7 @@ func setup() (string, *machineTestBuilder) {
131131
return homeDir, mb
132132
}
133133

134-
func teardown(origHomeDir string, testDir string, mb *machineTestBuilder) {
135-
r := new(rmMachine)
136-
for _, name := range mb.names {
137-
if _, err := mb.setName(name).setCmd(r.withForce()).run(); err != nil {
138-
GinkgoWriter.Printf("error occurred rm'ing machine: %q\n", err)
139-
}
140-
}
141-
134+
func teardown(origHomeDir string, testDir string) {
142135
if err := utils.GuardedRemoveAll(testDir); err != nil {
143136
Fail(fmt.Sprintf("failed to remove test dir: %q", err))
144137
}
@@ -153,6 +146,18 @@ func teardown(origHomeDir string, testDir string, mb *machineTestBuilder) {
153146
}
154147
}
155148

149+
var (
150+
mb *machineTestBuilder
151+
testDir string
152+
)
153+
154+
var _ = BeforeEach(func() {
155+
testDir, mb = setup()
156+
DeferCleanup(func() {
157+
teardown(originalHomeDir, testDir)
158+
})
159+
})
160+
156161
func setTmpDir(value string) (string, error) {
157162
switch {
158163
case runtime.GOOS != "darwin":

Diff for: pkg/machine/e2e/os_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,6 @@ package e2e_test
77
// )
88

99
// var _ = Describe("podman machine os apply", func() {
10-
// var (
11-
// mb *machineTestBuilder
12-
// testDir string
13-
// )
14-
15-
// BeforeEach(func() {
16-
// testDir, mb = setup()
17-
// })
18-
// AfterEach(func() {
19-
// teardown(originalHomeDir, testDir, mb)
20-
// })
2110

2211
// It("apply machine", func() {
2312
// i := new(initMachine)

Diff for: pkg/machine/e2e/proxy_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,6 @@ import (
1111
)
1212

1313
var _ = Describe("podman machine proxy settings propagation", func() {
14-
var (
15-
mb *machineTestBuilder
16-
testDir string
17-
)
18-
19-
BeforeEach(func() {
20-
testDir, mb = setup()
21-
})
22-
AfterEach(func() {
23-
teardown(originalHomeDir, testDir, mb)
24-
})
2514

2615
It("ssh to running machine and check proxy settings", func() {
2716
defer func() {

Diff for: pkg/machine/e2e/reset_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,6 @@ import (
77
)
88

99
var _ = Describe("podman machine reset", func() {
10-
var (
11-
mb *machineTestBuilder
12-
testDir string
13-
)
14-
15-
BeforeEach(func() {
16-
testDir, mb = setup()
17-
})
18-
AfterEach(func() {
19-
teardown(originalHomeDir, testDir, mb)
20-
})
2110

2211
It("starting from scratch should not error", func() {
2312
i := resetMachine{}

Diff for: pkg/machine/e2e/rm_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,6 @@ import (
1212
)
1313

1414
var _ = Describe("podman machine rm", func() {
15-
var (
16-
mb *machineTestBuilder
17-
testDir string
18-
)
19-
20-
BeforeEach(func() {
21-
testDir, mb = setup()
22-
})
23-
AfterEach(func() {
24-
teardown(originalHomeDir, testDir, mb)
25-
})
2615

2716
It("bad init name", func() {
2817
i := rmMachine{}

Diff for: pkg/machine/e2e/set_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,6 @@ import (
1313
)
1414

1515
var _ = Describe("podman machine set", func() {
16-
var (
17-
mb *machineTestBuilder
18-
testDir string
19-
)
20-
21-
BeforeEach(func() {
22-
testDir, mb = setup()
23-
})
24-
AfterEach(func() {
25-
teardown(originalHomeDir, testDir, mb)
26-
})
2716

2817
It("set machine cpus, disk, memory", func() {
2918
skipIfWSL("WSL cannot change set properties of disk, processor, or memory")

Diff for: pkg/machine/e2e/ssh_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,6 @@ import (
88
)
99

1010
var _ = Describe("podman machine ssh", func() {
11-
var (
12-
mb *machineTestBuilder
13-
testDir string
14-
)
15-
16-
BeforeEach(func() {
17-
testDir, mb = setup()
18-
})
19-
AfterEach(func() {
20-
teardown(originalHomeDir, testDir, mb)
21-
})
2211

2312
It("bad machine name", func() {
2413
name := randomString()

Diff for: pkg/machine/e2e/start_test.go

-10
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,6 @@ import (
1414
)
1515

1616
var _ = Describe("podman machine start", func() {
17-
var (
18-
mb *machineTestBuilder
19-
testDir string
20-
)
21-
BeforeEach(func() {
22-
testDir, mb = setup()
23-
})
24-
AfterEach(func() {
25-
teardown(originalHomeDir, testDir, mb)
26-
})
2717

2818
It("start simple machine", func() {
2919
i := new(initMachine)

Diff for: pkg/machine/e2e/stop_test.go

-11
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,6 @@ import (
1010
)
1111

1212
var _ = Describe("podman machine stop", func() {
13-
var (
14-
mb *machineTestBuilder
15-
testDir string
16-
)
17-
18-
BeforeEach(func() {
19-
testDir, mb = setup()
20-
})
21-
AfterEach(func() {
22-
teardown(originalHomeDir, testDir, mb)
23-
})
2413

2514
It("stop bad name", func() {
2615
i := stopMachine{}

0 commit comments

Comments
 (0)