From d3d2ed3469955763ef221f1815f4216316a91704 Mon Sep 17 00:00:00 2001 From: sentriz Date: Thu, 24 Feb 2022 16:04:59 +0000 Subject: [PATCH] add a test for scan tag errors --- server/mockfs/mockfs.go | 8 ++++++++ server/scanner/scanner.go | 2 +- server/scanner/scanner_test.go | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/server/mockfs/mockfs.go b/server/mockfs/mockfs.go index 8b14ba3..ccc6ac9 100644 --- a/server/mockfs/mockfs.go +++ b/server/mockfs/mockfs.go @@ -75,6 +75,10 @@ func (m *MockFS) ScanAndClean() *scanner.Context { return ctx } +func (m *MockFS) ScanAndCleanErr() (*scanner.Context, error) { + return m.scanner.ScanAndClean(scanner.ScanOptions{}) +} + func (m *MockFS) ResetDates() { t := time.Date(2020, 0, 0, 0, 0, 0, 0, time.UTC) if err := m.db.Model(db.Album{}).Updates(db.Album{CreatedAt: t, UpdatedAt: t, ModifiedAt: t}).Error; err != nil { @@ -119,6 +123,10 @@ func (m *MockFS) addItems(prefix string, covers bool) { } } +func (m *MockFS) NumTracks() int { + return len(m.tagReader.paths) +} + func (m *MockFS) RemoveAll(path string) { abspath := filepath.Join(m.dir, path) if err := os.RemoveAll(abspath); err != nil { diff --git a/server/scanner/scanner.go b/server/scanner/scanner.go index 28e0d32..7006702 100644 --- a/server/scanner/scanner.go +++ b/server/scanner/scanner.go @@ -101,7 +101,7 @@ func (s *Scanner) ScanAndClean(opts ScanOptions) (*Context, error) { } if c.errs.Len() > 0 { - return nil, c.errs + return c, c.errs } return c, nil diff --git a/server/scanner/scanner_test.go b/server/scanner/scanner_test.go index 5d812b1..b5cb3e4 100644 --- a/server/scanner/scanner_test.go +++ b/server/scanner/scanner_test.go @@ -1,6 +1,7 @@ package scanner_test import ( + "errors" "fmt" "io/ioutil" "log" @@ -12,8 +13,10 @@ import ( _ "github.com/jinzhu/gorm/dialects/sqlite" "github.com/matryer/is" + "go.senan.xyz/gonic/multierr" "go.senan.xyz/gonic/server/db" "go.senan.xyz/gonic/server/mockfs" + "go.senan.xyz/gonic/server/scanner" ) func TestMain(m *testing.M) { @@ -32,7 +35,7 @@ func TestTableCounts(t *testing.T) { var tracks int is.NoErr(m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks - is.Equal(tracks, 3*3*3) // not all tracks + is.Equal(tracks, m.NumTracks()) var albums int is.NoErr(m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums @@ -483,3 +486,31 @@ func TestArtistHasCover(t *testing.T) { is.NoErr(m.DB().Where("name=?", "artist-0").First(&artistWithout).Error) is.Equal(artistWithout.Cover, "") } + +func TestTagErrors(t *testing.T) { + t.Parallel() + is := is.New(t) + m := mockfs.New(t) + defer m.CleanUp() + + m.AddItemsWithCovers() + m.SetTags("artist-1/album-0/track-0.flac", func(tags *mockfs.Tags) error { + return scanner.ErrReadingTags + }) + m.SetTags("artist-1/album-1/track-0.flac", func(tags *mockfs.Tags) error { + return scanner.ErrReadingTags + }) + + var errs *multierr.Err + ctx, err := m.ScanAndCleanErr() + is.True(errors.As(err, &errs)) + is.Equal(errs.Len(), 2) // we have 2 dir errors + is.Equal(ctx.SeenTracks(), m.NumTracks()-(3*2)) // we saw all tracks bar 2 album contents + is.Equal(ctx.SeenTracksNew(), m.NumTracks()-(3*2)) // we have all tracks bar 2 album contents + + ctx, err = m.ScanAndCleanErr() + is.True(errors.As(err, &errs)) + is.Equal(errs.Len(), 2) // we have 2 dir errors + is.Equal(ctx.SeenTracks(), m.NumTracks()-(3*2)) // we saw all tracks bar 2 album contents + is.Equal(ctx.SeenTracksNew(), 0) // we have no new tracks +}