provider-kairos/tests/upgrade_k8s_test.go
Ettore Di Giacinto e0033e7fd2 🤖 Use static assets, wait longer
Signed-off-by: Ettore Di Giacinto <mudler@users.noreply.github.com>
2022-12-03 22:48:13 +00:00

139 lines
4.3 KiB
Go

// nolint
package mos_test
import (
"fmt"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
. "github.com/spectrocloud/peg/matcher"
)
var _ = Describe("k3s upgrade test", Label("upgrade-k8s"), func() {
BeforeEach(func() {
EventuallyConnects()
})
AfterEach(func() {
if CurrentGinkgoTestDescription().Failed {
gatherLogs()
}
})
Context("live cd", func() {
It("has default service active", func() {
if isFlavor("alpine") {
out, _ := Sudo("rc-status")
Expect(out).Should(ContainSubstring("kairos"))
Expect(out).Should(ContainSubstring("kairos-agent"))
out, _ = Sudo("ps aux")
Expect(out).Should(ContainSubstring("/usr/sbin/crond"))
} else {
// Eventually(func() string {
// out, _ := machine.SSHCommand("sudo systemctl status kairos-agent")
// return out
// }, 30*time.Second, 10*time.Second).Should(ContainSubstring("no network token"))
out, _ := Sudo("systemctl status kairos")
Expect(out).Should(ContainSubstring("loaded (/etc/systemd/system/kairos.service; enabled; vendor preset: disabled)"))
out, _ = Sudo("systemctl status logrotate.timer")
Expect(out).Should(ContainSubstring("active (waiting)"))
}
})
})
Context("install", func() {
It("to disk with custom config", func() {
err := Machine.SendFile("assets/single.yaml", "/tmp/config.yaml", "0770")
Expect(err).ToNot(HaveOccurred())
out, _ := Sudo("elemental install --cloud-init /tmp/config.yaml /dev/sda")
Expect(out).Should(ContainSubstring("Running after-install hook"))
fmt.Println(out)
Sudo("sync")
detachAndReboot()
})
})
Context("first-boot", func() {
It("has default services on", func() {
if isFlavor("alpine") {
out, _ := Sudo("rc-status")
Expect(out).Should(ContainSubstring("kairos"))
Expect(out).Should(ContainSubstring("kairos-agent"))
} else {
out, _ := Sudo("systemctl status kairos-agent")
Expect(out).Should(ContainSubstring("loaded (/etc/systemd/system/kairos-agent.service; enabled; vendor preset: disabled)"))
out, _ = Sudo("systemctl status systemd-timesyncd")
Expect(out).Should(ContainSubstring("loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: disabled)"))
}
})
It("has kubeconfig", func() {
Eventually(func() string {
var out string
if isFlavor("alpine") {
out, _ = Sudo("cat /var/log/kairos/agent.log;cat /var/log/kairos-agent.log")
} else {
out, _ = Sudo("systemctl status kairos-agent")
}
return out
}, 900*time.Second, 10*time.Second).Should(ContainSubstring("One time bootstrap starting"))
Eventually(func() string {
out, _ := Sudo("cat /var/log/kairos/agent-provider.log")
return out
}, 900*time.Second, 10*time.Second).Should(Or(ContainSubstring("One time bootstrap starting"), ContainSubstring("Sentinel exists")))
Eventually(func() string {
out, _ := Sudo("cat /etc/rancher/k3s/k3s.yaml")
return out
}, 900*time.Second, 10*time.Second).Should(ContainSubstring("https:"))
})
It("rotates logs", func() {
out, err := Sudo("logrotate -vf /etc/logrotate.d/kairos")
Expect(err).ToNot(HaveOccurred())
Expect(out).To(ContainSubstring("log needs rotating"))
_, err = Sudo("ls /var/log/kairos/agent-provider.log.1.gz")
Expect(err).ToNot(HaveOccurred())
})
It("upgrades", func() {
By("wait system-upgrade-controller", func() {
Eventually(func() string {
out, _ := kubectl("get pods -A")
return out
}, 900*time.Second, 10*time.Second).Should(ContainSubstring("system-upgrade-controller"))
})
By("applying plan", func() {
err := Machine.SendFile("assets/suc.yaml", "./suc.yaml", "0770")
Expect(err).ToNot(HaveOccurred())
Eventually(func() string {
out, _ := kubectl("apply -f suc.yaml")
return out
}, 900*time.Second, 10*time.Second).Should(ContainSubstring("unchanged"))
Eventually(func() string {
out, _ := kubectl("get pods -A")
fmt.Println(out)
return out
}, 900*time.Second, 10*time.Second).Should(ContainSubstring("apply-os-upgrade-on-"))
Eventually(func() string {
out, _ := kubectl("get pods -A")
fmt.Println(out)
version, _ := Machine.Command("source /etc/os-release; echo $VERSION")
return version
}, 30*time.Minute, 10*time.Second).Should(ContainSubstring("v"))
})
})
})
})