2022-04-27 12:22:20 +00:00
|
|
|
package utils_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"testing"
|
2022-06-14 10:57:04 +00:00
|
|
|
|
|
|
|
"github.com/ClickHouse/ClickHouse/programs/diagnostics/internal/platform/utils"
|
|
|
|
"github.com/stretchr/testify/require"
|
2022-04-27 12:22:20 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestFileExists(t *testing.T) {
|
|
|
|
t.Run("returns true for file", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
filepath := path.Join(tempDir, "random.txt")
|
|
|
|
_, err := os.Create(filepath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
exists, err := utils.FileExists(filepath)
|
|
|
|
require.True(t, exists)
|
|
|
|
require.Nil(t, err)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("doesn't return true for not existence file", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
file := path.Join(tempDir, "random.txt")
|
|
|
|
exists, err := utils.FileExists(file)
|
|
|
|
require.False(t, exists)
|
|
|
|
require.Nil(t, err)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("doesn't return true for directory", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
exists, err := utils.FileExists(tempDir)
|
|
|
|
require.False(t, exists)
|
|
|
|
require.NotNil(t, err)
|
|
|
|
require.Equal(t, fmt.Sprintf("%s is a directory", tempDir), err.Error())
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDirExists(t *testing.T) {
|
|
|
|
t.Run("doesn't return true for file", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
filepath := path.Join(tempDir, "random.txt")
|
|
|
|
_, err := os.Create(filepath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
exists, err := utils.DirExists(filepath)
|
|
|
|
require.False(t, exists)
|
|
|
|
require.NotNil(t, err)
|
|
|
|
require.Equal(t, fmt.Sprintf("%s is a file", filepath), err.Error())
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("returns true for directory", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
exists, err := utils.DirExists(tempDir)
|
|
|
|
require.True(t, exists)
|
|
|
|
require.Nil(t, err)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("doesn't return true random directory", func(t *testing.T) {
|
|
|
|
exists, err := utils.FileExists(fmt.Sprintf("%d", utils.MakeTimestamp()))
|
|
|
|
require.False(t, exists)
|
|
|
|
require.Nil(t, err)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCopyFile(t *testing.T) {
|
|
|
|
t.Run("can copy file", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
sourcePath := path.Join(tempDir, "random.txt")
|
|
|
|
_, err := os.Create(sourcePath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
destPath := path.Join(tempDir, "random-2.txt")
|
|
|
|
err = utils.CopyFile(sourcePath, destPath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("can copy nested file", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
sourcePath := path.Join(tempDir, "random.txt")
|
|
|
|
_, err := os.Create(sourcePath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
destPath := path.Join(tempDir, "sub_dir", "random-2.txt")
|
|
|
|
err = utils.CopyFile(sourcePath, destPath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("fails when file does not exist", func(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
sourcePath := path.Join(tempDir, "random.txt")
|
|
|
|
destPath := path.Join(tempDir, "random-2.txt")
|
|
|
|
err := utils.CopyFile(sourcePath, destPath)
|
|
|
|
require.NotNil(t, err)
|
|
|
|
require.Equal(t, fmt.Sprintf("%s does not exist", sourcePath), err.Error())
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestListFilesInDirectory(t *testing.T) {
|
|
|
|
tempDir := t.TempDir()
|
|
|
|
files := make([]string, 5)
|
|
|
|
for i := 0; i < 5; i++ {
|
|
|
|
fileDir := path.Join(tempDir, fmt.Sprintf("%d", i))
|
|
|
|
err := os.MkdirAll(fileDir, os.ModePerm)
|
|
|
|
require.Nil(t, err)
|
|
|
|
ext := ".txt"
|
|
|
|
if i%2 == 0 {
|
|
|
|
ext = ".csv"
|
|
|
|
}
|
|
|
|
filepath := path.Join(fileDir, fmt.Sprintf("random-%d%s", i, ext))
|
|
|
|
files[i] = filepath
|
|
|
|
_, err = os.Create(filepath)
|
|
|
|
require.Nil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("can list all files", func(t *testing.T) {
|
|
|
|
mFiles, errs := utils.ListFilesInDirectory(tempDir, []string{"*"})
|
|
|
|
require.Len(t, mFiles, 5)
|
|
|
|
require.Empty(t, errs)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("can list by extension", func(t *testing.T) {
|
|
|
|
mFiles, errs := utils.ListFilesInDirectory(tempDir, []string{"*.csv"})
|
|
|
|
require.Len(t, mFiles, 3)
|
|
|
|
require.Empty(t, errs)
|
|
|
|
require.ElementsMatch(t, []string{files[0], files[2], files[4]}, mFiles)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("can list on multiple extensions files", func(t *testing.T) {
|
|
|
|
mFiles, errs := utils.ListFilesInDirectory(tempDir, []string{"*.csv", "*.txt"})
|
|
|
|
require.Len(t, mFiles, 5)
|
|
|
|
require.Empty(t, errs)
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|