github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/fs/writer/hashingwriter_test.go (about)

     1  package writer
     2  
     3  import (
     4  	"io/ioutil"
     5  	"testing"
     6  
     7  	"github.com/mgoltzsche/ctnr/pkg/fs"
     8  	"github.com/mgoltzsche/ctnr/pkg/fs/source"
     9  	"github.com/mgoltzsche/ctnr/pkg/fs/testutils"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestHashingWriter(t *testing.T) {
    15  	mockWriter := &mockHashingWriterDelegate{t, testutils.NewWriterMock(t, fs.AttrsHash)}
    16  	testee := NewHashingWriter(mockWriter)
    17  	src, err := testee.File("/file", source.NewSourceFile(fs.NewReadableBytes([]byte("testcontent")), fs.FileAttrs{Mode: 0640}))
    18  	require.NoError(t, err)
    19  	assert.NotNil(t, src, "returned source")
    20  	a, err := src.DeriveAttrs()
    21  	require.NoError(t, err, "result.DeriveAttrs()")
    22  	if !assert.Equal(t, "sha256:25edaa1f62bd4f2a7e4aa7088cf4c93449c1881af03434bfca027f1f82d69dba", a.Hash) {
    23  		t.FailNow()
    24  	}
    25  	expected := []string{
    26  		"/file type=file mode=640 hash=sha256:25edaa1f62bd4f2a7e4aa7088cf4c93449c1881af03434bfca027f1f82d69dba",
    27  	}
    28  	if !assert.Equal(t, expected, mockWriter.Written) {
    29  		t.FailNow()
    30  	}
    31  }
    32  
    33  type mockHashingWriterDelegate struct {
    34  	t *testing.T
    35  	*testutils.WriterMock
    36  }
    37  
    38  func (w *mockHashingWriterDelegate) File(path string, src fs.FileSource) (fs.Source, error) {
    39  	r, err := src.Reader()
    40  	require.NoError(w.t, err, "Reader()")
    41  	_, err = ioutil.ReadAll(r)
    42  	require.NoError(w.t, err, "ReadAll(Reader())")
    43  	err = r.Close()
    44  	require.NoError(w.t, err, "reader.Close()")
    45  	return w.WriterMock.File(path, src)
    46  }