//nolint:testpackage // exercises the unexported cleanupBlobTempFile package snapshot import ( "errors" "os" "testing" "github.com/spf13/afero" "sneak.berlin/go/vaultik/internal/blob" ) // A blob temp file that cannot be closed or removed must make the cleanup // return an error, not end the process. func TestCleanupBlobTempFileReturnsErrors(t *testing.T) { t.Parallel() fs := afero.NewOsFs() s := &Scanner{fs: fs} tests := []struct { name string // prepare runs before the cleanup and makes its close or remove // fail. prepare func(tempFile afero.File) error want error }{ { name: "close fails", prepare: func(tempFile afero.File) error { return tempFile.Close() }, want: os.ErrClosed, }, { name: "remove fails", prepare: func(tempFile afero.File) error { return fs.Remove(tempFile.Name()) }, want: os.ErrNotExist, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { t.Parallel() tempFile, err := afero.TempFile(fs, t.TempDir(), "blob-*.tmp") if err != nil { t.Fatal(err) } err = tt.prepare(tempFile) if err != nil { t.Fatal(err) } err = s.cleanupBlobTempFile(&blob.WithReader{TempFile: tempFile}) if !errors.Is(err, tt.want) { t.Fatalf("expected an error wrapping %v, got: %v", tt.want, err) } }) } }