| package plugins |
|
|
| import ( |
| "net/http" |
| "net/http/httptest" |
| "os" |
| "testing" |
|
|
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| ) |
|
|
| const fakePluginBytes = "fake-plugin-binary-content" |
|
|
| func TestDownloadPlugin_DirectDownload(t *testing.T) { |
| server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| w.WriteHeader(http.StatusOK) |
| w.Write([]byte(fakePluginBytes)) |
| })) |
| defer server.Close() |
|
|
| path, err := DownloadPlugin(server.URL, ".so") |
| require.NoError(t, err) |
| defer os.Remove(path) |
|
|
| data, err := os.ReadFile(path) |
| require.NoError(t, err) |
| assert.Equal(t, fakePluginBytes, string(data)) |
| } |
|
|
| func TestDownloadPlugin_FollowsRedirect(t *testing.T) { |
| |
| target := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| w.WriteHeader(http.StatusOK) |
| w.Write([]byte(fakePluginBytes)) |
| })) |
| defer target.Close() |
|
|
| |
| redirector := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| http.Redirect(w, r, target.URL, http.StatusFound) |
| })) |
| defer redirector.Close() |
|
|
| path, err := DownloadPlugin(redirector.URL, ".so") |
| require.NoError(t, err) |
| defer os.Remove(path) |
|
|
| data, err := os.ReadFile(path) |
| require.NoError(t, err) |
| assert.Equal(t, fakePluginBytes, string(data)) |
| } |
|
|
| func TestDownloadPlugin_TooManyRedirects(t *testing.T) { |
| |
| var server *httptest.Server |
| server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| http.Redirect(w, r, server.URL, http.StatusFound) |
| })) |
| defer server.Close() |
|
|
| _, err := DownloadPlugin(server.URL, ".so") |
| require.Error(t, err) |
| assert.Contains(t, err.Error(), "too many redirects") |
| } |
|
|
| func TestDownloadPlugin_NonOKStatus(t *testing.T) { |
| server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| w.WriteHeader(http.StatusNotFound) |
| })) |
| defer server.Close() |
|
|
| _, err := DownloadPlugin(server.URL, ".so") |
| require.Error(t, err) |
| assert.Contains(t, err.Error(), "404") |
| } |
|
|
| func TestDownloadPlugin_FileExtensionPreserved(t *testing.T) { |
| server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| w.WriteHeader(http.StatusOK) |
| w.Write([]byte(fakePluginBytes)) |
| })) |
| defer server.Close() |
|
|
| path, err := DownloadPlugin(server.URL, ".so") |
| require.NoError(t, err) |
| defer os.Remove(path) |
|
|
| assert.Contains(t, path, ".so") |
| } |
|
|