Files
kopia/cli/command_repository_set_parameters_test.go
Jarek Kowalski 8b2b91f9f9 content: fixed repo upgrade version (#1286)
* content: fixed repo upgrade version

Previously upgrade would enable epoch manager and index v2 but would
not set the version of the format itself. Everything worked fine
but it would not protect from old kopia opening the repository.

* ci: added compatibility test that uses real 0.8 and current binaries
2021-09-10 22:51:51 -07:00

84 lines
3.7 KiB
Go

package cli_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/kopia/kopia/repo/content"
"github.com/kopia/kopia/tests/testenv"
)
func (s *formatSpecificTestSuite) TestRepositorySetParameters(t *testing.T) {
env := testenv.NewCLITest(t, s.formatFlags, testenv.NewInProcRunner(t))
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
out := env.RunAndExpectSuccess(t, "repository", "status")
// default values
require.Contains(t, out, "Max pack length: 20 MiB")
if s.formatVersion == content.FormatVersion1 {
require.Contains(t, out, "Format version: 1")
} else {
require.Contains(t, out, "Format version: 2")
}
// failure cases
env.RunAndExpectFailure(t, "repository", "set-parameters")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--index-version=33")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--max-pack-size-mb=9")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--max-pack-size-mb=121")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--index-version=2", "--max-pack-size-mb=33")
out = env.RunAndExpectSuccess(t, "repository", "status")
require.Contains(t, out, "Max pack length: 33 MiB")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--max-pack-size-mb=44")
out = env.RunAndExpectSuccess(t, "repository", "status")
require.Contains(t, out, "Max pack length: 44 MiB")
}
func (s *formatSpecificTestSuite) TestRepositorySetParametersUpgrade(t *testing.T) {
env := testenv.NewCLITest(t, s.formatFlags, testenv.NewInProcRunner(t))
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
out := env.RunAndExpectSuccess(t, "repository", "status")
// default values
require.Contains(t, out, "Max pack length: 20 MiB")
if s.formatVersion == content.FormatVersion1 {
require.Contains(t, out, "Format version: 1")
require.Contains(t, out, "Epoch Manager: disabled")
env.RunAndExpectFailure(t, "index", "epoch", "list")
} else {
require.Contains(t, out, "Format version: 2")
require.Contains(t, out, "Epoch Manager: enabled")
env.RunAndExpectSuccess(t, "index", "epoch", "list")
}
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--upgrade")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--epoch-min-duration", "3h")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--epoch-cleanup-safety-margin", "23h")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--epoch-advance-on-size-mb", "77")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--epoch-advance-on-count", "22")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--epoch-checkpoint-frequency", "9")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--epoch-min-duration", "1s")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--epoch-refresh-frequency", "10h")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--epoch-checkpoint-frequency", "-10")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--epoch-cleanup-safety-margin", "10s")
env.RunAndExpectFailure(t, "repository", "set-parameters", "--epoch-advance-on-count", "1")
out = env.RunAndExpectSuccess(t, "repository", "status")
require.Contains(t, out, "Epoch Manager: enabled")
require.Contains(t, out, "Index Format: v2")
require.Contains(t, out, "Format version: 2")
require.Contains(t, out, "Epoch cleanup margin: 23h0m0s")
require.Contains(t, out, "Epoch advance on: 22 blobs or 77 MiB, minimum 3h0m0s")
require.Contains(t, out, "Epoch checkpoint every: 9 epochs")
env.RunAndExpectSuccess(t, "index", "epoch", "list")
}