Files
kopia/cli/command_snapshot_estimate_test.go
Eng Zer Jun 73e492c9db refactor: move from io/ioutil to io and os package (#1360)
* refactor: move from io/ioutil to io and os package

The io/ioutil package has been deprecated as of Go 1.16, see
https://golang.org/doc/go1.16#ioutil. This commit replaces the existing
io/ioutil functions with their new definitions in io and os packages.

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* chore: remove //nolint:gosec for os.ReadFile

At the time of this commit, the G304 rule of gosec does not include the
`os.ReadFile` function. We remove `//nolint:gosec` temporarily until
https://github.com/securego/gosec/pull/706 is merged.

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2021-10-06 08:39:10 -07:00

58 lines
2.5 KiB
Go

package cli_test
import (
"bytes"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"github.com/kopia/kopia/internal/testutil"
"github.com/kopia/kopia/tests/testenv"
)
func TestSnapshotEstimate(t *testing.T) {
env := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
dir := testutil.TempDirectory(t)
require.NoError(t, os.WriteFile(filepath.Join(dir, "file1.txt"), bytes.Repeat([]byte{1, 2, 3, 4, 5}, 15000), 0o600))
require.NoError(t, os.WriteFile(filepath.Join(dir, "file2.txt"), bytes.Repeat([]byte{2, 3, 4, 5, 6}, 10000), 0o600))
require.NoError(t, os.MkdirAll(filepath.Join(dir, "subdir"), 0o755))
require.NoError(t, os.WriteFile(filepath.Join(dir, "subdir", "file2.txt"), bytes.Repeat([]byte{3, 4, 5, 6, 7}, 5000), 0o600))
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
out := env.RunAndExpectSuccess(t, "snapshot", "estimate", dir)
require.Contains(t, out, "Snapshot includes 3 file(s), total size 150 KB")
require.Contains(t, out, "Snapshot excludes no files.")
require.Contains(t, out, "Snapshot excludes no directories.")
// ignore some files
env.RunAndExpectSuccess(t, "policy", "set", "--add-ignore", "*2.txt", dir)
out = env.RunAndExpectSuccess(t, "snapshot", "estimate", dir)
require.Contains(t, out, "Snapshot includes 1 file(s), total size 75 KB")
require.Contains(t, out, "Snapshot excludes 2 file(s), total size 75 KB")
require.Contains(t, out, " - ./file2.txt - 50 KB")
require.Contains(t, out, " - ./subdir/file2.txt - 25 KB")
require.Contains(t, out, "Snapshot excludes no directories.")
// ignore a dir
env.RunAndExpectSuccess(t, "policy", "set", "--add-ignore", "subdir", dir)
out = env.RunAndExpectSuccess(t, "snapshot", "estimate", dir)
require.Contains(t, out, "Snapshot includes 1 file(s), total size 75 KB")
require.Contains(t, out, "Snapshot excludes 1 file(s), total size 50 KB")
require.Contains(t, out, " - ./file2.txt - 50 KB")
require.Contains(t, out, " - ./subdir")
require.Contains(t, out, "Snapshot excludes 1 directories. Examples:")
}
func TestSnapshotEstimate_NotADirectory(t *testing.T) {
env := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
dir := testutil.TempDirectory(t)
require.NoError(t, os.WriteFile(filepath.Join(dir, "file1.txt"), []byte{1, 2, 3}, 0o600))
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
env.RunAndExpectFailure(t, "snapshot", "estimate", filepath.Join(dir, "file1.txt"))
}