1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
package archive
import (
"bufio"
"bytes"
"io"
"sync/atomic"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTryProcFilter(t *testing.T) {
t.Run("Invalid filter path", func(t *testing.T) {
args := []string{"does-not-exist"}
input := bufio.NewReader(bytes.NewBufferString("foo"))
result, ok := tryProcFilter(args, input, func() {})
assert.Nil(t, result)
assert.False(t, ok)
})
t.Run("Valid filter path", func(t *testing.T) {
inputData := "input data"
args := []string{"cat", "-"}
input := bufio.NewReader(bytes.NewBufferString(inputData))
result, ok := tryProcFilter(args, input, func() {})
assert.NotNil(t, result)
assert.True(t, ok)
output, err := io.ReadAll(result)
require.NoError(t, err)
assert.Equal(t, inputData, string(output))
})
t.Run("Filter fails with error", func(t *testing.T) {
inputData := "input data"
var cleanedUp atomic.Bool
args := []string{"sh", "-c", "echo 'oh no' 1>&2; exit 21"}
input := bufio.NewReader(bytes.NewBufferString(inputData))
result, ok := tryProcFilter(args, input, func() { cleanedUp.Store(true) })
assert.NotNil(t, result)
assert.True(t, ok)
_, err := io.ReadAll(result)
require.Error(t, err)
assert.Contains(t, err.Error(), "oh no: exit status 21")
assert.Eventually(t, func() bool {
return cleanedUp.Load()
}, 5*time.Second, 10*time.Millisecond, "clean up function was not called")
})
}
|