Skip to content

Commit

Permalink
Add integration tests for etc-snapshot server flags and refactor /tes…
Browse files Browse the repository at this point in the history
…ts/integration/integration.go/K3sStartServer (k3s-io#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 <[email protected]>
  • Loading branch information
osodracnai authored Apr 28, 2023
1 parent ef648b7 commit 1ac03aa
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 8 deletions.
3 changes: 2 additions & 1 deletion tests/integration/custometcdargs/custometcdargs_int_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/dualstack/dualstack_int_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
62 changes: 62 additions & 0 deletions tests/integration/etcdsnapshot/etcdsnapshot_int_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package snapshot_test

import (
"fmt"
"path/filepath"
"regexp"
"strings"
"testing"
Expand All @@ -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() {
Expand Down Expand Up @@ -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
Expand All @@ -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")
}
6 changes: 1 addition & 5 deletions tests/integration/integration.go
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down

0 comments on commit 1ac03aa

Please sign in to comment.