Skip to content

Commit be35453

Browse files
ErikJiangbrandond
authored andcommitted
Add etcdmigration e2e test
Signed-off-by: bo.jiang <[email protected]>
1 parent db778fa commit be35453

File tree

2 files changed

+105
-28
lines changed

2 files changed

+105
-28
lines changed

tests/e2e/startup/startup_test.go

Lines changed: 84 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -63,27 +63,6 @@ func StartK3sCluster(nodes []e2e.VagrantNode, serverYAML string, agentYAML strin
6363
return nil
6464
}
6565

66-
func KillK3sCluster(nodes []e2e.VagrantNode) error {
67-
for _, node := range nodes {
68-
if _, err := node.RunCmdOnNode("k3s-killall.sh"); err != nil {
69-
return err
70-
}
71-
if _, err := node.RunCmdOnNode("sh -c 'docker ps -qa | xargs -r docker rm -fv'"); err != nil {
72-
return err
73-
}
74-
if _, err := node.RunCmdOnNode("rm -rf /etc/rancher/k3s/config.yaml.d /var/lib/kubelet/pods /var/lib/rancher/k3s/agent/etc /var/lib/rancher/k3s/agent/containerd /var/lib/rancher/k3s/server/db /var/log/pods /run/k3s /run/flannel"); err != nil {
75-
return err
76-
}
77-
if _, err := node.RunCmdOnNode("systemctl restart containerd docker"); err != nil {
78-
return err
79-
}
80-
if _, err := node.RunCmdOnNode("journalctl --flush --sync --rotate --vacuum-size=1"); err != nil {
81-
return err
82-
}
83-
}
84-
return nil
85-
}
86-
8766
var _ = ReportAfterEach(e2e.GenReport)
8867

8968
var _ = BeforeSuite(func() {
@@ -157,10 +136,87 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
157136
})
158137

159138
It("Kills the cluster", func() {
160-
err := KillK3sCluster(tc.AllNodes())
139+
err := e2e.KillK3sCluster(tc.AllNodes())
140+
Expect(err).NotTo(HaveOccurred())
141+
})
142+
})
143+
144+
Context("Verify SQLite to Etcd migration", func() {
145+
It("Starts up with SQLite and checks status", func() {
146+
err := StartK3sCluster(tc.AllNodes(), "", "")
147+
Expect(err).NotTo(HaveOccurred(), e2e.GetVagrantLog(err))
148+
149+
By("CLUSTER CONFIG")
150+
By("OS:" + *nodeOS)
151+
By(tc.Status())
152+
tc.KubeconfigFile, err = e2e.GenKubeconfigFile(tc.Servers[0].String())
153+
Expect(err).NotTo(HaveOccurred())
154+
155+
By("Fetching node status")
156+
Eventually(func() error {
157+
return tests.NodesReady(tc.KubeconfigFile, e2e.VagrantSlice(tc.AllNodes()))
158+
}, "600s", "5s").Should(Succeed())
159+
Eventually(func() error {
160+
return tests.AllPodsUp(tc.KubeconfigFile)
161+
}, "600s", "5s").Should(Succeed())
162+
Eventually(func() error {
163+
return tests.CheckDefaultDeployments(tc.KubeconfigFile)
164+
}, "480s", "10s").Should(Succeed())
165+
e2e.DumpPods(tc.KubeconfigFile)
166+
})
167+
168+
It("Creates test resources before migration", func() {
169+
createCmd := "kubectl create configmap migration-test --from-literal=test=before-migration"
170+
_, err := tc.Servers[0].RunCmdOnNode(createCmd)
171+
Expect(err).NotTo(HaveOccurred())
172+
173+
getCmd := "kubectl get configmap migration-test -o jsonpath='{.data.test}'"
174+
result, err := tc.Servers[0].RunCmdOnNode(getCmd)
175+
Expect(err).NotTo(HaveOccurred())
176+
Expect(result).To(ContainSubstring("before-migration"))
177+
})
178+
179+
It("Migrates from SQLite to etcd", func() {
180+
configCmd := "echo 'cluster-init: true' >> /etc/rancher/k3s/config.yaml"
181+
_, err := tc.Servers[0].RunCmdOnNode(configCmd)
182+
Expect(err).NotTo(HaveOccurred())
183+
184+
Expect(e2e.RestartCluster(tc.Servers)).To(Succeed())
185+
Expect(e2e.RestartCluster(tc.Agents)).To(Succeed())
186+
187+
Eventually(func() (string, error) {
188+
cmd := "kubectl get nodes -l node-role.kubernetes.io/etcd=true"
189+
return tc.Servers[0].RunCmdOnNode(cmd)
190+
}, "120s", "5s").Should(ContainSubstring(tc.Servers[0].String()))
191+
})
192+
193+
It("Checks node and pod status after migration", func() {
194+
By("Fetching node status after migration")
195+
Eventually(func() error {
196+
return tests.NodesReady(tc.KubeconfigFile, e2e.VagrantSlice(tc.AllNodes()))
197+
}, "600s", "5s").Should(Succeed())
198+
Eventually(func() error {
199+
return tests.AllPodsUp(tc.KubeconfigFile)
200+
}, "600s", "5s").Should(Succeed())
201+
Eventually(func() error {
202+
return tests.CheckDefaultDeployments(tc.KubeconfigFile)
203+
}, "480s", "10s").Should(Succeed())
204+
e2e.DumpPods(tc.KubeconfigFile)
205+
})
206+
207+
It("Verifies data persistence after migration", func() {
208+
getCmd := "kubectl get configmap migration-test -o jsonpath='{.data.test}'"
209+
result, err := tc.Servers[0].RunCmdOnNode(getCmd)
210+
Expect(err).NotTo(HaveOccurred())
211+
Expect(result).To(ContainSubstring("before-migration"))
212+
})
213+
214+
It("Kills the cluster", func() {
215+
err := e2e.KillK3sCluster(tc.AllNodes())
161216
Expect(err).NotTo(HaveOccurred())
162217
})
163218
})
219+
164220
Context("Verify kubelet config file", func() {
165221
It("Starts K3s with no issues", func() {
166222
for _, node := range tc.AllNodes() {
@@ -203,7 +259,7 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
203259
})
204260

205261
It("Kills the cluster", func() {
206-
err := KillK3sCluster(tc.AllNodes())
262+
err := e2e.KillK3sCluster(tc.AllNodes())
207263
Expect(err).NotTo(HaveOccurred())
208264
})
209265
})
@@ -234,7 +290,7 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
234290
e2e.DumpPods(tc.KubeconfigFile)
235291
})
236292
It("Kills the cluster", func() {
237-
err := KillK3sCluster(tc.AllNodes())
293+
err := e2e.KillK3sCluster(tc.AllNodes())
238294
Expect(err).NotTo(HaveOccurred())
239295
})
240296
})
@@ -306,7 +362,7 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
306362
})
307363

308364
It("Kills the cluster", func() {
309-
err := KillK3sCluster(tc.AllNodes())
365+
err := e2e.KillK3sCluster(tc.AllNodes())
310366
Expect(err).NotTo(HaveOccurred())
311367
})
312368
})
@@ -338,7 +394,7 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
338394
}, "120s", "5s").Should(ContainSubstring("rancher/shell"))
339395
})
340396
It("Kills the cluster", func() {
341-
err := KillK3sCluster(tc.AllNodes())
397+
err := e2e.KillK3sCluster(tc.AllNodes())
342398
Expect(err).NotTo(HaveOccurred())
343399
})
344400
})
@@ -355,7 +411,7 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
355411

356412
})
357413
It("Kills the cluster", func() {
358-
err := KillK3sCluster(tc.AllNodes())
414+
err := e2e.KillK3sCluster(tc.AllNodes())
359415
Expect(err).NotTo(HaveOccurred())
360416
})
361417
})
@@ -386,7 +442,7 @@ var _ = Describe("Various Startup Configurations", Ordered, func() {
386442
e2e.DumpPods(tc.KubeconfigFile)
387443
})
388444
It("Kills the cluster", func() {
389-
err := KillK3sCluster(tc.AllNodes())
445+
err := e2e.KillK3sCluster(tc.AllNodes())
390446
Expect(err).NotTo(HaveOccurred())
391447
})
392448
})

tests/e2e/testutils.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,27 @@ func (tc TestConfig) DeployWorkload(workload string) (string, error) {
301301
return "", nil
302302
}
303303

304+
func KillK3sCluster(nodes []VagrantNode) error {
305+
for _, node := range nodes {
306+
if _, err := node.RunCmdOnNode("k3s-killall.sh"); err != nil {
307+
return err
308+
}
309+
if _, err := node.RunCmdOnNode("sh -c 'docker ps -qa | xargs -r docker rm -fv'"); err != nil {
310+
return err
311+
}
312+
if _, err := node.RunCmdOnNode("rm -rf /etc/rancher/k3s/config.yaml.d /var/lib/kubelet/pods /var/lib/rancher/k3s/agent/etc /var/lib/rancher/k3s/agent/containerd /var/lib/rancher/k3s/server/db /var/log/pods /run/k3s /run/flannel"); err != nil {
313+
return err
314+
}
315+
if _, err := node.RunCmdOnNode("systemctl restart containerd docker"); err != nil {
316+
return err
317+
}
318+
if _, err := node.RunCmdOnNode("journalctl --flush --sync --rotate --vacuum-size=1"); err != nil {
319+
return err
320+
}
321+
}
322+
return nil
323+
}
324+
304325
func DestroyCluster() error {
305326
if _, err := RunCommand("vagrant destroy -f"); err != nil {
306327
return err

0 commit comments

Comments
 (0)