Refactor plugins system
This commit is contained in:
parent
ffd01fc88a
commit
fed86bd816
9 changed files with 828 additions and 261 deletions
159
pkg/plugins/downloader_test.go
Normal file
159
pkg/plugins/downloader_test.go
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
package plugins
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestHTTPPluginDownloader_Download(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
serverResponse func(w http.ResponseWriter, r *http.Request)
|
||||
fileAlreadyExists bool
|
||||
expectError bool
|
||||
}{
|
||||
{
|
||||
name: "successful download",
|
||||
serverResponse: func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/zip")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
||||
require.NoError(t, fillDummyZip(w))
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "not modified response",
|
||||
serverResponse: func(w http.ResponseWriter, r *http.Request) {
|
||||
http.Error(w, "", http.StatusNotModified)
|
||||
},
|
||||
fileAlreadyExists: true,
|
||||
},
|
||||
{
|
||||
name: "server error",
|
||||
serverResponse: func(w http.ResponseWriter, r *http.Request) {
|
||||
http.Error(w, "internal server error", http.StatusInternalServerError)
|
||||
},
|
||||
expectError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(test.serverResponse))
|
||||
defer server.Close()
|
||||
|
||||
tempDir := t.TempDir()
|
||||
archivesPath := filepath.Join(tempDir, "archives")
|
||||
|
||||
if test.fileAlreadyExists {
|
||||
createDummyZip(t, archivesPath)
|
||||
}
|
||||
|
||||
baseURL, err := url.Parse(server.URL)
|
||||
require.NoError(t, err)
|
||||
|
||||
downloader := &RegistryDownloader{
|
||||
httpClient: server.Client(),
|
||||
baseURL: baseURL,
|
||||
archives: archivesPath,
|
||||
}
|
||||
|
||||
ctx := t.Context()
|
||||
hash, err := downloader.Download(ctx, "test/plugin", "v1.0.0")
|
||||
|
||||
if test.expectError {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
assert.NotEmpty(t, hash)
|
||||
|
||||
// Check if archive file was created
|
||||
archivePath := downloader.buildArchivePath("test/plugin", "v1.0.0")
|
||||
assert.FileExists(t, archivePath)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestHTTPPluginDownloader_Check(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
serverResponse func(w http.ResponseWriter, r *http.Request)
|
||||
expectError require.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "successful check",
|
||||
serverResponse: func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
},
|
||||
expectError: require.NoError,
|
||||
},
|
||||
{
|
||||
name: "failed check",
|
||||
serverResponse: func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
},
|
||||
expectError: require.Error,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(test.serverResponse))
|
||||
defer server.Close()
|
||||
|
||||
tempDir := t.TempDir()
|
||||
archivesPath := filepath.Join(tempDir, "archives")
|
||||
|
||||
baseURL, err := url.Parse(server.URL)
|
||||
require.NoError(t, err)
|
||||
|
||||
downloader := &RegistryDownloader{
|
||||
httpClient: server.Client(),
|
||||
baseURL: baseURL,
|
||||
archives: archivesPath,
|
||||
}
|
||||
|
||||
ctx := t.Context()
|
||||
|
||||
err = downloader.Check(ctx, "test/plugin", "v1.0.0", "testhash")
|
||||
test.expectError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func createDummyZip(t *testing.T, path string) {
|
||||
t.Helper()
|
||||
|
||||
err := os.MkdirAll(path+"/test/plugin/", 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
zipfile, err := os.Create(path + "/test/plugin/v1.0.0.zip")
|
||||
require.NoError(t, err)
|
||||
defer zipfile.Close()
|
||||
|
||||
err = fillDummyZip(zipfile)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func fillDummyZip(w io.Writer) error {
|
||||
writer := zip.NewWriter(w)
|
||||
|
||||
file, err := writer.Create("test.txt")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, _ = file.Write([]byte("test content"))
|
||||
_ = writer.Close()
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue