Refactoring and first steps to make multi OS compatible.

- Using cgofuse to be compatible with multiple OSes
- Refactor to make possible better testing
- Add a bunch of tests
- Add code coverage

Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
This commit is contained in:
Antonio Navarro Perez 2020-09-27 21:23:47 +02:00
parent 89af681694
commit 45f10e2f81
27 changed files with 1291 additions and 440 deletions

View file

@ -20,7 +20,7 @@ type DiskTeeReader struct {
tr io.Reader
}
func NewDiskTeeReader(r io.Reader) (*DiskTeeReader, error) {
func NewDiskTeeReader(r io.Reader) (Reader, error) {
fr, err := ioutil.TempFile("", "dtb_tmp")
if err != nil {
return nil, err

View file

@ -11,6 +11,8 @@ import (
var testData []byte = []byte("Hello World")
func TestReadData(t *testing.T) {
t.Parallel()
require := require.New(t)
br := bytes.NewReader(testData)
@ -31,6 +33,8 @@ func TestReadData(t *testing.T) {
}
func TestReadDataEOF(t *testing.T) {
t.Parallel()
require := require.New(t)
br := bytes.NewReader(testData)

9
iio/reader.go Normal file
View file

@ -0,0 +1,9 @@
package iio
import "io"
type Reader interface {
io.ReaderAt
io.Closer
io.Reader
}

View file

@ -1,22 +0,0 @@
package iio
import (
"io"
log "github.com/sirupsen/logrus"
)
func CloseIfCloseable(r interface{}) error {
log.Debug("closing file...")
if r == nil {
return nil
}
closer, ok := r.(io.Closer)
if !ok {
log.Debug("file is not implementing close method")
return nil
}
return closer.Close()
}

View file

@ -10,9 +10,10 @@ type readAtWrapper struct {
io.ReadSeeker
io.ReaderAt
io.Closer
}
func NewReadAtWrapper(r io.ReadSeeker) io.ReaderAt {
func NewReadAtWrapper(r io.ReadSeeker) Reader {
return &readAtWrapper{ReadSeeker: r}
}
@ -26,3 +27,12 @@ func (rw *readAtWrapper) ReadAt(p []byte, off int64) (int, error) {
return rw.Read(p)
}
func (rw *readAtWrapper) Close() error {
c, ok := rw.ReadSeeker.(io.Closer)
if !ok {
return nil
}
return c.Close()
}