package snapshot_test import ( "context" "testing" "github.com/spf13/afero" "github.com/stretchr/testify/require" "sneak.berlin/go/vaultik/internal/database" "sneak.berlin/go/vaultik/internal/snapshot" ) // A backup of the directory that holds vaultik's index and PID file // stores neither, with no exclude pattern set, and still stores the // files beside them. See https://git.eeqj.de/sneak/vaultik/issues/421. func TestScanSkipsIndexAndLockFiles(t *testing.T) { t.Parallel() const dataDir = "/home/user/.local/share/vaultik" indexAndLockFiles := append(database.IndexFiles(dataDir+"/index.sqlite"), dataDir+"/vaultik.pid") fs := afero.NewMemMapFs() for _, p := range append(indexAndLockFiles, dataDir+"/notes.txt") { require.NoError(t, afero.WriteFile(fs, p, []byte("data"), 0o600)) } db, err := database.NewTestDB() require.NoError(t, err) defer func() { _ = db.Close() }() repos := database.NewRepositories(db) scanner := snapshot.NewScanner(snapshot.ScannerConfig{ FS: fs, ChunkSize: 64 * 1024, Repositories: repos, MaxBlobSize: 1024 * 1024, CompressionLevel: 3, AgeRecipients: []string{ "age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p"}, IndexAndLockFiles: indexAndLockFiles, }) require.NotNil(t, scanner) ctx := context.Background() createSnapshotRecord(ctx, t, repos, "test-snapshot") result, err := scanner.Scan(ctx, "/home/user", "test-snapshot") require.NoError(t, err) require.Equal(t, 1, result.FilesScanned) stored, err := repos.Files.GetByPath(ctx, dataDir+"/notes.txt") require.NoError(t, err) require.NotNil(t, stored, "a file beside the index is stored") for _, p := range indexAndLockFiles { f, err := repos.Files.GetByPath(ctx, p) require.NoError(t, err) require.Nil(t, f, "%s is not stored", p) } }