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 }