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 }