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 customEtcdArgsServer *testutil.K3sServer
|
||||||
var customEtcdArgsServerArgs = []string{
|
var customEtcdArgsServerArgs = []string{
|
||||||
"--cluster-init",
|
"--cluster-init",
|
||||||
"--etcd-arg quota-backend-bytes=858993459",
|
"--etcd-arg=quota-backend-bytes=858993459",
|
||||||
}
|
}
|
||||||
|
|
||||||
var testLock int
|
var testLock int
|
||||||
|
|
||||||
var _ = BeforeSuite(func() {
|
var _ = BeforeSuite(func() {
|
||||||
|
|
|
@ -13,8 +13,8 @@ import (
|
||||||
var dualStackServer *testutil.K3sServer
|
var dualStackServer *testutil.K3sServer
|
||||||
var dualStackServerArgs = []string{
|
var dualStackServerArgs = []string{
|
||||||
"--cluster-init",
|
"--cluster-init",
|
||||||
"--cluster-cidr 10.42.0.0/16,2001:cafe:42:0::/56",
|
"--cluster-cidr", "10.42.0.0/16,2001:cafe:42:0::/56",
|
||||||
"--service-cidr 10.43.0.0/16,2001:cafe:42:1::/112",
|
"--service-cidr", "10.43.0.0/16,2001:cafe:42:1::/112",
|
||||||
"--disable-network-policy",
|
"--disable-network-policy",
|
||||||
}
|
}
|
||||||
var testLock int
|
var testLock int
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package snapshot_test
|
package snapshot_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -14,6 +16,10 @@ import (
|
||||||
var server *testutil.K3sServer
|
var server *testutil.K3sServer
|
||||||
var serverArgs = []string{"--cluster-init"}
|
var serverArgs = []string{"--cluster-init"}
|
||||||
var testLock int
|
var testLock int
|
||||||
|
var populatedTestSnapshotDir string
|
||||||
|
var emptyTestSnapshotDir string
|
||||||
|
var etcdSnapshotFilePattern = "test-snapshot"
|
||||||
|
var etcdSnapshotRetention = 1
|
||||||
|
|
||||||
var _ = BeforeSuite(func() {
|
var _ = BeforeSuite(func() {
|
||||||
if !testutil.IsExistingServer() {
|
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
|
var failed bool
|
||||||
|
@ -130,5 +190,7 @@ var _ = AfterSuite(func() {
|
||||||
|
|
||||||
func Test_IntegrationEtcdSnapshot(t *testing.T) {
|
func Test_IntegrationEtcdSnapshot(t *testing.T) {
|
||||||
RegisterFailHandler(Fail)
|
RegisterFailHandler(Fail)
|
||||||
|
populatedTestSnapshotDir = t.TempDir()
|
||||||
|
emptyTestSnapshotDir = t.TempDir()
|
||||||
RunSpecs(t, "Etcd Snapshot Suite")
|
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")
|
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()
|
k3sBin := findK3sExecutable()
|
||||||
k3sCmd := append([]string{"server"}, cmdArgs...)
|
k3sCmd := append([]string{"server"}, inputArgs...)
|
||||||
cmd := exec.Command(k3sBin, k3sCmd...)
|
cmd := exec.Command(k3sBin, k3sCmd...)
|
||||||
// Give the server a new group id so we can kill it and its children later
|
// Give the server a new group id so we can kill it and its children later
|
||||||
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
|
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
|
||||||
|
|
Loading…
Reference in New Issue