mirror of https://github.com/k3s-io/k3s
Add integration tests for etc-snapshot server flags and refactor /tests/integration/integration.go/K3sStartServer (#7300)
This adds integration tests for the following flags: "--etcd-snapshot-name","--etcd-snapshot-dir","--etcd-snapshot-retention","--etcd-snapshot-schedule-cron" and "--etcd-snapshot-compress". It also refactors K3sStartServer to stop applying strings.Fields() into inputArgs, so it can accept arguments that have space in their definition.
Signed-off-by: Ian Cardoso <osodracnai@gmail.com>
(cherry picked from commit 1ac03aad43
)
pull/7404/head
parent
31980fbb93
commit
86f4e50d2a
|
@ -13,8 +13,9 @@ import (
|
|||
var customEtcdArgsServer *testutil.K3sServer
|
||||
var customEtcdArgsServerArgs = []string{
|
||||
"--cluster-init",
|
||||
"--etcd-arg quota-backend-bytes=858993459",
|
||||
"--etcd-arg=quota-backend-bytes=858993459",
|
||||
}
|
||||
|
||||
var testLock int
|
||||
|
||||
var _ = BeforeSuite(func() {
|
||||
|
|
|
@ -13,8 +13,8 @@ import (
|
|||
var dualStackServer *testutil.K3sServer
|
||||
var dualStackServerArgs = []string{
|
||||
"--cluster-init",
|
||||
"--cluster-cidr 10.42.0.0/16,2001:cafe:42:0::/56",
|
||||
"--service-cidr 10.43.0.0/16,2001:cafe:42:1::/112",
|
||||
"--cluster-cidr", "10.42.0.0/16,2001:cafe:42:0::/56",
|
||||
"--service-cidr", "10.43.0.0/16,2001:cafe:42:1::/112",
|
||||
"--disable-network-policy",
|
||||
}
|
||||
var testLock int
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package snapshot_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -14,6 +16,10 @@ import (
|
|||
var server *testutil.K3sServer
|
||||
var serverArgs = []string{"--cluster-init"}
|
||||
var testLock int
|
||||
var populatedTestSnapshotDir string
|
||||
var emptyTestSnapshotDir string
|
||||
var etcdSnapshotFilePattern = "test-snapshot"
|
||||
var etcdSnapshotRetention = 1
|
||||
|
||||
var _ = BeforeSuite(func() {
|
||||
if !testutil.IsExistingServer() {
|
||||
|
@ -111,6 +117,60 @@ var _ = Describe("etcd snapshots", Ordered, func() {
|
|||
}
|
||||
})
|
||||
})
|
||||
When("a new etcd is created with server start flags", func() {
|
||||
It("kills previous server and start up with no problems", func() {
|
||||
var err error
|
||||
Expect(testutil.K3sKillServer(server)).To(Succeed())
|
||||
localServerArgs := []string{"--cluster-init",
|
||||
"--etcd-snapshot-name", etcdSnapshotFilePattern,
|
||||
"--etcd-snapshot-dir", populatedTestSnapshotDir,
|
||||
"--etcd-snapshot-retention", fmt.Sprint(etcdSnapshotRetention),
|
||||
"--etcd-snapshot-schedule-cron", `* * * * *`,
|
||||
"--etcd-snapshot-compress"}
|
||||
server, err = testutil.K3sStartServer(localServerArgs...)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Eventually(func() error {
|
||||
return testutil.K3sDefaultDeployments()
|
||||
}, "180s", "5s").Should(Succeed())
|
||||
|
||||
})
|
||||
It("saves an etcd snapshot with specified name and it should be no more than 1 compressed file", func() {
|
||||
|
||||
Eventually(func() (int, error) {
|
||||
matches, err := filepath.Glob(filepath.Join(populatedTestSnapshotDir, fmt.Sprintf("%s%s%s", "*", etcdSnapshotFilePattern, "*.zip")))
|
||||
return len(matches), err
|
||||
}, "180s", "30s").Should(Equal(etcdSnapshotRetention))
|
||||
Consistently(func() (int, error) {
|
||||
matches, err := filepath.Glob(filepath.Join(populatedTestSnapshotDir, fmt.Sprintf("%s%s%s", "*", etcdSnapshotFilePattern, "*.zip")))
|
||||
return len(matches), err
|
||||
}, "120s", "30s").Should(Equal(etcdSnapshotRetention))
|
||||
})
|
||||
It("kills previous server and start up with no problems and disabled snapshots", func() {
|
||||
|
||||
var err error
|
||||
Expect(testutil.K3sKillServer(server)).To(Succeed())
|
||||
localServerArgs := []string{"--cluster-init",
|
||||
"--etcd-snapshot-dir", emptyTestSnapshotDir,
|
||||
"--etcd-snapshot-schedule-cron", `* * * * *`,
|
||||
"--etcd-disable-snapshots"}
|
||||
server, err = testutil.K3sStartServer(localServerArgs...)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Eventually(func() error {
|
||||
return testutil.K3sDefaultDeployments()
|
||||
}, "180s", "5s").Should(Succeed())
|
||||
|
||||
})
|
||||
It("should not save any snapshot", func() {
|
||||
Consistently(func() error {
|
||||
matches, err := filepath.Glob(filepath.Join(emptyTestSnapshotDir, "*"))
|
||||
if matches != nil || err != nil {
|
||||
return fmt.Errorf("something went wrong: err != nil (%v) or matches != nil (%v)", err, matches)
|
||||
}
|
||||
return nil
|
||||
}, "180s", "60s").Should(Succeed())
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
var failed bool
|
||||
|
@ -130,5 +190,7 @@ var _ = AfterSuite(func() {
|
|||
|
||||
func Test_IntegrationEtcdSnapshot(t *testing.T) {
|
||||
RegisterFailHandler(Fail)
|
||||
populatedTestSnapshotDir = t.TempDir()
|
||||
emptyTestSnapshotDir = t.TempDir()
|
||||
RunSpecs(t, "Etcd Snapshot Suite")
|
||||
}
|
||||
|
|
|
@ -210,12 +210,8 @@ func K3sStartServer(inputArgs ...string) (*K3sServer, error) {
|
|||
return nil, errors.New("integration tests must be run as sudo/root")
|
||||
}
|
||||
|
||||
var cmdArgs []string
|
||||
for _, arg := range inputArgs {
|
||||
cmdArgs = append(cmdArgs, strings.Fields(arg)...)
|
||||
}
|
||||
k3sBin := findK3sExecutable()
|
||||
k3sCmd := append([]string{"server"}, cmdArgs...)
|
||||
k3sCmd := append([]string{"server"}, inputArgs...)
|
||||
cmd := exec.Command(k3sBin, k3sCmd...)
|
||||
// Give the server a new group id so we can kill it and its children later
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
|
||||
|
|
Loading…
Reference in New Issue