116 lines
3.0 KiB
Go
116 lines
3.0 KiB
Go
package readers
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
|
|
)
|
|
|
|
func TestBufferedFileReader(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := []byte("Hello, World!")
|
|
|
|
bufferReadSeekCloser, err := NewBufferedFileReader(context.Background(), bytes.NewReader(data))
|
|
assert.NoError(t, err)
|
|
defer bufferReadSeekCloser.Close()
|
|
|
|
// Test Read.
|
|
buffer := make([]byte, len(data))
|
|
n, err := bufferReadSeekCloser.Read(buffer)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, len(data), n)
|
|
assert.Equal(t, data, buffer)
|
|
|
|
// Test Seek.
|
|
offset := 7
|
|
seekPos, err := bufferReadSeekCloser.Seek(int64(offset), io.SeekStart)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, int64(offset), seekPos)
|
|
|
|
// Test ReadAt.
|
|
buffer = make([]byte, len(data)-offset)
|
|
n, err = bufferReadSeekCloser.ReadAt(buffer, int64(offset))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, len(data)-offset, n)
|
|
assert.Equal(t, data[offset:], buffer)
|
|
|
|
// Test Close.
|
|
err = bufferReadSeekCloser.Close()
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestBufferedFileReaderClose(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := []byte("Hello, World!")
|
|
|
|
bufferReadSeekCloser, err := NewBufferedFileReader(context.Background(), bytes.NewReader(data))
|
|
assert.NoError(t, err)
|
|
|
|
err = bufferReadSeekCloser.Close()
|
|
assert.NoError(t, err)
|
|
|
|
// Read after closing.
|
|
buffer := make([]byte, len(data))
|
|
n, err := bufferReadSeekCloser.Read(buffer)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, len(data), n)
|
|
assert.Equal(t, data, buffer)
|
|
|
|
// Seek after closing.
|
|
offset := 7
|
|
seekPos, err := bufferReadSeekCloser.Seek(int64(offset), io.SeekStart)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, int64(offset), seekPos)
|
|
|
|
// ReadAt after closing.
|
|
buffer = make([]byte, len(data)-offset)
|
|
n, err = bufferReadSeekCloser.ReadAt(buffer, int64(offset))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, len(data)-offset, n)
|
|
assert.Equal(t, data[offset:], buffer)
|
|
}
|
|
|
|
func TestBufferedFileReaderReadFromFile(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
// Create a large byte slice to simulate data exceeding the threshold.
|
|
largeData := make([]byte, 1024*1024) // 1 MB
|
|
for i := range largeData {
|
|
largeData[i] = byte(i % 256)
|
|
}
|
|
|
|
bufferReadSeekCloser, err := NewBufferedFileReader(context.Background(), bytes.NewReader(largeData))
|
|
assert.NoError(t, err)
|
|
defer bufferReadSeekCloser.Close()
|
|
|
|
// Test Read.
|
|
buffer := make([]byte, len(largeData))
|
|
n, err := bufferReadSeekCloser.Read(buffer)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, len(largeData), n)
|
|
assert.Equal(t, largeData, buffer)
|
|
|
|
// Test Seek.
|
|
offset := 512 * 1024 // 512 KB
|
|
seekPos, err := bufferReadSeekCloser.Seek(int64(offset), io.SeekStart)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, int64(offset), seekPos)
|
|
|
|
// Test ReadAt.
|
|
buffer = make([]byte, len(largeData)-offset)
|
|
n, err = bufferReadSeekCloser.ReadAt(buffer, int64(offset))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, len(largeData)-offset, n)
|
|
assert.Equal(t, largeData[offset:], buffer)
|
|
|
|
// Test Close.
|
|
err = bufferReadSeekCloser.Close()
|
|
assert.NoError(t, err)
|
|
}
|