diff options
| author | Dave Henderson <dhenderson@gmail.com> | 2018-02-10 10:13:58 -0500 |
|---|---|---|
| committer | Dave Henderson <dhenderson@gmail.com> | 2018-03-03 10:58:05 -0500 |
| commit | 96ab610f904c48fa4e85bb42e212f49eb3a4ff1c (patch) | |
| tree | 81caae2b83298694798eea978a2e28380e29ef62 /file | |
| parent | 5f47dac2c1273e189f4b70b74a6dfea68cf788ff (diff) | |
Adding file namespace
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'file')
| -rw-r--r-- | file/file.go | 45 | ||||
| -rw-r--r-- | file/file_test.go | 43 |
2 files changed, 88 insertions, 0 deletions
diff --git a/file/file.go b/file/file.go new file mode 100644 index 00000000..10f58a41 --- /dev/null +++ b/file/file.go @@ -0,0 +1,45 @@ +package file + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + + "github.com/spf13/afero" +) + +// for overriding in tests +var fs = afero.NewOsFs() + +// Read - +func Read(filename string) (string, error) { + inFile, err := fs.OpenFile(filename, os.O_RDONLY, 0) + if err != nil { + return "", fmt.Errorf("failed to open %s\n%v", filename, err) + } + // nolint: errcheck + defer inFile.Close() + bytes, err := ioutil.ReadAll(inFile) + if err != nil { + err = fmt.Errorf("read failed for %s\n%v", filename, err) + return "", err + } + return string(bytes), nil +} + +// ReadDir - +func ReadDir(path string) ([]string, error) { + f, err := fs.Open(path) + if err != nil { + return nil, err + } + i, err := f.Stat() + if err != nil { + return nil, err + } + if i.IsDir() { + return f.Readdirnames(0) + } + return nil, errors.New("file is not a directory") +} diff --git a/file/file_test.go b/file/file_test.go new file mode 100644 index 00000000..97cfa0fb --- /dev/null +++ b/file/file_test.go @@ -0,0 +1,43 @@ +package file + +import ( + "testing" + + "github.com/spf13/afero" + "github.com/stretchr/testify/assert" +) + +func TestRead(t *testing.T) { + origfs := fs + defer func() { fs = origfs }() + fs = afero.NewMemMapFs() + _ = fs.Mkdir("/tmp", 0777) + f, _ := fs.Create("/tmp/foo") + _, _ = f.Write([]byte("foo")) + + actual, err := Read("/tmp/foo") + assert.NoError(t, err) + assert.Equal(t, "foo", actual) + + actual, err = Read("/tmp/bar") + assert.Error(t, err) +} + +func TestReadDir(t *testing.T) { + origfs := fs + defer func() { fs = origfs }() + fs = afero.NewMemMapFs() + fs.Mkdir("/tmp", 0777) + fs.Create("/tmp/foo") + fs.Create("/tmp/bar") + fs.Create("/tmp/baz") + fs.Mkdir("/tmp/qux", 0777) + fs.Create("/tmp/qux/quux") + + actual, err := ReadDir("/tmp") + assert.NoError(t, err) + assert.Equal(t, []string{"bar", "baz", "foo", "qux"}, actual) + + _, err = ReadDir("/tmp/foo") + assert.Error(t, err) +} |
