Files
bifrost/framework/plugins/utils_test.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

91 lines
2.4 KiB
Go

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) {
// Final destination
target := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte(fakePluginBytes))
}))
defer target.Close()
// Redirect server (simulates GitHub → S3)
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) {
// Server that always redirects to itself
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")
}