mirror of
https://github.com/kopia/kopia.git
synced 2025-12-23 22:57:50 -05:00
refactor(cli): snapshot list JSON functionality. Defines SnapshotManifest struct for the snapshot list JSON output. test(cli): `snapshot list --json`
138 lines
4.4 KiB
Go
138 lines
4.4 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/kopia/kopia/cli"
|
|
"github.com/kopia/kopia/internal/testutil"
|
|
"github.com/kopia/kopia/snapshot"
|
|
"github.com/kopia/kopia/tests/testenv"
|
|
)
|
|
|
|
func TestSnapshotStorageStats(t *testing.T) {
|
|
env := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
|
|
|
|
dir1 := testutil.TempDirectory(t)
|
|
require.NoError(t, os.WriteFile(filepath.Join(dir1, "file1.txt"), []byte{1, 2, 3, 4, 5}, 0o600))
|
|
require.NoError(t, os.WriteFile(filepath.Join(dir1, "file2.txt"), []byte{2, 3, 4, 5, 6}, 0o600))
|
|
require.NoError(t, os.MkdirAll(filepath.Join(dir1, "subdir"), 0o755))
|
|
require.NoError(t, os.WriteFile(filepath.Join(dir1, "subdir", "file2.txt"), []byte{3, 4, 5, 6, 7}, 0o600))
|
|
|
|
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
|
|
env.RunAndExpectSuccess(t, "snapshot", "create", dir1)
|
|
|
|
// same as ./file1.txt
|
|
require.NoError(t, os.WriteFile(filepath.Join(dir1, "subdir", "file3.txt"), []byte{1, 2, 3, 4, 5}, 0o600))
|
|
|
|
// new file
|
|
require.NoError(t, os.WriteFile(filepath.Join(dir1, "subdir", "file4.txt"), []byte{1, 2, 3, 4, 5, 6, 7, 8}, 0o600))
|
|
env.RunAndExpectSuccess(t, "snapshot", "create", dir1)
|
|
|
|
var manifests []cli.SnapshotManifest
|
|
|
|
testutil.MustParseJSONLines(t, env.RunAndExpectSuccess(t, "snapshot", "ls", "--storage-stats", dir1, "--json"), &manifests)
|
|
require.Len(t, manifests, 2)
|
|
|
|
require.Equal(t, &snapshot.StorageStats{
|
|
NewData: snapshot.StorageUsageDetails{
|
|
FileObjectCount: 3,
|
|
DirObjectCount: 2,
|
|
ContentCount: 5,
|
|
ObjectBytes: 15,
|
|
OriginalContentBytes: 15,
|
|
PackedContentBytes: 99,
|
|
},
|
|
RunningTotal: snapshot.StorageUsageDetails{
|
|
FileObjectCount: 3,
|
|
DirObjectCount: 2,
|
|
ContentCount: 5,
|
|
ObjectBytes: 15,
|
|
OriginalContentBytes: 15,
|
|
PackedContentBytes: 99,
|
|
},
|
|
}, manifests[0].StorageStats)
|
|
|
|
require.Equal(t, &snapshot.StorageStats{
|
|
NewData: snapshot.StorageUsageDetails{
|
|
FileObjectCount: 1,
|
|
DirObjectCount: 2,
|
|
ContentCount: 3,
|
|
ObjectBytes: 8,
|
|
OriginalContentBytes: 8,
|
|
PackedContentBytes: 36,
|
|
},
|
|
RunningTotal: snapshot.StorageUsageDetails{
|
|
FileObjectCount: 4,
|
|
DirObjectCount: 4,
|
|
ContentCount: 8,
|
|
ObjectBytes: 23,
|
|
OriginalContentBytes: 23,
|
|
PackedContentBytes: 135,
|
|
},
|
|
}, manifests[1].StorageStats)
|
|
|
|
// same but in reverse order
|
|
testutil.MustParseJSONLines(t, env.RunAndExpectSuccess(t, "snapshot", "ls", "--storage-stats", dir1, "--reverse", "--json"), &manifests)
|
|
require.Len(t, manifests, 2)
|
|
|
|
require.Equal(t, &snapshot.StorageStats{
|
|
NewData: snapshot.StorageUsageDetails{
|
|
ObjectBytes: 23,
|
|
OriginalContentBytes: 23,
|
|
PackedContentBytes: 135,
|
|
FileObjectCount: 4,
|
|
DirObjectCount: 2,
|
|
ContentCount: 6,
|
|
},
|
|
RunningTotal: snapshot.StorageUsageDetails{
|
|
ObjectBytes: 23,
|
|
OriginalContentBytes: 23,
|
|
PackedContentBytes: 135,
|
|
FileObjectCount: 4,
|
|
DirObjectCount: 2,
|
|
ContentCount: 6,
|
|
},
|
|
}, manifests[0].StorageStats)
|
|
|
|
require.Equal(t, &snapshot.StorageStats{
|
|
NewData: snapshot.StorageUsageDetails{
|
|
ObjectBytes: 0, // all file data was already present
|
|
OriginalContentBytes: 0,
|
|
PackedContentBytes: 0,
|
|
FileObjectCount: 0,
|
|
DirObjectCount: 2, // new directories only
|
|
ContentCount: 2,
|
|
},
|
|
RunningTotal: snapshot.StorageUsageDetails{
|
|
ObjectBytes: 23,
|
|
OriginalContentBytes: 23,
|
|
PackedContentBytes: 135,
|
|
FileObjectCount: 4,
|
|
DirObjectCount: 4,
|
|
ContentCount: 8,
|
|
},
|
|
}, manifests[1].StorageStats)
|
|
|
|
out := env.RunAndExpectSuccess(t, "snapshot", "ls", "--storage-stats")
|
|
require.Len(t, out, 3)
|
|
require.Contains(t, out[1], "new-data:99 B ")
|
|
require.Contains(t, out[1], "new-files:3 ")
|
|
require.Contains(t, out[1], "new-dirs:2 ")
|
|
require.Contains(t, out[2], "new-data:36 B ")
|
|
require.Contains(t, out[2], "new-files:1 ")
|
|
require.Contains(t, out[2], "new-dirs:2 ")
|
|
|
|
out = env.RunAndExpectSuccess(t, "snapshot", "ls", "--storage-stats", "--reverse")
|
|
require.Len(t, out, 3)
|
|
require.Contains(t, out[1], "new-data:135 B ")
|
|
require.Contains(t, out[1], "new-files:4 ")
|
|
require.Contains(t, out[1], "new-dirs:2 ")
|
|
require.Contains(t, out[2], "new-data:0 B ")
|
|
require.Contains(t, out[2], "new-files:0 ")
|
|
require.Contains(t, out[2], "new-dirs:2 ")
|
|
}
|