summaryrefslogtreecommitdiff
path: root/file
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2018-02-10 10:13:58 -0500
committerDave Henderson <dhenderson@gmail.com>2018-03-03 10:58:05 -0500
commit96ab610f904c48fa4e85bb42e212f49eb3a4ff1c (patch)
tree81caae2b83298694798eea978a2e28380e29ef62 /file
parent5f47dac2c1273e189f4b70b74a6dfea68cf788ff (diff)
Adding file namespace
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'file')
-rw-r--r--file/file.go45
-rw-r--r--file/file_test.go43
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)
+}