@@ -17,6 +17,11 @@ limitations under the License.
17
17
package reset
18
18
19
19
import (
20
+ "bytes"
21
+ _ "embed"
22
+ "fmt"
23
+ "io"
24
+ "strings"
20
25
"testing"
21
26
22
27
testifysuite "github.com/stretchr/testify/suite"
@@ -28,11 +33,14 @@ type suite struct {
28
33
common.BootlooseSuite
29
34
}
30
35
36
+ //go:embed clutter-data-dir.sh
37
+ var clutterScript []byte
38
+
31
39
func (s * suite ) TestReset () {
32
40
ctx := s .Context ()
33
41
workerNode := s .WorkerNode (0 )
34
42
35
- if ok := s .Run ("k0s gets up" , func () {
43
+ if ! s .Run ("k0s gets up" , func () {
36
44
s .Require ().NoError (s .InitController (0 , "--disable-components=konnectivity-server,metrics-server" ))
37
45
s .Require ().NoError (s .RunWorkers ())
38
46
@@ -44,11 +52,7 @@ func (s *suite) TestReset() {
44
52
45
53
s .T ().Log ("waiting to see CNI pods ready" )
46
54
s .NoError (common .WaitForKubeRouterReady (ctx , kc ), "CNI did not start" )
47
- }); ! ok {
48
- return
49
- }
50
55
51
- s .Run ("k0s reset" , func () {
52
56
ssh , err := s .SSH (ctx , workerNode )
53
57
s .Require ().NoError (err )
54
58
defer ssh .Disconnect ()
@@ -57,14 +61,47 @@ func (s *suite) TestReset() {
57
61
s .NoError (ssh .Exec (ctx , "test -d /run/k0s" , common.SSHStreams {}), "/run/k0s is not a directory" )
58
62
59
63
s .NoError (ssh .Exec (ctx , "pidof containerd-shim-runc-v2 >&2" , common.SSHStreams {}), "Expected some running containerd shims" )
64
+ }) {
65
+ return
66
+ }
60
67
68
+ var clutteringPaths bytes.Buffer
69
+
70
+ if ! s .Run ("prepare k0s reset" , func () {
61
71
s .NoError (s .StopWorker (workerNode ), "Failed to stop k0s" )
62
72
73
+ ssh , err := s .SSH (ctx , workerNode )
74
+ s .Require ().NoError (err )
75
+ defer ssh .Disconnect ()
76
+
77
+ streams , flushStreams := common .TestLogStreams (s .T (), "clutter data dir" )
78
+ streams .In = bytes .NewReader (clutterScript )
79
+ streams .Out = io .MultiWriter (& clutteringPaths , streams .Out )
80
+ err = ssh .Exec (ctx , "sh -s -- /var/lib/k0s" , streams )
81
+ flushStreams ()
82
+ s .Require ().NoError (err )
83
+ }) {
84
+ return
85
+ }
86
+
87
+ s .Run ("k0s reset" , func () {
88
+ ssh , err := s .SSH (ctx , workerNode )
89
+ s .Require ().NoError (err )
90
+ defer ssh .Disconnect ()
91
+
63
92
streams , flushStreams := common .TestLogStreams (s .T (), "reset" )
64
93
err = ssh .Exec (ctx , "k0s reset --debug" , streams )
65
94
flushStreams ()
66
95
s .NoError (err , "k0s reset didn't exit cleanly" )
67
96
97
+ for _ , path := range strings .Split (string (bytes .TrimSpace (clutteringPaths .Bytes ())), "\n " ) {
98
+ if strings .HasPrefix (path , "/var/lib/k0s" ) {
99
+ s .NoError (ssh .Exec (ctx , fmt .Sprintf ("! test -e %q" , path ), common.SSHStreams {}), "Failed to verify non-existence of %s" , path )
100
+ } else {
101
+ s .NoError (ssh .Exec (ctx , fmt .Sprintf ("test -e %q" , path ), common.SSHStreams {}), "Failed to verify existence of %s" , path )
102
+ }
103
+ }
104
+
68
105
// /var/lib/k0s is a mount point in the Docker container and can't be deleted, so it must be empty
69
106
s .NoError (ssh .Exec (ctx , `x="$(ls -A /var/lib/k0s)" && echo "$x" >&2 && [ -z "$x" ]` , common.SSHStreams {}), "/var/lib/k0s is not empty" )
70
107
s .NoError (ssh .Exec (ctx , "! test -e /run/k0s" , common.SSHStreams {}), "/run/k0s still exists" )
0 commit comments