mirror of https://github.com/poanetwork/quorum.git
115 lines
2.9 KiB
Go
115 lines
2.9 KiB
Go
package plugin
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCentralClient_PublicKey(t *testing.T) {
|
|
arbitraryServer := newTestServer("/"+DefaultPublicKeyFile, arbitraryPubKey)
|
|
defer arbitraryServer.Close()
|
|
arbitraryConfig := &PluginCentralConfiguration{
|
|
BaseURL: arbitraryServer.URL,
|
|
PublicKeyURI: DefaultPublicKeyFile,
|
|
}
|
|
|
|
testObject := NewPluginCentralClient(arbitraryConfig)
|
|
|
|
actualValue, err := testObject.PublicKey()
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, arbitraryPubKey, actualValue)
|
|
}
|
|
|
|
func TestCentralClient_PublicKey_withSSL(t *testing.T) {
|
|
arbitraryServer := httptest.NewTLSServer(newMux("/"+DefaultPublicKeyFile, arbitraryPubKey))
|
|
defer arbitraryServer.Close()
|
|
arbitraryConfig := &PluginCentralConfiguration{
|
|
CertFingerprint: string(arbitraryServer.Certificate().Signature),
|
|
BaseURL: arbitraryServer.URL,
|
|
PublicKeyURI: DefaultPublicKeyFile,
|
|
InsecureSkipTLSVerify: true,
|
|
}
|
|
|
|
testObject := NewPluginCentralClient(arbitraryConfig)
|
|
|
|
actualValue, err := testObject.PublicKey()
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, arbitraryPubKey, actualValue)
|
|
}
|
|
|
|
func TestCentralClient_PluginSignature(t *testing.T) {
|
|
arbitraryDef := &PluginDefinition{
|
|
Name: "arbitrary-plugin",
|
|
Version: "1.0.0",
|
|
}
|
|
arbitraryServer := newTestServer("/"+arbitraryDef.RemotePath()+"/"+arbitraryDef.SignatureFileName(), validSignature)
|
|
defer arbitraryServer.Close()
|
|
arbitraryConfig := &PluginCentralConfiguration{
|
|
BaseURL: arbitraryServer.URL,
|
|
}
|
|
|
|
testObject := NewPluginCentralClient(arbitraryConfig)
|
|
|
|
actualValue, err := testObject.PluginSignature(arbitraryDef)
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assert.Equal(t, validSignature, actualValue)
|
|
}
|
|
|
|
func TestCentralClient_PluginDistribution(t *testing.T) {
|
|
tmpDir, err := ioutil.TempDir("", "q-")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() {
|
|
_ = os.RemoveAll(tmpDir)
|
|
}()
|
|
arbitraryDef := &PluginDefinition{
|
|
Name: "arbitrary-plugin",
|
|
Version: "1.0.0",
|
|
}
|
|
arbitraryData := []byte("arbitrary data")
|
|
arbitraryServer := newTestServer("/"+arbitraryDef.RemotePath()+"/"+arbitraryDef.DistFileName(), arbitraryData)
|
|
defer arbitraryServer.Close()
|
|
arbitraryConfig := &PluginCentralConfiguration{
|
|
BaseURL: arbitraryServer.URL,
|
|
}
|
|
|
|
testObject := NewPluginCentralClient(arbitraryConfig)
|
|
|
|
err = testObject.PluginDistribution(arbitraryDef, path.Join(tmpDir, "download.zip"))
|
|
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func newTestServer(pattern string, returnedData []byte) *httptest.Server {
|
|
return httptest.NewServer(newMux(pattern, returnedData))
|
|
}
|
|
|
|
func newMux(pattern string, returnedData []byte) http.Handler {
|
|
mux := http.NewServeMux()
|
|
mux.Handle(pattern, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
|
_, err := io.Copy(w, bytes.NewReader(returnedData))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
}
|
|
}))
|
|
return mux
|
|
}
|