quorum/plugin/central_test.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
}