mirror of
https://github.com/kopia/kopia.git
synced 2026-01-01 11:07:50 -05:00
106 lines
4.4 KiB
Go
106 lines
4.4 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/kopia/kopia/cli"
|
|
"github.com/kopia/kopia/internal/testutil"
|
|
"github.com/kopia/kopia/repo/blob"
|
|
"github.com/kopia/kopia/tests/testenv"
|
|
)
|
|
|
|
func TestMaintenanceSetExtendObjectLocks(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
|
|
defer e.RunAndExpectSuccess(t, "repo", "disconnect")
|
|
|
|
var mi cli.MaintenanceInfo
|
|
|
|
e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir)
|
|
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "maintenance", "info", "--json"), &mi)
|
|
|
|
require.False(t, mi.ExtendObjectLocks, "ExtendObjectLocks should not default to enabled.")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--extend-object-locks", "true")
|
|
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "maintenance", "info", "--json"), &mi)
|
|
|
|
require.True(t, mi.ExtendObjectLocks, "ExtendObjectLocks should be enabled.")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--extend-object-locks", "false")
|
|
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "maintenance", "info", "--json"), &mi)
|
|
|
|
require.False(t, mi.ExtendObjectLocks, "ExtendObjectLocks should be disabled.")
|
|
}
|
|
|
|
func TestMaintenanceSetListParallelism(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
|
|
defer e.RunAndExpectSuccess(t, "repo", "disconnect")
|
|
|
|
var mi cli.MaintenanceInfo
|
|
|
|
e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir)
|
|
|
|
require.NotContains(t, e.RunAndExpectSuccess(t, "maintenance", "info"), "List parallelism: 0")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--list-parallelism", "33")
|
|
require.Contains(t, e.RunAndExpectSuccess(t, "maintenance", "info"), "List parallelism: 33")
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "maintenance", "info", "--json"), &mi)
|
|
require.Equal(t, 33, mi.ListParallelism, "List parallelism should be set to 33.")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--list-parallelism", "0")
|
|
require.NotContains(t, e.RunAndExpectSuccess(t, "maintenance", "info"), "List parallelism: 0")
|
|
}
|
|
|
|
func (s *formatSpecificTestSuite) TestInvalidExtendRetainOptions(t *testing.T) {
|
|
var mi cli.MaintenanceInfo
|
|
|
|
var rs cli.RepositoryStatus
|
|
|
|
e := s.setupInMemoryRepo(t)
|
|
|
|
// set retention
|
|
e.RunAndExpectSuccess(t, "repository", "set-parameters", "--retention-mode", blob.Compliance.String(),
|
|
"--retention-period", "48h")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--full-interval", "24h01m")
|
|
|
|
// Cannot enable extend object locks when retention_period-full_maintenance_interval < 24h
|
|
e.RunAndExpectFailure(t, "maintenance", "set", "--extend-object-locks", "true")
|
|
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "maintenance", "info", "--json"), &mi)
|
|
|
|
require.False(t, mi.ExtendObjectLocks, "ExtendObjectLocks should be disabled.")
|
|
|
|
// Enable extend object locks when retention_period-full_maintenance_interval > 24h
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--full-interval", "23h59m")
|
|
|
|
e.RunAndExpectSuccess(t, "maintenance", "set", "--extend-object-locks", "true")
|
|
|
|
// Cannot change full_maintenance_interval when retention_period-full_maintenance_interval < 24h
|
|
e.RunAndExpectFailure(t, "maintenance", "set", "--full-interval", "24h01m")
|
|
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "maintenance", "info", "--json"), &mi)
|
|
|
|
require.True(t, mi.ExtendObjectLocks, "ExtendObjectLocks should be enabled.")
|
|
require.Equal(t, mi.FullCycle.Interval, time.Duration(86340000000000), "maintenance-interval should be unchanged.")
|
|
|
|
// Cannot change retention_period when retention_period-full_maintenance_interval < 24h
|
|
e.RunAndExpectFailure(t, "repository", "set-parameters", "--retention-period", "47h")
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "repo", "status", "--json"), &rs)
|
|
require.Equal(t, rs.BlobRetention.RetentionPeriod, time.Duration(172800000000000), "retention-interval should be unchanged.")
|
|
|
|
// Can change retention_period when retention_period-full_maintenance_interval > 24h
|
|
e.RunAndExpectSuccess(t, "repository", "set-parameters", "--retention-period", "49h")
|
|
testutil.MustParseJSONLines(t, e.RunAndExpectSuccess(t, "repo", "status", "--json"), &rs)
|
|
require.Equal(t, rs.BlobRetention.RetentionPeriod, time.Duration(176400000000000), "retention-interval should be unchanged.")
|
|
}
|