fix DirExists (#1388)

This commit is contained in:
bnkai 2021-05-17 08:05:29 +03:00 committed by GitHub
parent ce20df343a
commit aba2514534
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 4 deletions

View file

@ -39,10 +39,12 @@ func FileExists(path string) (bool, error) {
// DirExists returns true if the given path exists and is a directory
func DirExists(path string) (bool, error) {
exists, _ := FileExists(path)
fileInfo, _ := os.Stat(path)
if !exists || !fileInfo.IsDir() {
return false, fmt.Errorf("path either doesn't exist, or is not a directory <%s>", path)
fileInfo, err := os.Stat(path)
if err != nil {
return false, fmt.Errorf("path doesn't exist <%s>", path)
}
if !fileInfo.IsDir() {
return false, fmt.Errorf("path is not a directory <%s>", path)
}
return true, nil
}

View file

@ -1,6 +1,8 @@
package utils
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
@ -41,3 +43,40 @@ func TestIsPathInDir(t *testing.T) {
assert.Equal(tc.expected, result, "[%d] expected: %t for dir: %s; pathToCheck: %s", i, tc.expected, tc.dir, tc.pathToCheck)
}
}
func TestDirExists(t *testing.T) {
type test struct {
dir string
expected bool
}
const st = "stash_tmp"
tmp := os.TempDir()
tmpDir, err := ioutil.TempDir(tmp, st) // create a tmp dir in the system's tmp folder
if err == nil {
defer os.RemoveAll(tmpDir)
tmpFile, err := ioutil.TempFile(tmpDir, st)
if err != nil {
return
}
tmpFile.Close()
tests := []test{
{dir: tmpDir, expected: true}, // exists
{dir: tmpFile.Name(), expected: false}, // not a directory
{dir: filepath.Join(tmpDir, st), expected: false}, // doesn't exist
{dir: "\000x", expected: false}, // stat error \000(ASCII: NUL) is an invalid character in unix,ntfs file names.
}
assert := assert.New(t)
for i, tc := range tests {
result, _ := DirExists(tc.dir)
assert.Equal(tc.expected, result, "[%d] expected: %t for dir: %s;", i, tc.expected, tc.dir)
}
}
}