Files
trufflehog/pkg/buffers/buffer/buffer_test.go
Bob Idleandahrav 409beeb18b golangci-lint: replace exportloopref with copyloopvar and remove the copy of the 'for' variables (#3591)
* fix: replace golangci-lint exportloopref with copyloopvar

* fix: remove copy of the 'for' variables

---------

Co-authored-by: ahrav <[email protected]>
2024-11-13 12:52:04 -08:00

92 lines
2.5 KiB
Go

package buffer
import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
)
func TestBufferWrite(t *testing.T) {
t.Parallel()
tests := []struct {
name string
initialCapacity int
writeDataSequence [][]byte // Sequence of writes to simulate multiple writes
expectedSize int
expectedCap int
}{
{
name: "Write to empty buffer",
initialCapacity: defaultBufferSize,
writeDataSequence: [][]byte{
[]byte("hello"),
},
expectedSize: 5,
expectedCap: defaultBufferSize, // No growth for small data
},
{
name: "Write causing growth",
initialCapacity: 10, // Small initial capacity to force growth
writeDataSequence: [][]byte{
[]byte("this is a longer string exceeding initial capacity"),
},
expectedSize: 50,
expectedCap: 50,
},
{
name: "Write nil data",
initialCapacity: defaultBufferSize,
writeDataSequence: [][]byte{nil},
expectedCap: defaultBufferSize,
},
{
name: "Repeated writes, cumulative growth",
initialCapacity: 20, // Set an initial capacity to test growth over multiple writes
writeDataSequence: [][]byte{
[]byte("first write, "),
[]byte("second write, "),
[]byte("third write exceeding the initial capacity."),
},
expectedSize: 70,
expectedCap: 70, // Expect capacity to grow to accommodate all writes
},
{
name: "Write large single data to test significant growth",
initialCapacity: 50, // Set an initial capacity smaller than the data to be written
writeDataSequence: [][]byte{
bytes.Repeat([]byte("a"), 1024), // 1KB data to significantly exceed initial capacity
},
expectedSize: 1024,
expectedCap: 1024,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
buf := &Buffer{Buffer: bytes.NewBuffer(make([]byte, 0, tc.initialCapacity))}
totalWritten := 0
for _, data := range tc.writeDataSequence {
n, err := buf.Write(data)
assert.NoError(t, err)
totalWritten += n
}
assert.Equal(t, tc.expectedSize, totalWritten)
assert.Equal(t, tc.expectedSize, buf.Len())
assert.GreaterOrEqual(t, buf.Cap(), tc.expectedCap)
})
}
}
func TestReadCloserClose(t *testing.T) {
t.Parallel()
onCloseCalled := false
rc := ReadCloser([]byte("data"), func() { onCloseCalled = true })
err := rc.Close()
assert.NoError(t, err)
assert.True(t, onCloseCalled, "onClose callback should be called upon Close")
}