@@ -17,9 +17,12 @@ import (
1717 "time"
1818
1919 "github.com/stretchr/testify/assert"
20+ "github.com/stretchr/testify/require"
2021 diskbufferreader "github.com/trufflesecurity/disk-buffer-reader"
2122
2223 "github.com/trufflesecurity/trufflehog/v3/pkg/context"
24+ "github.com/trufflesecurity/trufflehog/v3/pkg/pb/source_metadatapb"
25+ "github.com/trufflesecurity/trufflehog/v3/pkg/pb/sourcespb"
2326 "github.com/trufflesecurity/trufflehog/v3/pkg/sources"
2427)
2528
@@ -153,6 +156,53 @@ func BenchmarkHandleFile(b *testing.B) {
153156 }
154157}
155158
159+ func TestHandleChunksWithErrorSetsFilesystemLine (t * testing.T ) {
160+ chunkCh := make (chan * sources.Chunk , 2 )
161+ reporter := sources.ChanReporter {Ch : chunkCh }
162+
163+ chunkSkel := & sources.Chunk {
164+ SourceType : sourcespb .SourceType_SOURCE_TYPE_FILESYSTEM ,
165+ SourceMetadata : & source_metadatapb.MetaData {
166+ Data : & source_metadatapb.MetaData_Filesystem {
167+ Filesystem : & source_metadatapb.Filesystem {File : "test.txt" },
168+ },
169+ },
170+ }
171+
172+ chunkSize := sources .DefaultChunkSize
173+ peekSize := sources .DefaultPeekSize
174+
175+ chunkOneMain := bytes .Repeat ([]byte ("a\n " ), chunkSize / 2 )
176+ chunkOnePeek := bytes .Repeat ([]byte ("p\n " ), peekSize / 2 )
177+ chunkOne := append (chunkOneMain , chunkOnePeek ... )
178+
179+ chunkTwo := bytes .Repeat ([]byte ("b\n " ), 10 )
180+
181+ dataErrChan := make (chan DataOrErr , 2 )
182+ dataErrChan <- DataOrErr {Data : chunkOne }
183+ dataErrChan <- DataOrErr {Data : chunkTwo }
184+ close (dataErrChan )
185+
186+ require .NoError (t , handleChunksWithError (context .Background (), dataErrChan , chunkSkel , reporter ))
187+
188+ close (chunkCh )
189+ var chunks []* sources.Chunk
190+ for ch := range chunkCh {
191+ chunks = append (chunks , ch )
192+ }
193+
194+ require .Len (t , chunks , 2 )
195+
196+ firstMeta := chunks [0 ].SourceMetadata .GetFilesystem ()
197+ require .NotNil (t , firstMeta )
198+ require .Equal (t , int64 (1 ), firstMeta .GetLine ())
199+
200+ linesInFirstChunk := int64 (bytes .Count (chunkOne [:chunkSize ], []byte ("\n " )))
201+ secondMeta := chunks [1 ].SourceMetadata .GetFilesystem ()
202+ require .NotNil (t , secondMeta )
203+ require .Equal (t , linesInFirstChunk + 1 , secondMeta .GetLine ())
204+ }
205+
156206func TestSkipArchive (t * testing.T ) {
157207 file , err := os .Open ("testdata/test.tgz" )
158208 assert .Nil (t , err )
0 commit comments