diff --git a/internal/cli/entry_test.go b/internal/cli/entry_test.go index 4fc87f5..8ece599 100644 --- a/internal/cli/entry_test.go +++ b/internal/cli/entry_test.go @@ -65,9 +65,9 @@ func TestGenerateCommand(t *testing.T) { fs := afero.NewMemMapFs() // Create test files in memory filesystem - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("test content"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("test content"), 0o644)) opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -85,9 +85,9 @@ func TestGenerateAndCheckCommand(t *testing.T) { fs := afero.NewMemMapFs() // Create test files with subdirectory - require.NoError(t, fs.MkdirAll("/testdir/subdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/file2.txt", []byte("test content"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir/subdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/file2.txt", []byte("test content"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -104,8 +104,8 @@ func TestCheckCommandWithMissingFile(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -125,8 +125,8 @@ func TestCheckCommandWithCorruptedFile(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -134,7 +134,7 @@ func TestCheckCommandWithCorruptedFile(t *testing.T) { require.Equal(t, 0, exitCode, "generate failed: %s", opts.Stderr.(*bytes.Buffer).String()) // Corrupt the file (change content but keep same size) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("HELLO WORLD"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("HELLO WORLD"), 0o644)) // Check manifest - should fail with hash mismatch opts = testOpts([]string{"mfer", "check", "-q", "--base", "/testdir", "/testdir/test.mf"}, fs) @@ -146,8 +146,8 @@ func TestCheckCommandWithSizeMismatch(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello world"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -155,7 +155,7 @@ func TestCheckCommandWithSizeMismatch(t *testing.T) { require.Equal(t, 0, exitCode, "generate failed: %s", opts.Stderr.(*bytes.Buffer).String()) // Change file size - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("different size content here"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("different size content here"), 0o644)) // Check manifest - should fail with size mismatch opts = testOpts([]string{"mfer", "check", "-q", "--base", "/testdir", "/testdir/test.mf"}, fs) @@ -167,8 +167,8 @@ func TestBannerOutput(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Run without -q to see banner opts := testOpts([]string{"mfer", "generate", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -193,9 +193,9 @@ func TestGenerateExcludesDotfilesByDefault(t *testing.T) { fs := afero.NewMemMapFs() // Create test files including dotfiles - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden", []byte("secret"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden", []byte("secret"), 0o644)) // Generate manifest without --include-dotfiles (default excludes dotfiles) opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -217,9 +217,9 @@ func TestGenerateWithIncludeDotfiles(t *testing.T) { fs := afero.NewMemMapFs() // Create test files including dotfiles - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden", []byte("secret"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden", []byte("secret"), 0o644)) // Generate manifest with --include-dotfiles opts := testOpts([]string{"mfer", "generate", "-q", "--include-dotfiles", "-o", "/testdir/test.mf", "/testdir"}, fs) @@ -236,10 +236,10 @@ func TestMultipleInputPaths(t *testing.T) { fs := afero.NewMemMapFs() // Create test files in multiple directories - require.NoError(t, fs.MkdirAll("/dir1", 0755)) - require.NoError(t, fs.MkdirAll("/dir2", 0755)) - require.NoError(t, afero.WriteFile(fs, "/dir1/file1.txt", []byte("content1"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/dir2/file2.txt", []byte("content2"), 0644)) + require.NoError(t, fs.MkdirAll("/dir1", 0o755)) + require.NoError(t, fs.MkdirAll("/dir2", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/dir1/file1.txt", []byte("content1"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/dir2/file2.txt", []byte("content2"), 0o644)) // Generate manifest from multiple paths opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/output.mf", "/dir1", "/dir2"}, fs) @@ -254,9 +254,9 @@ func TestNoExtraFilesPass(t *testing.T) { fs := afero.NewMemMapFs() // Create test files - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("world"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("world"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/manifest.mf", "/testdir"}, fs) @@ -273,8 +273,8 @@ func TestNoExtraFilesFail(t *testing.T) { fs := afero.NewMemMapFs() // Create test files - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/manifest.mf", "/testdir"}, fs) @@ -282,7 +282,7 @@ func TestNoExtraFilesFail(t *testing.T) { require.Equal(t, 0, exitCode) // Add an extra file after manifest generation - require.NoError(t, afero.WriteFile(fs, "/testdir/extra.txt", []byte("extra"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/extra.txt", []byte("extra"), 0o644)) // Check with --no-extra-files (should fail - extra file exists) opts = testOpts([]string{"mfer", "check", "-q", "--no-extra-files", "--base", "/testdir", "/manifest.mf"}, fs) @@ -294,9 +294,9 @@ func TestNoExtraFilesWithSubdirectory(t *testing.T) { fs := afero.NewMemMapFs() // Create test files with subdirectory - require.NoError(t, fs.MkdirAll("/testdir/subdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/file2.txt", []byte("world"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir/subdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/file2.txt", []byte("world"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/manifest.mf", "/testdir"}, fs) @@ -304,7 +304,7 @@ func TestNoExtraFilesWithSubdirectory(t *testing.T) { require.Equal(t, 0, exitCode) // Add extra file in subdirectory - require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/extra.txt", []byte("extra"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/extra.txt", []byte("extra"), 0o644)) // Check with --no-extra-files (should fail) opts = testOpts([]string{"mfer", "check", "-q", "--no-extra-files", "--base", "/testdir", "/manifest.mf"}, fs) @@ -316,8 +316,8 @@ func TestCheckWithoutNoExtraFilesIgnoresExtra(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/manifest.mf", "/testdir"}, fs) @@ -325,7 +325,7 @@ func TestCheckWithoutNoExtraFilesIgnoresExtra(t *testing.T) { require.Equal(t, 0, exitCode) // Add extra file - require.NoError(t, afero.WriteFile(fs, "/testdir/extra.txt", []byte("extra"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/extra.txt", []byte("extra"), 0o644)) // Check WITHOUT --no-extra-files (should pass - extra files ignored) opts = testOpts([]string{"mfer", "check", "-q", "--base", "/testdir", "/manifest.mf"}, fs) @@ -337,8 +337,8 @@ func TestGenerateAtomicWriteNoTempFileOnSuccess(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/output.mf", "/testdir"}, fs) @@ -360,11 +360,11 @@ func TestGenerateAtomicWriteOverwriteWithForce(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Create existing manifest with different content - require.NoError(t, afero.WriteFile(fs, "/output.mf", []byte("old content"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/output.mf", []byte("old content"), 0o644)) // Generate manifest with --force opts := testOpts([]string{"mfer", "generate", "-q", "-f", "-o", "/output.mf", "/testdir"}, fs) @@ -386,11 +386,11 @@ func TestGenerateFailsWithoutForceWhenOutputExists(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Create existing manifest - require.NoError(t, afero.WriteFile(fs, "/output.mf", []byte("existing"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/output.mf", []byte("existing"), 0o644)) // Generate manifest WITHOUT --force (should fail) opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/output.mf", "/testdir"}, fs) @@ -411,8 +411,8 @@ func TestGenerateAtomicWriteUsesTemp(t *testing.T) { fs := afero.NewMemMapFs() // Create test file - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("hello"), 0o644)) // Generate manifest opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/output.mf", "/testdir"}, fs) @@ -464,8 +464,8 @@ func TestGenerateAtomicWriteCleansUpOnError(t *testing.T) { baseFs := afero.NewMemMapFs() // Create test files - need enough content to trigger the write failure - require.NoError(t, baseFs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(baseFs, "/testdir/file1.txt", []byte("hello world this is a test file"), 0644)) + require.NoError(t, baseFs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(baseFs, "/testdir/file1.txt", []byte("hello world this is a test file"), 0o644)) // Wrap with failing writer that fails after writing some bytes fs := &failingWriterFs{Fs: baseFs, failAfter: 10} @@ -489,8 +489,8 @@ func TestGenerateValidatesInputPaths(t *testing.T) { fs := afero.NewMemMapFs() // Create one valid directory - require.NoError(t, fs.MkdirAll("/validdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/validdir/file.txt", []byte("content"), 0644)) + require.NoError(t, fs.MkdirAll("/validdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/validdir/file.txt", []byte("content"), 0o644)) t.Run("nonexistent path fails fast", func(t *testing.T) { opts := testOpts([]string{"mfer", "generate", "-q", "-o", "/output.mf", "/nonexistent"}, fs) @@ -527,7 +527,7 @@ func TestCheckDetectsManifestCorruption(t *testing.T) { // Create many small files with random names to generate a ~1MB manifest // Each manifest entry is roughly 50-60 bytes, so we need ~20000 files - require.NoError(t, fs.MkdirAll("/testdir", 0755)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) numFiles := 20000 for i := 0; i < numFiles; i++ { @@ -536,7 +536,7 @@ func TestCheckDetectsManifestCorruption(t *testing.T) { // Small random content content := make([]byte, 16+rng.Intn(48)) rng.Read(content) - require.NoError(t, afero.WriteFile(fs, filename, content, 0644)) + require.NoError(t, afero.WriteFile(fs, filename, content, 0o644)) } // Generate manifest outside of testdir @@ -551,7 +551,7 @@ func TestCheckDetectsManifestCorruption(t *testing.T) { t.Logf("manifest size: %d bytes (%d files)", len(validManifest), numFiles) // First corruption: truncate the manifest - require.NoError(t, afero.WriteFile(fs, "/manifest.mf", validManifest[:len(validManifest)/2], 0644)) + require.NoError(t, afero.WriteFile(fs, "/manifest.mf", validManifest[:len(validManifest)/2], 0o644)) // Check should fail with truncated manifest opts = testOpts([]string{"mfer", "check", "-q", "--base", "/testdir", "/manifest.mf"}, fs) @@ -559,7 +559,7 @@ func TestCheckDetectsManifestCorruption(t *testing.T) { assert.Equal(t, 1, exitCode, "check should fail with truncated manifest") // Verify check passes with valid manifest - require.NoError(t, afero.WriteFile(fs, "/manifest.mf", validManifest, 0644)) + require.NoError(t, afero.WriteFile(fs, "/manifest.mf", validManifest, 0o644)) opts = testOpts([]string{"mfer", "check", "-q", "--base", "/testdir", "/manifest.mf"}, fs) exitCode = RunWithOptions(opts) require.Equal(t, 0, exitCode, "check should pass with valid manifest") @@ -579,7 +579,7 @@ func TestCheckDetectsManifestCorruption(t *testing.T) { } corrupted[offset] = newByte - require.NoError(t, afero.WriteFile(fs, "/manifest.mf", corrupted, 0644)) + require.NoError(t, afero.WriteFile(fs, "/manifest.mf", corrupted, 0o644)) // Check should fail with corrupted manifest opts = testOpts([]string{"mfer", "check", "-q", "--base", "/testdir", "/manifest.mf"}, fs) @@ -588,6 +588,6 @@ func TestCheckDetectsManifestCorruption(t *testing.T) { i, offset, originalByte, newByte) // Restore valid manifest for next iteration - require.NoError(t, afero.WriteFile(fs, "/manifest.mf", validManifest, 0644)) + require.NoError(t, afero.WriteFile(fs, "/manifest.mf", validManifest, 0o644)) } } diff --git a/internal/cli/fetch.go b/internal/cli/fetch.go index a8a3bff..fda1881 100644 --- a/internal/cli/fetch.go +++ b/internal/cli/fetch.go @@ -257,7 +257,7 @@ func downloadFile(fileURL, localPath string, entry *mfer.MFFilePath, progress ch // Create parent directories if needed dir := filepath.Dir(localPath) if dir != "" && dir != "." { - if err := os.MkdirAll(dir, 0755); err != nil { + if err := os.MkdirAll(dir, 0o755); err != nil { return err } } diff --git a/internal/cli/fetch_test.go b/internal/cli/fetch_test.go index 91d8bc8..5809534 100644 --- a/internal/cli/fetch_test.go +++ b/internal/cli/fetch_test.go @@ -13,7 +13,6 @@ import ( "github.com/spf13/afero" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "sneak.berlin/go/mfer/internal/scanner" "sneak.berlin/go/mfer/mfer" ) @@ -107,15 +106,15 @@ func TestFetchFromHTTP(t *testing.T) { for path, content := range testFiles { fullPath := "/" + path // MemMapFs needs absolute paths dir := filepath.Dir(fullPath) - require.NoError(t, sourceFs.MkdirAll(dir, 0755)) - require.NoError(t, afero.WriteFile(sourceFs, fullPath, content, 0644)) + require.NoError(t, sourceFs.MkdirAll(dir, 0o755)) + require.NoError(t, afero.WriteFile(sourceFs, fullPath, content, 0o644)) } // Generate manifest using scanner - opts := &scanner.Options{ + opts := &mfer.ScannerOptions{ Fs: sourceFs, } - s := scanner.NewWithOptions(opts) + s := mfer.NewScannerWithOptions(opts) require.NoError(t, s.EnumerateFS(sourceFs, "/", nil)) var manifestBuf bytes.Buffer @@ -197,11 +196,11 @@ func TestFetchHashMismatch(t *testing.T) { // Create source filesystem with a test file sourceFs := afero.NewMemMapFs() originalContent := []byte("Original content") - require.NoError(t, afero.WriteFile(sourceFs, "/file.txt", originalContent, 0644)) + require.NoError(t, afero.WriteFile(sourceFs, "/file.txt", originalContent, 0o644)) // Generate manifest - opts := &scanner.Options{Fs: sourceFs} - s := scanner.NewWithOptions(opts) + opts := &mfer.ScannerOptions{Fs: sourceFs} + s := mfer.NewScannerWithOptions(opts) require.NoError(t, s.EnumerateFS(sourceFs, "/", nil)) var manifestBuf bytes.Buffer @@ -249,11 +248,11 @@ func TestFetchSizeMismatch(t *testing.T) { // Create source filesystem with a test file sourceFs := afero.NewMemMapFs() originalContent := []byte("Original content with specific size") - require.NoError(t, afero.WriteFile(sourceFs, "/file.txt", originalContent, 0644)) + require.NoError(t, afero.WriteFile(sourceFs, "/file.txt", originalContent, 0o644)) // Generate manifest - opts := &scanner.Options{Fs: sourceFs} - s := scanner.NewWithOptions(opts) + opts := &mfer.ScannerOptions{Fs: sourceFs} + s := mfer.NewScannerWithOptions(opts) require.NoError(t, s.EnumerateFS(sourceFs, "/", nil)) var manifestBuf bytes.Buffer @@ -298,11 +297,11 @@ func TestFetchProgress(t *testing.T) { sourceFs := afero.NewMemMapFs() // Create content large enough to trigger multiple progress updates content := bytes.Repeat([]byte("x"), 100*1024) // 100KB - require.NoError(t, afero.WriteFile(sourceFs, "/large.txt", content, 0644)) + require.NoError(t, afero.WriteFile(sourceFs, "/large.txt", content, 0o644)) // Generate manifest - opts := &scanner.Options{Fs: sourceFs} - s := scanner.NewWithOptions(opts) + opts := &mfer.ScannerOptions{Fs: sourceFs} + s := mfer.NewScannerWithOptions(opts) require.NoError(t, s.EnumerateFS(sourceFs, "/", nil)) var manifestBuf bytes.Buffer diff --git a/internal/cli/freshen_test.go b/internal/cli/freshen_test.go index f716a71..2a18cb0 100644 --- a/internal/cli/freshen_test.go +++ b/internal/cli/freshen_test.go @@ -8,7 +8,6 @@ import ( "github.com/spf13/afero" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "sneak.berlin/go/mfer/internal/scanner" "sneak.berlin/go/mfer/mfer" ) @@ -16,20 +15,20 @@ func TestFreshenUnchanged(t *testing.T) { // Create filesystem with test files fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("content1"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("content2"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("content1"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("content2"), 0o644)) // Generate initial manifest - opts := &scanner.Options{Fs: fs} - s := scanner.NewWithOptions(opts) + opts := &mfer.ScannerOptions{Fs: fs} + s := mfer.NewScannerWithOptions(opts) require.NoError(t, s.EnumeratePath("/testdir", nil)) var manifestBuf bytes.Buffer require.NoError(t, s.ToManifest(context.Background(), &manifestBuf, nil)) // Write manifest to filesystem - require.NoError(t, afero.WriteFile(fs, "/testdir/.index.mf", manifestBuf.Bytes(), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/.index.mf", manifestBuf.Bytes(), 0o644)) // Parse manifest to verify manifest, err := mfer.NewManifestFromFile(fs, "/testdir/.index.mf") @@ -41,20 +40,20 @@ func TestFreshenWithChanges(t *testing.T) { // Create filesystem with test files fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("content1"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("content2"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("content1"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("content2"), 0o644)) // Generate initial manifest - opts := &scanner.Options{Fs: fs} - s := scanner.NewWithOptions(opts) + opts := &mfer.ScannerOptions{Fs: fs} + s := mfer.NewScannerWithOptions(opts) require.NoError(t, s.EnumeratePath("/testdir", nil)) var manifestBuf bytes.Buffer require.NoError(t, s.ToManifest(context.Background(), &manifestBuf, nil)) // Write manifest to filesystem - require.NoError(t, afero.WriteFile(fs, "/testdir/.index.mf", manifestBuf.Bytes(), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/.index.mf", manifestBuf.Bytes(), 0o644)) // Verify initial manifest has 2 files manifest, err := mfer.NewManifestFromFile(fs, "/testdir/.index.mf") @@ -62,10 +61,10 @@ func TestFreshenWithChanges(t *testing.T) { assert.Len(t, manifest.Files(), 2) // Add a new file - require.NoError(t, afero.WriteFile(fs, "/testdir/file3.txt", []byte("content3"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file3.txt", []byte("content3"), 0o644)) // Modify file2 (change content and size) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("modified content2"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("modified content2"), 0o644)) // Remove file1 require.NoError(t, fs.Remove("/testdir/file1.txt")) diff --git a/mfer/scanner_test.go b/mfer/scanner_test.go index f30c67b..b6e6296 100644 --- a/mfer/scanner_test.go +++ b/mfer/scanner_test.go @@ -38,7 +38,7 @@ func TestNewScannerWithOptions(t *testing.T) { func TestScannerEnumerateFile(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, afero.WriteFile(fs, "/test.txt", []byte("hello world"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/test.txt", []byte("hello world"), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) err := s.EnumerateFile("/test.txt") @@ -62,10 +62,10 @@ func TestScannerEnumerateFileMissing(t *testing.T) { func TestScannerEnumeratePath(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir/subdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("one"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("two"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/file3.txt", []byte("three"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir/subdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("one"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("two"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/subdir/file3.txt", []byte("three"), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) err := s.EnumeratePath("/testdir", nil) @@ -77,9 +77,9 @@ func TestScannerEnumeratePath(t *testing.T) { func TestScannerEnumeratePathWithProgress(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("one"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("two"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("one"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("two"), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) progress := make(chan EnumerateStatus, 10) @@ -101,10 +101,10 @@ func TestScannerEnumeratePathWithProgress(t *testing.T) { func TestScannerEnumeratePaths(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/dir1", 0755)) - require.NoError(t, fs.MkdirAll("/dir2", 0755)) - require.NoError(t, afero.WriteFile(fs, "/dir1/a.txt", []byte("aaa"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/dir2/b.txt", []byte("bbb"), 0644)) + require.NoError(t, fs.MkdirAll("/dir1", 0o755)) + require.NoError(t, fs.MkdirAll("/dir2", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/dir1/a.txt", []byte("aaa"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/dir2/b.txt", []byte("bbb"), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) err := s.EnumeratePaths(nil, "/dir1", "/dir2") @@ -115,10 +115,10 @@ func TestScannerEnumeratePaths(t *testing.T) { func TestScannerExcludeDotfiles(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir/.hidden", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/visible.txt", []byte("visible"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden.txt", []byte("hidden"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden/inside.txt", []byte("inside"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir/.hidden", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/visible.txt", []byte("visible"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden.txt", []byte("hidden"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/.hidden/inside.txt", []byte("inside"), 0o644)) t.Run("exclude by default", func(t *testing.T) { s := NewScannerWithOptions(&ScannerOptions{Fs: fs, IncludeDotfiles: false}) @@ -141,9 +141,9 @@ func TestScannerExcludeDotfiles(t *testing.T) { func TestScannerToManifest(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("content one"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("content two"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file1.txt", []byte("content one"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file2.txt", []byte("content two"), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) err := s.EnumeratePath("/testdir", nil) @@ -160,8 +160,8 @@ func TestScannerToManifest(t *testing.T) { func TestScannerToManifestWithProgress(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file.txt", bytes.Repeat([]byte("x"), 1000), 0644)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file.txt", bytes.Repeat([]byte("x"), 1000), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) err := s.EnumeratePath("/testdir", nil) @@ -189,11 +189,11 @@ func TestScannerToManifestWithProgress(t *testing.T) { func TestScannerToManifestContextCancellation(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) // Create many files to ensure we have time to cancel for i := 0; i < 100; i++ { name := string(rune('a'+i%26)) + string(rune('0'+i/26)) + ".txt" - require.NoError(t, afero.WriteFile(fs, "/testdir/"+name, bytes.Repeat([]byte("x"), 100), 0644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/"+name, bytes.Repeat([]byte("x"), 100), 0o644)) } s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) @@ -223,7 +223,7 @@ func TestScannerToManifestEmptyScanner(t *testing.T) { func TestScannerFilesCopiesSlice(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, afero.WriteFile(fs, "/test.txt", []byte("hello"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/test.txt", []byte("hello"), 0o644)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) require.NoError(t, s.EnumerateFile("/test.txt")) @@ -237,9 +237,9 @@ func TestScannerFilesCopiesSlice(t *testing.T) { func TestScannerEnumerateFS(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir/sub", 0755)) - require.NoError(t, afero.WriteFile(fs, "/testdir/file.txt", []byte("hello"), 0644)) - require.NoError(t, afero.WriteFile(fs, "/testdir/sub/nested.txt", []byte("world"), 0644)) + require.NoError(t, fs.MkdirAll("/testdir/sub", 0o755)) + require.NoError(t, afero.WriteFile(fs, "/testdir/file.txt", []byte("hello"), 0o644)) + require.NoError(t, afero.WriteFile(fs, "/testdir/sub/nested.txt", []byte("world"), 0o644)) // Create a basepath filesystem baseFs := afero.NewBasePathFs(fs, "/testdir") @@ -297,7 +297,7 @@ func TestSendStatusNilChannel(t *testing.T) { func TestScannerFileEntryFields(t *testing.T) { fs := afero.NewMemMapFs() now := time.Now().Truncate(time.Second) - require.NoError(t, afero.WriteFile(fs, "/test.txt", []byte("content"), 0644)) + require.NoError(t, afero.WriteFile(fs, "/test.txt", []byte("content"), 0o644)) require.NoError(t, fs.Chtimes("/test.txt", now, now)) s := NewScannerWithOptions(&ScannerOptions{Fs: fs}) @@ -316,12 +316,12 @@ func TestScannerFileEntryFields(t *testing.T) { func TestScannerLargeFileEnumeration(t *testing.T) { fs := afero.NewMemMapFs() - require.NoError(t, fs.MkdirAll("/testdir", 0755)) + require.NoError(t, fs.MkdirAll("/testdir", 0o755)) // Create 100 files for i := 0; i < 100; i++ { name := "/testdir/" + string(rune('a'+i%26)) + string(rune('0'+i/26%10)) + ".txt" - require.NoError(t, afero.WriteFile(fs, name, []byte("data"), 0644)) + require.NoError(t, afero.WriteFile(fs, name, []byte("data"), 0o644)) } s := NewScannerWithOptions(&ScannerOptions{Fs: fs})