Add missing tests and docs for pkg/fileutils
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
parent
853b7e8274
commit
95d6468e72
2 changed files with 60 additions and 8 deletions
|
@ -12,11 +12,13 @@ import (
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Exclusion(pattern string) bool {
|
// exclusion return true if the specified pattern is an exclusion
|
||||||
|
func exclusion(pattern string) bool {
|
||||||
return pattern[0] == '!'
|
return pattern[0] == '!'
|
||||||
}
|
}
|
||||||
|
|
||||||
func Empty(pattern string) bool {
|
// empty return true if the specified pattern is empty
|
||||||
|
func empty(pattern string) bool {
|
||||||
return pattern == ""
|
return pattern == ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,10 +37,10 @@ func CleanPatterns(patterns []string) ([]string, [][]string, bool, error) {
|
||||||
for _, pattern := range patterns {
|
for _, pattern := range patterns {
|
||||||
// Eliminate leading and trailing whitespace.
|
// Eliminate leading and trailing whitespace.
|
||||||
pattern = strings.TrimSpace(pattern)
|
pattern = strings.TrimSpace(pattern)
|
||||||
if Empty(pattern) {
|
if empty(pattern) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if Exclusion(pattern) {
|
if exclusion(pattern) {
|
||||||
if len(pattern) == 1 {
|
if len(pattern) == 1 {
|
||||||
return nil, nil, false, errors.New("Illegal exclusion pattern: !")
|
return nil, nil, false, errors.New("Illegal exclusion pattern: !")
|
||||||
}
|
}
|
||||||
|
@ -46,7 +48,7 @@ func CleanPatterns(patterns []string) ([]string, [][]string, bool, error) {
|
||||||
}
|
}
|
||||||
pattern = filepath.Clean(pattern)
|
pattern = filepath.Clean(pattern)
|
||||||
cleanedPatterns = append(cleanedPatterns, pattern)
|
cleanedPatterns = append(cleanedPatterns, pattern)
|
||||||
if Exclusion(pattern) {
|
if exclusion(pattern) {
|
||||||
pattern = pattern[1:]
|
pattern = pattern[1:]
|
||||||
}
|
}
|
||||||
patternDirs = append(patternDirs, strings.Split(pattern, "/"))
|
patternDirs = append(patternDirs, strings.Split(pattern, "/"))
|
||||||
|
@ -86,7 +88,7 @@ func OptimizedMatches(file string, patterns []string, patDirs [][]string) (bool,
|
||||||
for i, pattern := range patterns {
|
for i, pattern := range patterns {
|
||||||
negative := false
|
negative := false
|
||||||
|
|
||||||
if Exclusion(pattern) {
|
if exclusion(pattern) {
|
||||||
negative = true
|
negative = true
|
||||||
pattern = pattern[1:]
|
pattern = pattern[1:]
|
||||||
}
|
}
|
||||||
|
@ -116,6 +118,9 @@ func OptimizedMatches(file string, patterns []string, patDirs [][]string) (bool,
|
||||||
return matched, nil
|
return matched, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyFile copies from src to dst until either EOF is reached
|
||||||
|
// on src or an error occurs. It verifies src exists and remove
|
||||||
|
// the dst if it exists.
|
||||||
func CopyFile(src, dst string) (int64, error) {
|
func CopyFile(src, dst string) (int64, error) {
|
||||||
cleanSrc := filepath.Clean(src)
|
cleanSrc := filepath.Clean(src)
|
||||||
cleanDst := filepath.Clean(dst)
|
cleanDst := filepath.Clean(dst)
|
||||||
|
@ -138,6 +143,8 @@ func CopyFile(src, dst string) (int64, error) {
|
||||||
return io.Copy(df, sf)
|
return io.Copy(df, sf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetTotalUsedFds Returns the number of used File Descriptors by
|
||||||
|
// reading it via /proc filesystem.
|
||||||
func GetTotalUsedFds() int {
|
func GetTotalUsedFds() int {
|
||||||
if fds, err := ioutil.ReadDir(fmt.Sprintf("/proc/%d/fd", os.Getpid())); err != nil {
|
if fds, err := ioutil.ReadDir(fmt.Sprintf("/proc/%d/fd", os.Getpid())); err != nil {
|
||||||
logrus.Errorf("Error opening /proc/%d/fd: %s", os.Getpid(), err)
|
logrus.Errorf("Error opening /proc/%d/fd: %s", os.Getpid(), err)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -268,7 +269,7 @@ func TestSingleExclamationError(t *testing.T) {
|
||||||
|
|
||||||
// A string preceded with a ! should return true from Exclusion.
|
// A string preceded with a ! should return true from Exclusion.
|
||||||
func TestExclusion(t *testing.T) {
|
func TestExclusion(t *testing.T) {
|
||||||
exclusion := Exclusion("!")
|
exclusion := exclusion("!")
|
||||||
if !exclusion {
|
if !exclusion {
|
||||||
t.Errorf("failed to get true for a single !, got %v", exclusion)
|
t.Errorf("failed to get true for a single !, got %v", exclusion)
|
||||||
}
|
}
|
||||||
|
@ -298,7 +299,7 @@ func TestMatchesWithMalformedPatterns(t *testing.T) {
|
||||||
|
|
||||||
// An empty string should return true from Empty.
|
// An empty string should return true from Empty.
|
||||||
func TestEmpty(t *testing.T) {
|
func TestEmpty(t *testing.T) {
|
||||||
empty := Empty("")
|
empty := empty("")
|
||||||
if !empty {
|
if !empty {
|
||||||
t.Errorf("failed to get true for an empty string, got %v", empty)
|
t.Errorf("failed to get true for an empty string, got %v", empty)
|
||||||
}
|
}
|
||||||
|
@ -355,3 +356,47 @@ func TestCleanPatternsFolderSplit(t *testing.T) {
|
||||||
t.Errorf("expected first element in dirs slice to be config, got %v", dirs[0][1])
|
t.Errorf("expected first element in dirs slice to be config, got %v", dirs[0][1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreateIfNotExistsDir(t *testing.T) {
|
||||||
|
tempFolder, err := ioutil.TempDir("", "docker-fileutils-test")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tempFolder)
|
||||||
|
|
||||||
|
folderToCreate := filepath.Join(tempFolder, "tocreate")
|
||||||
|
|
||||||
|
if err := CreateIfNotExists(folderToCreate, true); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
fileinfo, err := os.Stat(folderToCreate)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Should have create a folder, got %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fileinfo.IsDir() {
|
||||||
|
t.Fatalf("Should have been a dir, seems it's not")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateIfNotExistsFile(t *testing.T) {
|
||||||
|
tempFolder, err := ioutil.TempDir("", "docker-fileutils-test")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tempFolder)
|
||||||
|
|
||||||
|
fileToCreate := filepath.Join(tempFolder, "file/to/create")
|
||||||
|
|
||||||
|
if err := CreateIfNotExists(fileToCreate, false); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
fileinfo, err := os.Stat(fileToCreate)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Should have create a file, got %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileinfo.IsDir() {
|
||||||
|
t.Fatalf("Should have been a file, seems it's not")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue