mirror of https://github.com/spf13/afero.git
Add check for path separator to TempDir
This commit is contained in:
parent
45ef3465a4
commit
16fd4c44e8
|
@ -17,6 +17,7 @@ package afero
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -218,6 +219,12 @@ func (a Afero) TempDir(dir, prefix string) (name string, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TempDir(fs Fs, dir, prefix string) (name string, err error) {
|
func TempDir(fs Fs, dir, prefix string) (name string, err error) {
|
||||||
|
|
||||||
|
if strings.Contains(prefix, string(os.PathSeparator)) {
|
||||||
|
err = fmt.Errorf("%s: pattern contains path separator", prefix)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if dir == "" {
|
if dir == "" {
|
||||||
dir = os.TempDir()
|
dir = os.TempDir()
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ package afero
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -174,3 +175,77 @@ func TestTempFile(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTempDir(t *testing.T) {
|
||||||
|
|
||||||
|
type testData struct {
|
||||||
|
dir string
|
||||||
|
prefix string
|
||||||
|
expectedPrefix string
|
||||||
|
shouldError bool
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := map[string]testData{
|
||||||
|
"TempDirWithStar": {
|
||||||
|
dir: "",
|
||||||
|
prefix: "withStar*",
|
||||||
|
expectedPrefix: "/tmp/withStar",
|
||||||
|
},
|
||||||
|
"TempDirWithTwoStars": {
|
||||||
|
dir: "",
|
||||||
|
prefix: "withStar**",
|
||||||
|
expectedPrefix: "/tmp/withStar*",
|
||||||
|
},
|
||||||
|
"TempDirWithoutStar": {
|
||||||
|
dir: "",
|
||||||
|
prefix: "withoutStar",
|
||||||
|
expectedPrefix: "/tmp/withoutStar",
|
||||||
|
},
|
||||||
|
"UserDir": {
|
||||||
|
dir: "dir1",
|
||||||
|
prefix: "",
|
||||||
|
expectedPrefix: "dir1/",
|
||||||
|
},
|
||||||
|
"InvalidPrefix": {
|
||||||
|
dir: "",
|
||||||
|
prefix: "hello/world",
|
||||||
|
expectedPrefix: "hello",
|
||||||
|
shouldError: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, test := range tests {
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
afs := NewMemMapFs()
|
||||||
|
result, err := TempDir(afs, test.dir, test.prefix)
|
||||||
|
|
||||||
|
if test.shouldError {
|
||||||
|
if err == nil {
|
||||||
|
t.Error("err should not be nil")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if result != "" {
|
||||||
|
t.Errorf("result was %s and should be the empty string", result)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
match, _ := regexp.MatchString(test.expectedPrefix+".*", result)
|
||||||
|
if !match {
|
||||||
|
t.Errorf("directory should have prefix %s should exist, but doesn't", test.expectedPrefix)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
exists, err := DirExists(afs, result)
|
||||||
|
if !exists {
|
||||||
|
t.Errorf("directory with prefix %s should exist, but doesn't", test.expectedPrefix)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("err should be nil, but was %s", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
afs.RemoveAll(result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue