Something went wrong. Try again.
sloproxy
Something went wrong. Try again.
7.3 kB · 221 lines
Go
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222package pluginhost
import ( "os" "path/filepath" "runtime" "strings" "testing")
func TestCandidateDirs(t *testing.T) { got := candidateDirs("plugins", "darwin", "arm64") want := []string{ filepath.Join("plugins", "darwin", "arm64"), "plugins", } if len(got) != len(want) { t.Fatalf("len(candidateDirs) = %d, want %d", len(got), len(want)) } for index := range want { if got[index] != want[index] { t.Fatalf("candidateDirs[%d] = %q, want %q", index, got[index], want[index]) } }}
func TestPluginExtensionForPlatform(t *testing.T) { cases := []struct { goos string want string }{ {goos: "linux", want: ".so"}, {goos: "freebsd", want: ".so"}, {goos: "darwin", want: ".dylib"}, {goos: "windows", want: ".dll"}, }
for _, tc := range cases { if got := pluginExtension(tc.goos); got != tc.want { t.Fatalf("pluginExtension(%q) = %q, want %q", tc.goos, got, tc.want) } }}
func TestPluginIDFromDynamicLibraryPath(t *testing.T) { cases := map[string]string{ "plugins/example.so": "example", "plugins/example.dylib": "example", "plugins/example.dll": "example", "plugins/example.custom": "example.custom", }
for path, want := range cases { if got := pluginIDFromPath(path); got != want { t.Fatalf("pluginIDFromPath(%q) = %q, want %q", path, got, want) } }}
func TestSelectPluginFilesFiltersInvalidIDAndDeduplicatesByID(t *testing.T) { root := t.TempDir() archDir := filepath.Join(root, runtime.GOOS, runtime.GOARCH) if errMkdirAll := os.MkdirAll(archDir, 0o755); errMkdirAll != nil { t.Fatalf("MkdirAll() error = %v", errMkdirAll) }
extension := pluginExtension(runtime.GOOS) paths := []string{ filepath.Join(root, "sample"+extension), filepath.Join(archDir, "sample"+extension), filepath.Join(archDir, "bad name"+extension), filepath.Join(archDir, "-bad"+extension), filepath.Join(archDir, "another"+strings.ToUpper(extension)), filepath.Join(archDir, "ignored.txt"), } for _, path := range paths { if errWriteFile := os.WriteFile(path, []byte("x"), 0o644); errWriteFile != nil { t.Fatalf("WriteFile(%s) error = %v", path, errWriteFile) } } if errMkdir := os.Mkdir(filepath.Join(archDir, "dir"+extension), 0o755); errMkdir != nil { t.Fatalf("Mkdir() error = %v", errMkdir) }
files, errSelect := selectPluginFiles(root) if errSelect != nil { t.Fatalf("selectPluginFiles() error = %v", errSelect) }
want := []pluginFile{ {ID: "another", Path: filepath.Join(archDir, "another"+strings.ToUpper(extension))}, {ID: "sample", Path: filepath.Join(archDir, "sample"+extension)}, } if len(files) != len(want) { t.Fatalf("selectPluginFiles() = %v, want %v", files, want) } for index := range want { if files[index] != want[index] { t.Fatalf("selectPluginFiles()[%d] = %v, want %v", index, files[index], want[index]) } }}
func TestSelectPluginFilesPrefersPlatformDirOverRootFallback(t *testing.T) { root := t.TempDir() archDir := filepath.Join(root, runtime.GOOS, runtime.GOARCH) if errMkdirAll := os.MkdirAll(archDir, 0o755); errMkdirAll != nil { t.Fatalf("MkdirAll() error = %v", errMkdirAll) }
extension := pluginExtension(runtime.GOOS) platformPath := filepath.Join(archDir, "alpha"+extension) rootPath := filepath.Join(root, "alpha"+extension) for _, path := range []string{rootPath, platformPath} { if errWriteFile := os.WriteFile(path, []byte("x"), 0o644); errWriteFile != nil { t.Fatalf("WriteFile(%s) error = %v", path, errWriteFile) } }
files, errSelect := selectPluginFiles(root) if errSelect != nil { t.Fatalf("selectPluginFiles() error = %v", errSelect) } if len(files) != 1 { t.Fatalf("selectPluginFiles() = %v, want exactly one alpha plugin", files) } if files[0] != (pluginFile{ID: "alpha", Path: platformPath}) { t.Fatalf("selectPluginFiles()[0] = %v, want platform plugin %s", files[0], platformPath) }}
func TestDiscoverPluginFilesReturnsSelectedPluginFiles(t *testing.T) { root := makePluginDir(t, "alpha")
files, errDiscover := DiscoverPluginFiles(root) if errDiscover != nil { t.Fatalf("DiscoverPluginFiles() error = %v", errDiscover) }
if len(files) != 1 || files[0].ID != "alpha" || files[0].Path == "" { t.Fatalf("DiscoverPluginFiles() = %#v, want alpha file", files) }}
func TestSelectPluginFilesPrefersConfiguredVersionOverHigherVersion(t *testing.T) { root := t.TempDir() archDir := filepath.Join(root, runtime.GOOS, runtime.GOARCH) if errMkdirAll := os.MkdirAll(archDir, 0o755); errMkdirAll != nil { t.Fatalf("MkdirAll() error = %v", errMkdirAll) }
extension := pluginExtension(runtime.GOOS) olderPath := filepath.Join(archDir, "alpha-v1.0.3"+extension) newerPath := filepath.Join(archDir, "alpha-v1.0.4"+extension) for _, path := range []string{olderPath, newerPath} { if errWriteFile := os.WriteFile(path, []byte("x"), 0o644); errWriteFile != nil { t.Fatalf("WriteFile(%s) error = %v", path, errWriteFile) } }
files, errSelect := selectPluginFiles(root, map[string]string{"alpha": "1.0.3"}) if errSelect != nil { t.Fatalf("selectPluginFiles() error = %v", errSelect) } if len(files) != 1 { t.Fatalf("selectPluginFiles() = %v, want exactly one alpha plugin", files) } if files[0] != (pluginFile{ID: "alpha", Path: olderPath, Version: "1.0.3"}) { t.Fatalf("selectPluginFiles()[0] = %v, want configured plugin %s", files[0], olderPath) }}
func TestSelectPluginFilesFallsBackToHighestVersionWithoutConfiguredVersion(t *testing.T) { root := t.TempDir() archDir := filepath.Join(root, runtime.GOOS, runtime.GOARCH) if errMkdirAll := os.MkdirAll(archDir, 0o755); errMkdirAll != nil { t.Fatalf("MkdirAll() error = %v", errMkdirAll) }
extension := pluginExtension(runtime.GOOS) olderPath := filepath.Join(archDir, "alpha-v1.0.3"+extension) newerPath := filepath.Join(archDir, "alpha-v1.0.4"+extension) for _, path := range []string{olderPath, newerPath} { if errWriteFile := os.WriteFile(path, []byte("x"), 0o644); errWriteFile != nil { t.Fatalf("WriteFile(%s) error = %v", path, errWriteFile) } }
files, errSelect := selectPluginFiles(root) if errSelect != nil { t.Fatalf("selectPluginFiles() error = %v", errSelect) } if len(files) != 1 { t.Fatalf("selectPluginFiles() = %v, want exactly one alpha plugin", files) } if files[0] != (pluginFile{ID: "alpha", Path: newerPath, Version: "1.0.4"}) { t.Fatalf("selectPluginFiles()[0] = %v, want highest plugin %s", files[0], newerPath) }}
func TestSelectPluginFilesSkipsPluginWhenConfiguredVersionIsMissing(t *testing.T) { root := t.TempDir() archDir := filepath.Join(root, runtime.GOOS, runtime.GOARCH) if errMkdirAll := os.MkdirAll(archDir, 0o755); errMkdirAll != nil { t.Fatalf("MkdirAll() error = %v", errMkdirAll) }
extension := pluginExtension(runtime.GOOS) path := filepath.Join(archDir, "alpha-v1.0.4"+extension) if errWriteFile := os.WriteFile(path, []byte("x"), 0o644); errWriteFile != nil { t.Fatalf("WriteFile(%s) error = %v", path, errWriteFile) }
files, errSelect := selectPluginFiles(root, map[string]string{"alpha": "1.0.3"}) if errSelect != nil { t.Fatalf("selectPluginFiles() error = %v", errSelect) } if len(files) != 0 { t.Fatalf("selectPluginFiles() = %v, want no selected alpha plugin", files) }}