github.com/ConsenSys/Quorum@v20.10.0+incompatible/plugin/central_test.go (about)

     1  package plugin
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"io/ioutil"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"os"
    10  	"path"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestCentralClient_PublicKey(t *testing.T) {
    17  	arbitraryServer := newTestServer("/"+DefaultPublicKeyFile, arbitraryPubKey)
    18  	defer arbitraryServer.Close()
    19  	arbitraryConfig := &PluginCentralConfiguration{
    20  		BaseURL:      arbitraryServer.URL,
    21  		PublicKeyURI: DefaultPublicKeyFile,
    22  	}
    23  
    24  	testObject := NewPluginCentralClient(arbitraryConfig)
    25  
    26  	actualValue, err := testObject.PublicKey()
    27  
    28  	if err != nil {
    29  		t.Fatal(err)
    30  	}
    31  	assert.Equal(t, arbitraryPubKey, actualValue)
    32  }
    33  
    34  func TestCentralClient_PublicKey_withSSL(t *testing.T) {
    35  	arbitraryServer := httptest.NewTLSServer(newMux("/"+DefaultPublicKeyFile, arbitraryPubKey))
    36  	defer arbitraryServer.Close()
    37  	arbitraryConfig := &PluginCentralConfiguration{
    38  		CertFingerprint:       string(arbitraryServer.Certificate().Signature),
    39  		BaseURL:               arbitraryServer.URL,
    40  		PublicKeyURI:          DefaultPublicKeyFile,
    41  		InsecureSkipTLSVerify: true,
    42  	}
    43  
    44  	testObject := NewPluginCentralClient(arbitraryConfig)
    45  
    46  	actualValue, err := testObject.PublicKey()
    47  
    48  	if err != nil {
    49  		t.Fatal(err)
    50  	}
    51  	assert.Equal(t, arbitraryPubKey, actualValue)
    52  }
    53  
    54  func TestCentralClient_PluginSignature(t *testing.T) {
    55  	arbitraryDef := &PluginDefinition{
    56  		Name:    "arbitrary-plugin",
    57  		Version: "1.0.0",
    58  	}
    59  	arbitraryServer := newTestServer("/"+arbitraryDef.RemotePath()+"/"+arbitraryDef.SignatureFileName(), validSignature)
    60  	defer arbitraryServer.Close()
    61  	arbitraryConfig := &PluginCentralConfiguration{
    62  		BaseURL: arbitraryServer.URL,
    63  	}
    64  
    65  	testObject := NewPluginCentralClient(arbitraryConfig)
    66  
    67  	actualValue, err := testObject.PluginSignature(arbitraryDef)
    68  
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	assert.Equal(t, validSignature, actualValue)
    73  }
    74  
    75  func TestCentralClient_PluginDistribution(t *testing.T) {
    76  	tmpDir, err := ioutil.TempDir("", "q-")
    77  	if err != nil {
    78  		t.Fatal(err)
    79  	}
    80  	defer func() {
    81  		_ = os.RemoveAll(tmpDir)
    82  	}()
    83  	arbitraryDef := &PluginDefinition{
    84  		Name:    "arbitrary-plugin",
    85  		Version: "1.0.0",
    86  	}
    87  	arbitraryData := []byte("arbitrary data")
    88  	arbitraryServer := newTestServer("/"+arbitraryDef.RemotePath()+"/"+arbitraryDef.DistFileName(), arbitraryData)
    89  	defer arbitraryServer.Close()
    90  	arbitraryConfig := &PluginCentralConfiguration{
    91  		BaseURL: arbitraryServer.URL,
    92  	}
    93  
    94  	testObject := NewPluginCentralClient(arbitraryConfig)
    95  
    96  	err = testObject.PluginDistribution(arbitraryDef, path.Join(tmpDir, "download.zip"))
    97  
    98  	assert.NoError(t, err)
    99  }
   100  
   101  func newTestServer(pattern string, returnedData []byte) *httptest.Server {
   102  	return httptest.NewServer(newMux(pattern, returnedData))
   103  }
   104  
   105  func newMux(pattern string, returnedData []byte) http.Handler {
   106  	mux := http.NewServeMux()
   107  	mux.Handle(pattern, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
   108  		_, err := io.Copy(w, bytes.NewReader(returnedData))
   109  		if err != nil {
   110  			http.Error(w, err.Error(), http.StatusInternalServerError)
   111  		}
   112  	}))
   113  	return mux
   114  }