mirror of https://github.com/portainer/portainer
123 lines
3.9 KiB
Go
123 lines
3.9 KiB
Go
package filesystem
|
|
|
|
import (
|
|
"testing"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMultiFilterDirForPerDevConfigs(t *testing.T) {
|
|
f := func(dirEntries []DirEntry, configPath string, multiFilterArgs MultiFilterArgs, wantDirEntries []DirEntry) {
|
|
t.Helper()
|
|
|
|
dirEntries, _ = MultiFilterDirForPerDevConfigs(dirEntries, configPath, multiFilterArgs)
|
|
require.Equal(t, wantDirEntries, dirEntries)
|
|
}
|
|
|
|
baseDirEntries := []DirEntry{
|
|
{".env", "", true, 420},
|
|
{"docker-compose.yaml", "", true, 420},
|
|
{"configs", "", false, 420},
|
|
{"configs/file1.conf", "", true, 420},
|
|
{"configs/file2.conf", "", true, 420},
|
|
{"configs/folder1", "", false, 420},
|
|
{"configs/folder1/config1", "", true, 420},
|
|
{"configs/folder2", "", false, 420},
|
|
{"configs/folder2/config2", "", true, 420},
|
|
}
|
|
|
|
// Filter file1
|
|
f(
|
|
baseDirEntries,
|
|
"configs",
|
|
MultiFilterArgs{{"file1", portainer.PerDevConfigsTypeFile}},
|
|
[]DirEntry{baseDirEntries[0], baseDirEntries[1], baseDirEntries[2], baseDirEntries[3]},
|
|
)
|
|
|
|
// Filter folder1
|
|
f(
|
|
baseDirEntries,
|
|
"configs",
|
|
MultiFilterArgs{{"folder1", portainer.PerDevConfigsTypeDir}},
|
|
[]DirEntry{baseDirEntries[0], baseDirEntries[1], baseDirEntries[2], baseDirEntries[5], baseDirEntries[6]},
|
|
)
|
|
|
|
// Filter file1 and folder1
|
|
f(
|
|
baseDirEntries,
|
|
"configs",
|
|
MultiFilterArgs{{"folder1", portainer.PerDevConfigsTypeDir}},
|
|
[]DirEntry{baseDirEntries[0], baseDirEntries[1], baseDirEntries[2], baseDirEntries[5], baseDirEntries[6]},
|
|
)
|
|
|
|
// Filter file1 and file2
|
|
f(
|
|
baseDirEntries,
|
|
"configs",
|
|
MultiFilterArgs{
|
|
{"file1", portainer.PerDevConfigsTypeFile},
|
|
{"file2", portainer.PerDevConfigsTypeFile},
|
|
},
|
|
[]DirEntry{baseDirEntries[0], baseDirEntries[1], baseDirEntries[2], baseDirEntries[3], baseDirEntries[4]},
|
|
)
|
|
|
|
// Filter folder1 and folder2
|
|
f(
|
|
baseDirEntries,
|
|
"configs",
|
|
MultiFilterArgs{
|
|
{"folder1", portainer.PerDevConfigsTypeDir},
|
|
{"folder2", portainer.PerDevConfigsTypeDir},
|
|
},
|
|
[]DirEntry{baseDirEntries[0], baseDirEntries[1], baseDirEntries[2], baseDirEntries[5], baseDirEntries[6], baseDirEntries[7], baseDirEntries[8]},
|
|
)
|
|
}
|
|
|
|
func TestMultiFilterDirForPerDevConfigsEnvFiles(t *testing.T) {
|
|
f := func(dirEntries []DirEntry, configPath string, multiFilterArgs MultiFilterArgs, wantEnvFiles []string) {
|
|
t.Helper()
|
|
|
|
_, envFiles := MultiFilterDirForPerDevConfigs(dirEntries, configPath, multiFilterArgs)
|
|
require.Equal(t, wantEnvFiles, envFiles)
|
|
}
|
|
|
|
baseDirEntries := []DirEntry{
|
|
{".env", "", true, 420},
|
|
{"docker-compose.yaml", "", true, 420},
|
|
{"configs", "", false, 420},
|
|
{"configs/edge-id/edge-id.env", "", true, 420},
|
|
}
|
|
|
|
f(
|
|
baseDirEntries,
|
|
"configs",
|
|
MultiFilterArgs{{"edge-id", portainer.PerDevConfigsTypeDir}},
|
|
[]string{"configs/edge-id/edge-id.env"},
|
|
)
|
|
|
|
}
|
|
|
|
func TestIsInConfigDir(t *testing.T) {
|
|
f := func(dirEntry DirEntry, configPath string, expect bool) {
|
|
t.Helper()
|
|
|
|
actual := isInConfigDir(dirEntry, configPath)
|
|
assert.Equal(t, expect, actual)
|
|
}
|
|
|
|
f(DirEntry{Name: "edge-configs"}, "edge-configs", false)
|
|
f(DirEntry{Name: "edge-configs_backup"}, "edge-configs", false)
|
|
f(DirEntry{Name: "edge-configs/standalone-edge-agent-standard"}, "edge-configs", true)
|
|
f(DirEntry{Name: "parent/edge-configs/"}, "edge-configs", false)
|
|
f(DirEntry{Name: "edgestacktest"}, "edgestacktest/edge-configs", false)
|
|
f(DirEntry{Name: "edgestacktest/edgeconfigs-test.yaml"}, "edgestacktest/edge-configs", false)
|
|
f(DirEntry{Name: "edgestacktest/file1.conf"}, "edgestacktest/edge-configs", false)
|
|
f(DirEntry{Name: "edgeconfigs-test.yaml"}, "edgestacktest/edge-configs", false)
|
|
f(DirEntry{Name: "edgestacktest/edge-configs"}, "edgestacktest/edge-configs", false)
|
|
f(DirEntry{Name: "edgestacktest/edge-configs/standalone-edge-agent-async"}, "edgestacktest/edge-configs", true)
|
|
f(DirEntry{Name: "edgestacktest/edge-configs/abc.txt"}, "edgestacktest/edge-configs", true)
|
|
}
|