mirror of
https://github.com/kopia/kopia.git
synced 2025-12-23 22:57:50 -05:00
* allow running quick maintenance with epoch manager * run full maintenance to cleanup logs * separate logs maintenance set params test
123 lines
4.3 KiB
Go
123 lines
4.3 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/kopia/kopia/internal/testutil"
|
|
"github.com/kopia/kopia/tests/testenv"
|
|
)
|
|
|
|
func TestLogsCommands(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
runner := testenv.NewInProcRunner(t)
|
|
e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner)
|
|
|
|
e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir)
|
|
defer e.RunAndExpectSuccess(t, "repo", "disconnect")
|
|
|
|
// one log from repository creation
|
|
e.RunAndVerifyOutputLineCount(t, 1, "logs", "list")
|
|
|
|
// verify we did not add a log
|
|
e.RunAndVerifyOutputLineCount(t, 1, "logs", "list")
|
|
|
|
e.RunAndExpectSuccess(t, "snapshot", "create", testutil.TempDirectory(t))
|
|
|
|
e.RunAndVerifyOutputLineCount(t, 2, "logs", "list")
|
|
|
|
// sleep a bit so that 3rd log is reliably last in time order even if the clock is completely
|
|
// messed up.
|
|
time.Sleep(2 * time.Second)
|
|
e.RunAndExpectSuccess(t, "snapshot", "create", testutil.TempDirectory(t))
|
|
|
|
lines := e.RunAndVerifyOutputLineCount(t, 3, "logs", "list")
|
|
firstLogID := strings.Split(lines[0], " ")[0]
|
|
secondLogID := strings.Split(lines[1], " ")[0]
|
|
thirdLogID := strings.Split(lines[2], " ")[0]
|
|
|
|
firstLogLines := e.RunAndExpectSuccess(t, "logs", "show", firstLogID)
|
|
secondLogLines := e.RunAndExpectSuccess(t, "logs", "show", secondLogID)
|
|
thirdLogLines := e.RunAndExpectSuccess(t, "logs", "show", thirdLogID)
|
|
e.RunAndExpectFailure(t, "logs", "show", "no-such-log")
|
|
|
|
lines2 := e.RunAndVerifyOutputLineCount(t, 1, "logs", "list", "-n1")
|
|
require.Equal(t, thirdLogID, strings.Split(lines2[0], " ")[0])
|
|
|
|
e.RunAndVerifyOutputLineCount(t, 0, "logs", "list", "--younger-than=1ms")
|
|
e.RunAndVerifyOutputLineCount(t, 3, "logs", "list", "--younger-than=1h")
|
|
e.RunAndVerifyOutputLineCount(t, 3, "logs", "list", "--older-than=1ms")
|
|
e.RunAndVerifyOutputLineCount(t, 0, "logs", "list", "--older-than=1h")
|
|
|
|
require.NotEqual(t, firstLogLines, secondLogLines)
|
|
require.NotEqual(t, secondLogLines, thirdLogLines)
|
|
|
|
// by default cleanup retains a lot of logs.
|
|
e.RunAndExpectSuccess(t, "logs", "cleanup")
|
|
e.RunAndVerifyOutputLineCount(t, 3, "logs", "list")
|
|
e.RunAndExpectSuccess(t, "logs", "cleanup", "--max-count=2", "--dry-run")
|
|
e.RunAndVerifyOutputLineCount(t, 3, "logs", "list")
|
|
e.RunAndExpectSuccess(t, "logs", "cleanup", "--max-count=2")
|
|
e.RunAndVerifyOutputLineCount(t, 2, "logs", "list")
|
|
e.RunAndExpectSuccess(t, "logs", "cleanup", "--max-count=1")
|
|
e.RunAndVerifyOutputLineCount(t, 1, "logs", "list")
|
|
|
|
// make sure latest log survived
|
|
e.RunAndExpectSuccess(t, "logs", "show", thirdLogID)
|
|
}
|
|
|
|
func TestLogsMaintenance(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
runner := testenv.NewInProcRunner(t)
|
|
e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner)
|
|
|
|
e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir)
|
|
defer e.RunAndExpectSuccess(t, "repo", "disconnect")
|
|
|
|
time.Sleep(time.Second)
|
|
e.RunAndExpectSuccess(t, "snapshot", "create", testutil.TempDirectory(t))
|
|
time.Sleep(time.Second)
|
|
e.RunAndExpectSuccess(t, "snapshot", "create", testutil.TempDirectory(t))
|
|
time.Sleep(time.Second)
|
|
e.RunAndExpectSuccess(t, "snapshot", "create", testutil.TempDirectory(t))
|
|
e.RunAndVerifyOutputLineCount(t, 4, "logs", "list")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--max-retained-log-count=2")
|
|
e.RunAndVerifyOutputLineCount(t, 5, "logs", "list")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "run", "--full")
|
|
e.RunAndVerifyOutputLineCount(t, 3, "logs", "list")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--max-retained-log-age=1ms")
|
|
e.RunAndVerifyOutputLineCount(t, 4, "logs", "list")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "run", "--full")
|
|
e.RunAndVerifyOutputLineCount(t, 1, "logs", "list")
|
|
}
|
|
|
|
func TestLogsMaintenanceSet(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
runner := testenv.NewInProcRunner(t)
|
|
e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner)
|
|
|
|
e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir)
|
|
defer e.RunAndExpectSuccess(t, "repo", "disconnect")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set",
|
|
"--max-retained-log-age=22h",
|
|
"--max-retained-log-size-mb=33",
|
|
"--max-retained-log-count=44",
|
|
)
|
|
|
|
infoLines := e.RunAndExpectSuccess(t, "maintenance", "info")
|
|
require.Contains(t, infoLines, " max age of logs: 22h0m0s")
|
|
require.Contains(t, infoLines, " max total size: 34.6 MB")
|
|
require.Contains(t, infoLines, " max count: 44")
|
|
}
|