github.com/kaituanwang/hyperledger@v2.0.1+incompatible/internal/configtxlator/rest/configtxlator_handlers_test.go (about) 1 /* 2 Copyright IBM Corp. 2017 All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package rest 8 9 import ( 10 "bytes" 11 "mime/multipart" 12 "net/http" 13 "net/http/httptest" 14 "testing" 15 16 cb "github.com/hyperledger/fabric-protos-go/common" 17 "github.com/hyperledger/fabric/protoutil" 18 "github.com/stretchr/testify/assert" 19 ) 20 21 func TestProtolatorComputeConfigUpdate(t *testing.T) { 22 originalConfig := protoutil.MarshalOrPanic(&cb.Config{ 23 ChannelGroup: &cb.ConfigGroup{ 24 ModPolicy: "foo", 25 }, 26 }) 27 28 updatedConfig := protoutil.MarshalOrPanic(&cb.Config{ 29 ChannelGroup: &cb.ConfigGroup{ 30 ModPolicy: "bar", 31 }, 32 }) 33 34 buffer := &bytes.Buffer{} 35 mpw := multipart.NewWriter(buffer) 36 37 ffw, err := mpw.CreateFormFile("original", "foo") 38 assert.NoError(t, err) 39 _, err = bytes.NewReader(originalConfig).WriteTo(ffw) 40 assert.NoError(t, err) 41 42 ffw, err = mpw.CreateFormFile("updated", "bar") 43 assert.NoError(t, err) 44 _, err = bytes.NewReader(updatedConfig).WriteTo(ffw) 45 assert.NoError(t, err) 46 47 err = mpw.Close() 48 assert.NoError(t, err) 49 50 req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer) 51 assert.NoError(t, err) 52 53 req.Header.Set("Content-Type", mpw.FormDataContentType()) 54 rec := httptest.NewRecorder() 55 r := NewRouter() 56 r.ServeHTTP(rec, req) 57 58 assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) 59 } 60 61 func TestProtolatorMissingOriginal(t *testing.T) { 62 updatedConfig := protoutil.MarshalOrPanic(&cb.Config{ 63 ChannelGroup: &cb.ConfigGroup{ 64 ModPolicy: "bar", 65 }, 66 }) 67 68 buffer := &bytes.Buffer{} 69 mpw := multipart.NewWriter(buffer) 70 71 ffw, err := mpw.CreateFormFile("updated", "bar") 72 assert.NoError(t, err) 73 _, err = bytes.NewReader(updatedConfig).WriteTo(ffw) 74 assert.NoError(t, err) 75 76 err = mpw.Close() 77 assert.NoError(t, err) 78 79 req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer) 80 assert.NoError(t, err) 81 82 req.Header.Set("Content-Type", mpw.FormDataContentType()) 83 rec := httptest.NewRecorder() 84 r := NewRouter() 85 r.ServeHTTP(rec, req) 86 87 assert.Equal(t, http.StatusBadRequest, rec.Code) 88 } 89 90 func TestProtolatorMissingUpdated(t *testing.T) { 91 originalConfig := protoutil.MarshalOrPanic(&cb.Config{ 92 ChannelGroup: &cb.ConfigGroup{ 93 ModPolicy: "bar", 94 }, 95 }) 96 97 buffer := &bytes.Buffer{} 98 mpw := multipart.NewWriter(buffer) 99 100 ffw, err := mpw.CreateFormFile("original", "bar") 101 assert.NoError(t, err) 102 _, err = bytes.NewReader(originalConfig).WriteTo(ffw) 103 assert.NoError(t, err) 104 105 err = mpw.Close() 106 assert.NoError(t, err) 107 108 req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer) 109 assert.NoError(t, err) 110 111 req.Header.Set("Content-Type", mpw.FormDataContentType()) 112 rec := httptest.NewRecorder() 113 r := NewRouter() 114 r.ServeHTTP(rec, req) 115 116 assert.Equal(t, http.StatusBadRequest, rec.Code) 117 } 118 119 func TestProtolatorCorruptProtos(t *testing.T) { 120 originalConfig := []byte("Garbage") 121 updatedConfig := []byte("MoreGarbage") 122 123 buffer := &bytes.Buffer{} 124 mpw := multipart.NewWriter(buffer) 125 126 ffw, err := mpw.CreateFormFile("original", "bar") 127 assert.NoError(t, err) 128 _, err = bytes.NewReader(originalConfig).WriteTo(ffw) 129 assert.NoError(t, err) 130 131 ffw, err = mpw.CreateFormFile("updated", "bar") 132 assert.NoError(t, err) 133 _, err = bytes.NewReader(updatedConfig).WriteTo(ffw) 134 assert.NoError(t, err) 135 136 err = mpw.Close() 137 assert.NoError(t, err) 138 139 req, err := http.NewRequest("POST", "/configtxlator/compute/update-from-configs", buffer) 140 assert.NoError(t, err) 141 142 req.Header.Set("Content-Type", mpw.FormDataContentType()) 143 rec := httptest.NewRecorder() 144 r := NewRouter() 145 r.ServeHTTP(rec, req) 146 147 assert.Equal(t, http.StatusBadRequest, rec.Code) 148 }